From 565dc0f2966db84c7ef3f2ad6fa78ad1a2a08981 Mon Sep 17 00:00:00 2001 From: Luke Wilde Date: Fri, 9 Dec 2022 18:58:52 +0000 Subject: [PATCH] LibWeb: Add namespace qualifier to type names equal to a C++ namespace For example, Document.getSelection returns Selection, which is in the Selection namespace. Namespaces.h has Linus' copyright since he changed the "is_one_of" list to an Array. --- .../BindingsGenerator/IDLGenerators.cpp | 12 +++++- .../LibWeb/BindingsGenerator/Namespaces.h | 40 +++++++++++++++++++ .../LibWeb/BindingsGenerator/main.cpp | 28 +------------ 3 files changed, 53 insertions(+), 27 deletions(-) create mode 100644 Meta/Lagom/Tools/CodeGenerators/LibWeb/BindingsGenerator/Namespaces.h diff --git a/Meta/Lagom/Tools/CodeGenerators/LibWeb/BindingsGenerator/IDLGenerators.cpp b/Meta/Lagom/Tools/CodeGenerators/LibWeb/BindingsGenerator/IDLGenerators.cpp index c511892e84..bae238f75f 100644 --- a/Meta/Lagom/Tools/CodeGenerators/LibWeb/BindingsGenerator/IDLGenerators.cpp +++ b/Meta/Lagom/Tools/CodeGenerators/LibWeb/BindingsGenerator/IDLGenerators.cpp @@ -7,6 +7,7 @@ * SPDX-License-Identifier: BSD-2-Clause */ +#include "Namespaces.h" #include #include #include @@ -1377,7 +1378,16 @@ static void generate_wrap_statement(SourceGenerator& generator, DeprecatedString { auto scoped_generator = generator.fork(); scoped_generator.set("value", value); - scoped_generator.set("type", type.name()); + if (!libweb_interface_namespaces.span().contains_slow(type.name())) { + scoped_generator.set("type", type.name()); + } else { + // e.g. Document.getSelection which returns Selection, which is in the Selection namespace. + StringBuilder builder; + builder.append(type.name()); + builder.append("::"sv); + builder.append(type.name()); + scoped_generator.set("type", builder.to_deprecated_string()); + } scoped_generator.set("result_expression", result_expression); scoped_generator.set("recursion_depth", DeprecatedString::number(recursion_depth)); diff --git a/Meta/Lagom/Tools/CodeGenerators/LibWeb/BindingsGenerator/Namespaces.h b/Meta/Lagom/Tools/CodeGenerators/LibWeb/BindingsGenerator/Namespaces.h new file mode 100644 index 0000000000..19593e63f5 --- /dev/null +++ b/Meta/Lagom/Tools/CodeGenerators/LibWeb/BindingsGenerator/Namespaces.h @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2022, Luke Wilde + * Copyright (c) 2022, Linus Groh + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include +#include + +namespace IDL { + +static constexpr Array libweb_interface_namespaces = { + "CSS"sv, + "Crypto"sv, + "DOM"sv, + "DOMParsing"sv, + "Encoding"sv, + "Fetch"sv, + "FileAPI"sv, + "Geometry"sv, + "HTML"sv, + "HighResolutionTime"sv, + "IntersectionObserver"sv, + "NavigationTiming"sv, + "RequestIdleCallback"sv, + "ResizeObserver"sv, + "SVG"sv, + "Selection"sv, + "UIEvents"sv, + "URL"sv, + "WebGL"sv, + "WebIDL"sv, + "WebSockets"sv, + "XHR"sv, +}; + +} diff --git a/Meta/Lagom/Tools/CodeGenerators/LibWeb/BindingsGenerator/main.cpp b/Meta/Lagom/Tools/CodeGenerators/LibWeb/BindingsGenerator/main.cpp index e332d3a391..4f2c19d7b1 100644 --- a/Meta/Lagom/Tools/CodeGenerators/LibWeb/BindingsGenerator/main.cpp +++ b/Meta/Lagom/Tools/CodeGenerators/LibWeb/BindingsGenerator/main.cpp @@ -7,6 +7,7 @@ * SPDX-License-Identifier: BSD-2-Clause */ +#include "Namespaces.h" #include #include #include @@ -74,32 +75,7 @@ int main(int argc, char** argv) IDL::Parser parser(path, data, import_base_path); auto& interface = parser.parse(); - static constexpr Array libweb_interface_namespaces = { - "CSS"sv, - "Crypto"sv, - "DOM"sv, - "DOMParsing"sv, - "Encoding"sv, - "Fetch"sv, - "FileAPI"sv, - "Geometry"sv, - "HTML"sv, - "HighResolutionTime"sv, - "IntersectionObserver"sv, - "NavigationTiming"sv, - "RequestIdleCallback"sv, - "ResizeObserver"sv, - "SVG"sv, - "Selection"sv, - "UIEvents"sv, - "URL"sv, - "WebGL"sv, - "WebIDL"sv, - "WebSockets"sv, - "XHR"sv, - }; - - if (libweb_interface_namespaces.span().contains_slow(namespace_)) { + if (IDL::libweb_interface_namespaces.span().contains_slow(namespace_)) { StringBuilder builder; builder.append(namespace_); builder.append("::"sv);