mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-25 00:50:22 +00: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
Notes:
github-actions[bot]
2024-11-14 18:51:27 +00:00
Author: https://github.com/Lubrsi Commit: https://github.com/LadybirdBrowser/ladybird/commit/d95ae629ee0 Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/2346
2 changed files with 14 additions and 5 deletions
|
@ -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 a new issue