mirror of
https://github.com/zebrajr/ladybird.git
synced 2025-12-06 00:19:53 +01:00
LibIDL: Allow overwriting the generated attribute callback name
This will allow the CSSStyleDeclaration IDL attribute generator to implement it's own C++ acceptable identifier sanitization and deduplication.
This commit is contained in:
parent
300f212044
commit
d95ae629ee
|
|
@ -326,8 +326,16 @@ void Parser::parse_attribute(HashMap<ByteString, ByteString>& extended_attribute
|
||||||
|
|
||||||
assert_specific(';');
|
assert_specific(';');
|
||||||
|
|
||||||
auto getter_callback_name = ByteString::formatted("{}_getter", name.to_snakecase());
|
ByteString attribute_callback_name;
|
||||||
auto setter_callback_name = ByteString::formatted("{}_setter", name.to_snakecase());
|
auto custom_callback_name = extended_attributes.find("AttributeCallbackName");
|
||||||
|
if (custom_callback_name != extended_attributes.end()) {
|
||||||
|
attribute_callback_name = custom_callback_name->value;
|
||||||
|
} else {
|
||||||
|
attribute_callback_name = name.to_snakecase().replace("-"sv, "_"sv, ReplaceMode::All);
|
||||||
|
}
|
||||||
|
|
||||||
|
auto getter_callback_name = ByteString::formatted("{}_getter", attribute_callback_name);
|
||||||
|
auto setter_callback_name = ByteString::formatted("{}_setter", attribute_callback_name);
|
||||||
|
|
||||||
Attribute attribute {
|
Attribute attribute {
|
||||||
inherit,
|
inherit,
|
||||||
|
|
|
||||||
|
|
@ -2810,14 +2810,15 @@ static void generate_prototype_or_global_mixin_declarations(IDL::Interface const
|
||||||
if (attribute.extended_attributes.contains("FIXME"))
|
if (attribute.extended_attributes.contains("FIXME"))
|
||||||
continue;
|
continue;
|
||||||
auto attribute_generator = generator.fork();
|
auto attribute_generator = generator.fork();
|
||||||
attribute_generator.set("attribute.name:snakecase", attribute.name.to_snakecase());
|
attribute_generator.set("attribute.getter_callback", attribute.getter_callback_name);
|
||||||
attribute_generator.append(R"~~~(
|
attribute_generator.append(R"~~~(
|
||||||
JS_DECLARE_NATIVE_FUNCTION(@attribute.name:snakecase@_getter);
|
JS_DECLARE_NATIVE_FUNCTION(@attribute.getter_callback@);
|
||||||
)~~~");
|
)~~~");
|
||||||
|
|
||||||
if (!attribute.readonly || attribute.extended_attributes.contains("Replaceable"sv) || attribute.extended_attributes.contains("PutForwards"sv)) {
|
if (!attribute.readonly || attribute.extended_attributes.contains("Replaceable"sv) || attribute.extended_attributes.contains("PutForwards"sv)) {
|
||||||
|
attribute_generator.set("attribute.setter_callback", attribute.setter_callback_name);
|
||||||
attribute_generator.append(R"~~~(
|
attribute_generator.append(R"~~~(
|
||||||
JS_DECLARE_NATIVE_FUNCTION(@attribute.name:snakecase@_setter);
|
JS_DECLARE_NATIVE_FUNCTION(@attribute.setter_callback@);
|
||||||
)~~~");
|
)~~~");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user