From cb1c388ee3a91ac907aa7945a64c28f5453c040a Mon Sep 17 00:00:00 2001 From: Luke Wilde Date: Mon, 14 Jul 2025 14:42:08 +0100 Subject: [PATCH] Generators/Interfaces: Refactor separate interface Vectors into a struct --- .../GenerateWindowOrWorkerInterfaces.cpp | 52 ++++++++++--------- 1 file changed, 28 insertions(+), 24 deletions(-) diff --git a/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateWindowOrWorkerInterfaces.cpp b/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateWindowOrWorkerInterfaces.cpp index b5f396e4e58..7d9006f54bc 100644 --- a/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateWindowOrWorkerInterfaces.cpp +++ b/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateWindowOrWorkerInterfaces.cpp @@ -15,7 +15,16 @@ #include #include -static ErrorOr add_to_interface_sets(IDL::Interface&, Vector& intrinsics, Vector& window_exposed, Vector& dedicated_worker_exposed, Vector& shared_worker_exposed, Vector& shadow_realm_exposed); +struct InterfaceSets { + Vector intrinsics; + Vector window_exposed; + Vector dedicated_worker_exposed; + Vector shared_worker_exposed; + Vector shadow_realm_exposed; + // TODO: service_worker_exposed +}; + +static ErrorOr add_to_interface_sets(IDL::Interface&, InterfaceSets& interface_sets); static ByteString s_error_string; struct LegacyConstructor { @@ -37,7 +46,7 @@ static void consume_whitespace(GenericLexer& lexer) } } -static Optional const& lookup_legacy_constructor(IDL::Interface& interface) +static Optional const& lookup_legacy_constructor(IDL::Interface const& interface) { static HashMap> s_legacy_constructors; if (auto cache = s_legacy_constructors.get(interface.name); cache.has_value()) @@ -59,7 +68,7 @@ static Optional const& lookup_legacy_constructor(IDL::Interfa return s_legacy_constructors.get(interface.name).value(); } -static ErrorOr generate_intrinsic_definitions(StringView output_path, Vector& exposed_interfaces) +static ErrorOr generate_intrinsic_definitions(StringView output_path, InterfaceSets const& interface_sets) { StringBuilder builder; SourceGenerator generator(builder); @@ -69,7 +78,7 @@ static ErrorOr generate_intrinsic_definitions(StringView output_path, Vect #include #include )~~~"); - for (auto& interface : exposed_interfaces) { + for (auto& interface : interface_sets.intrinsics) { auto gen = generator.fork(); gen.set("namespace_class", interface.namespace_class); gen.set("prototype_class", interface.prototype_class); @@ -109,7 +118,7 @@ void Intrinsics::create_web_namespace<@namespace_class@>(JS::Realm& realm) [[maybe_unused]] static constexpr u8 attr = JS::Attribute::Writable | JS::Attribute::Configurable;)~~~"); - for (auto& interface : exposed_interfaces) { + for (auto& interface : interface_sets.intrinsics) { if (interface.extended_attributes.get("LegacyNamespace"sv) != name) continue; @@ -168,7 +177,7 @@ void Intrinsics::create_web_prototype_and_constructor<@prototype_class@>(JS::Rea )~~~"); }; - for (auto& interface : exposed_interfaces) { + for (auto& interface : interface_sets.intrinsics) { auto gen = generator.fork(); String named_properties_class; @@ -397,12 +406,7 @@ ErrorOr ladybird_main(Main::Arguments arguments) VERIFY(paths.size() == file_contents.size()); Vector parsers; - Vector intrinsics; - Vector window_exposed; - Vector dedicated_worker_exposed; - Vector shared_worker_exposed; - Vector shadow_realm_exposed; - // TODO: service_worker_exposed + InterfaceSets interface_sets; for (size_t i = 0; i < paths.size(); ++i) { auto const& path = paths[i]; @@ -413,11 +417,11 @@ ErrorOr ladybird_main(Main::Arguments arguments) return Error::from_string_view(s_error_string.view()); } - TRY(add_to_interface_sets(interface, intrinsics, window_exposed, dedicated_worker_exposed, shared_worker_exposed, shadow_realm_exposed)); + TRY(add_to_interface_sets(interface, interface_sets)); parsers.append(move(parser)); } - TRY(generate_intrinsic_definitions(output_path, intrinsics)); + TRY(generate_intrinsic_definitions(output_path, interface_sets)); TRY(generate_exposed_interface_header("Window"sv, output_path)); TRY(generate_exposed_interface_header("DedicatedWorker"sv, output_path)); @@ -425,16 +429,16 @@ ErrorOr ladybird_main(Main::Arguments arguments) TRY(generate_exposed_interface_header("ShadowRealm"sv, output_path)); // TODO: ServiceWorkerExposed.h - TRY(generate_exposed_interface_implementation("Window"sv, output_path, window_exposed)); - TRY(generate_exposed_interface_implementation("DedicatedWorker"sv, output_path, dedicated_worker_exposed)); - TRY(generate_exposed_interface_implementation("SharedWorker"sv, output_path, shared_worker_exposed)); - TRY(generate_exposed_interface_implementation("ShadowRealm"sv, output_path, shadow_realm_exposed)); + TRY(generate_exposed_interface_implementation("Window"sv, output_path, interface_sets.window_exposed)); + TRY(generate_exposed_interface_implementation("DedicatedWorker"sv, output_path, interface_sets.dedicated_worker_exposed)); + TRY(generate_exposed_interface_implementation("SharedWorker"sv, output_path, interface_sets.shared_worker_exposed)); + TRY(generate_exposed_interface_implementation("ShadowRealm"sv, output_path, interface_sets.shadow_realm_exposed)); // TODO: ServiceWorkerExposed.cpp return 0; } -ErrorOr add_to_interface_sets(IDL::Interface& interface, Vector& intrinsics, Vector& window_exposed, Vector& dedicated_worker_exposed, Vector& shared_worker_exposed, Vector& shadow_realm_exposed) +ErrorOr add_to_interface_sets(IDL::Interface& interface, InterfaceSets& interface_sets) { // TODO: Add service worker exposed and audio worklet exposed @@ -445,19 +449,19 @@ ErrorOr add_to_interface_sets(IDL::Interface& interface, Vector