mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 20:57:35 +00:00
LibWeb: Add support for implementing an IDL class with a different name
Add support for the extended attribute "ImplementedAs" for IDL interfaces too. This allows a class which implements an IDL interface to have a different class name than the interface itself.
This commit is contained in:
parent
62f62a0e52
commit
1b6346ee1c
3 changed files with 10 additions and 4 deletions
|
@ -77,10 +77,10 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
|
||||||
StringBuilder builder;
|
StringBuilder builder;
|
||||||
builder.append(namespace_);
|
builder.append(namespace_);
|
||||||
builder.append("::"sv);
|
builder.append("::"sv);
|
||||||
builder.append(interface.name);
|
builder.append(interface.implemented_name);
|
||||||
interface.fully_qualified_name = builder.to_byte_string();
|
interface.fully_qualified_name = builder.to_byte_string();
|
||||||
} else {
|
} else {
|
||||||
interface.fully_qualified_name = interface.name;
|
interface.fully_qualified_name = interface.implemented_name;
|
||||||
}
|
}
|
||||||
|
|
||||||
if constexpr (BINDINGS_GENERATOR_DEBUG) {
|
if constexpr (BINDINGS_GENERATOR_DEBUG) {
|
||||||
|
|
|
@ -634,8 +634,13 @@ void Parser::parse_interface(Interface& interface)
|
||||||
else
|
else
|
||||||
interface.namespaced_name = interface.name;
|
interface.namespaced_name = interface.name;
|
||||||
|
|
||||||
interface.constructor_class = ByteString::formatted("{}Constructor", interface.name);
|
if (auto maybe_implemented_as = interface.extended_attributes.get("ImplementedAs"); maybe_implemented_as.has_value())
|
||||||
interface.prototype_class = ByteString::formatted("{}Prototype", interface.name);
|
interface.implemented_name = maybe_implemented_as.release_value();
|
||||||
|
else
|
||||||
|
interface.implemented_name = interface.name;
|
||||||
|
|
||||||
|
interface.constructor_class = ByteString::formatted("{}Constructor", interface.implemented_name);
|
||||||
|
interface.prototype_class = ByteString::formatted("{}Prototype", interface.implemented_name);
|
||||||
interface.prototype_base_class = ByteString::formatted("{}Prototype", interface.parent_name.is_empty() ? "Object" : interface.parent_name);
|
interface.prototype_base_class = ByteString::formatted("{}Prototype", interface.parent_name.is_empty() ? "Object" : interface.parent_name);
|
||||||
interface.global_mixin_class = ByteString::formatted("{}GlobalMixin", interface.name);
|
interface.global_mixin_class = ByteString::formatted("{}GlobalMixin", interface.name);
|
||||||
consume_whitespace();
|
consume_whitespace();
|
||||||
|
|
|
@ -260,6 +260,7 @@ public:
|
||||||
ByteString name;
|
ByteString name;
|
||||||
ByteString parent_name;
|
ByteString parent_name;
|
||||||
ByteString namespaced_name;
|
ByteString namespaced_name;
|
||||||
|
ByteString implemented_name;
|
||||||
|
|
||||||
bool is_namespace { false };
|
bool is_namespace { false };
|
||||||
bool is_mixin { false };
|
bool is_mixin { false };
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue