mirror of
https://github.com/SerenityOS/serenity.git
synced 2025-01-22 09:21:57 -05: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. (cherry picked from commit d95ae629ee03b99d39930ee5806739622dc8cee6)
This commit is contained in:
parent
c0adae8d7d
commit
3ce2605096
2 changed files with 14 additions and 5 deletions
|
@ -2807,14 +2807,15 @@ static void generate_prototype_or_global_mixin_declarations(IDL::Interface const
|
|||
if (attribute.extended_attributes.contains("FIXME"))
|
||||
continue;
|
||||
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"~~~(
|
||||
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)) {
|
||||
attribute_generator.set("attribute.setter_callback", attribute.setter_callback_name);
|
||||
attribute_generator.append(R"~~~(
|
||||
JS_DECLARE_NATIVE_FUNCTION(@attribute.name:snakecase@_setter);
|
||||
JS_DECLARE_NATIVE_FUNCTION(@attribute.setter_callback@);
|
||||
)~~~");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -326,8 +326,16 @@ void Parser::parse_attribute(HashMap<ByteString, ByteString>& extended_attribute
|
|||
|
||||
assert_specific(';');
|
||||
|
||||
auto getter_callback_name = ByteString::formatted("{}_getter", name.to_snakecase());
|
||||
auto setter_callback_name = ByteString::formatted("{}_setter", name.to_snakecase());
|
||||
ByteString attribute_callback_name;
|
||||
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 {
|
||||
inherit,
|
||||
|
|
Loading…
Reference in a new issue