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:
Luke Wilde 2024-11-14 16:17:41 +00:00 committed by Andreas Kling
parent 300f212044
commit d95ae629ee
Notes: github-actions[bot] 2024-11-14 18:51:27 +00:00
2 changed files with 14 additions and 5 deletions

View file

@ -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,

View file

@ -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@);
)~~~"); )~~~");
} }
} }