mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-08-07 00:29:15 +00:00
Generators/Interfaces: Refactor separate interface Vectors into a struct
This commit is contained in:
parent
c60e3fb445
commit
cb1c388ee3
Notes:
github-actions[bot]
2025-07-15 13:21:26 +00:00
Author: https://github.com/Lubrsi
Commit: cb1c388ee3
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/5443
Reviewed-by: https://github.com/trflynn89 ✅
1 changed files with 28 additions and 24 deletions
|
@ -15,7 +15,16 @@
|
||||||
#include <LibIDL/Types.h>
|
#include <LibIDL/Types.h>
|
||||||
#include <LibMain/Main.h>
|
#include <LibMain/Main.h>
|
||||||
|
|
||||||
static ErrorOr<void> add_to_interface_sets(IDL::Interface&, Vector<IDL::Interface&>& intrinsics, Vector<IDL::Interface&>& window_exposed, Vector<IDL::Interface&>& dedicated_worker_exposed, Vector<IDL::Interface&>& shared_worker_exposed, Vector<IDL::Interface&>& shadow_realm_exposed);
|
struct InterfaceSets {
|
||||||
|
Vector<IDL::Interface&> intrinsics;
|
||||||
|
Vector<IDL::Interface&> window_exposed;
|
||||||
|
Vector<IDL::Interface&> dedicated_worker_exposed;
|
||||||
|
Vector<IDL::Interface&> shared_worker_exposed;
|
||||||
|
Vector<IDL::Interface&> shadow_realm_exposed;
|
||||||
|
// TODO: service_worker_exposed
|
||||||
|
};
|
||||||
|
|
||||||
|
static ErrorOr<void> add_to_interface_sets(IDL::Interface&, InterfaceSets& interface_sets);
|
||||||
static ByteString s_error_string;
|
static ByteString s_error_string;
|
||||||
|
|
||||||
struct LegacyConstructor {
|
struct LegacyConstructor {
|
||||||
|
@ -37,7 +46,7 @@ static void consume_whitespace(GenericLexer& lexer)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static Optional<LegacyConstructor> const& lookup_legacy_constructor(IDL::Interface& interface)
|
static Optional<LegacyConstructor> const& lookup_legacy_constructor(IDL::Interface const& interface)
|
||||||
{
|
{
|
||||||
static HashMap<StringView, Optional<LegacyConstructor>> s_legacy_constructors;
|
static HashMap<StringView, Optional<LegacyConstructor>> s_legacy_constructors;
|
||||||
if (auto cache = s_legacy_constructors.get(interface.name); cache.has_value())
|
if (auto cache = s_legacy_constructors.get(interface.name); cache.has_value())
|
||||||
|
@ -59,7 +68,7 @@ static Optional<LegacyConstructor> const& lookup_legacy_constructor(IDL::Interfa
|
||||||
return s_legacy_constructors.get(interface.name).value();
|
return s_legacy_constructors.get(interface.name).value();
|
||||||
}
|
}
|
||||||
|
|
||||||
static ErrorOr<void> generate_intrinsic_definitions(StringView output_path, Vector<IDL::Interface&>& exposed_interfaces)
|
static ErrorOr<void> generate_intrinsic_definitions(StringView output_path, InterfaceSets const& interface_sets)
|
||||||
{
|
{
|
||||||
StringBuilder builder;
|
StringBuilder builder;
|
||||||
SourceGenerator generator(builder);
|
SourceGenerator generator(builder);
|
||||||
|
@ -69,7 +78,7 @@ static ErrorOr<void> generate_intrinsic_definitions(StringView output_path, Vect
|
||||||
#include <LibJS/Runtime/Object.h>
|
#include <LibJS/Runtime/Object.h>
|
||||||
#include <LibWeb/Bindings/Intrinsics.h>)~~~");
|
#include <LibWeb/Bindings/Intrinsics.h>)~~~");
|
||||||
|
|
||||||
for (auto& interface : exposed_interfaces) {
|
for (auto& interface : interface_sets.intrinsics) {
|
||||||
auto gen = generator.fork();
|
auto gen = generator.fork();
|
||||||
gen.set("namespace_class", interface.namespace_class);
|
gen.set("namespace_class", interface.namespace_class);
|
||||||
gen.set("prototype_class", interface.prototype_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;)~~~");
|
[[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)
|
if (interface.extended_attributes.get("LegacyNamespace"sv) != name)
|
||||||
continue;
|
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();
|
auto gen = generator.fork();
|
||||||
|
|
||||||
String named_properties_class;
|
String named_properties_class;
|
||||||
|
@ -397,12 +406,7 @@ ErrorOr<int> ladybird_main(Main::Arguments arguments)
|
||||||
VERIFY(paths.size() == file_contents.size());
|
VERIFY(paths.size() == file_contents.size());
|
||||||
|
|
||||||
Vector<IDL::Parser> parsers;
|
Vector<IDL::Parser> parsers;
|
||||||
Vector<IDL::Interface&> intrinsics;
|
InterfaceSets interface_sets;
|
||||||
Vector<IDL::Interface&> window_exposed;
|
|
||||||
Vector<IDL::Interface&> dedicated_worker_exposed;
|
|
||||||
Vector<IDL::Interface&> shared_worker_exposed;
|
|
||||||
Vector<IDL::Interface&> shadow_realm_exposed;
|
|
||||||
// TODO: service_worker_exposed
|
|
||||||
|
|
||||||
for (size_t i = 0; i < paths.size(); ++i) {
|
for (size_t i = 0; i < paths.size(); ++i) {
|
||||||
auto const& path = paths[i];
|
auto const& path = paths[i];
|
||||||
|
@ -413,11 +417,11 @@ ErrorOr<int> ladybird_main(Main::Arguments arguments)
|
||||||
return Error::from_string_view(s_error_string.view());
|
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));
|
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("Window"sv, output_path));
|
||||||
TRY(generate_exposed_interface_header("DedicatedWorker"sv, output_path));
|
TRY(generate_exposed_interface_header("DedicatedWorker"sv, output_path));
|
||||||
|
@ -425,16 +429,16 @@ ErrorOr<int> ladybird_main(Main::Arguments arguments)
|
||||||
TRY(generate_exposed_interface_header("ShadowRealm"sv, output_path));
|
TRY(generate_exposed_interface_header("ShadowRealm"sv, output_path));
|
||||||
// TODO: ServiceWorkerExposed.h
|
// TODO: ServiceWorkerExposed.h
|
||||||
|
|
||||||
TRY(generate_exposed_interface_implementation("Window"sv, output_path, window_exposed));
|
TRY(generate_exposed_interface_implementation("Window"sv, output_path, interface_sets.window_exposed));
|
||||||
TRY(generate_exposed_interface_implementation("DedicatedWorker"sv, output_path, dedicated_worker_exposed));
|
TRY(generate_exposed_interface_implementation("DedicatedWorker"sv, output_path, interface_sets.dedicated_worker_exposed));
|
||||||
TRY(generate_exposed_interface_implementation("SharedWorker"sv, output_path, shared_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, shadow_realm_exposed));
|
TRY(generate_exposed_interface_implementation("ShadowRealm"sv, output_path, interface_sets.shadow_realm_exposed));
|
||||||
// TODO: ServiceWorkerExposed.cpp
|
// TODO: ServiceWorkerExposed.cpp
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
ErrorOr<void> add_to_interface_sets(IDL::Interface& interface, Vector<IDL::Interface&>& intrinsics, Vector<IDL::Interface&>& window_exposed, Vector<IDL::Interface&>& dedicated_worker_exposed, Vector<IDL::Interface&>& shared_worker_exposed, Vector<IDL::Interface&>& shadow_realm_exposed)
|
ErrorOr<void> add_to_interface_sets(IDL::Interface& interface, InterfaceSets& interface_sets)
|
||||||
{
|
{
|
||||||
// TODO: Add service worker exposed and audio worklet exposed
|
// TODO: Add service worker exposed and audio worklet exposed
|
||||||
|
|
||||||
|
@ -445,19 +449,19 @@ ErrorOr<void> add_to_interface_sets(IDL::Interface& interface, Vector<IDL::Inter
|
||||||
}
|
}
|
||||||
auto whom = TRY(IDL::parse_exposure_set(interface.name, *maybe_exposed));
|
auto whom = TRY(IDL::parse_exposure_set(interface.name, *maybe_exposed));
|
||||||
|
|
||||||
intrinsics.append(interface);
|
interface_sets.intrinsics.append(interface);
|
||||||
|
|
||||||
if (whom & IDL::ExposedTo::Window)
|
if (whom & IDL::ExposedTo::Window)
|
||||||
window_exposed.append(interface);
|
interface_sets.window_exposed.append(interface);
|
||||||
|
|
||||||
if (whom & IDL::ExposedTo::DedicatedWorker)
|
if (whom & IDL::ExposedTo::DedicatedWorker)
|
||||||
dedicated_worker_exposed.append(interface);
|
interface_sets.dedicated_worker_exposed.append(interface);
|
||||||
|
|
||||||
if (whom & IDL::ExposedTo::SharedWorker)
|
if (whom & IDL::ExposedTo::SharedWorker)
|
||||||
shared_worker_exposed.append(interface);
|
interface_sets.shared_worker_exposed.append(interface);
|
||||||
|
|
||||||
if (whom & IDL::ExposedTo::ShadowRealm)
|
if (whom & IDL::ExposedTo::ShadowRealm)
|
||||||
shadow_realm_exposed.append(interface);
|
interface_sets.shadow_realm_exposed.append(interface);
|
||||||
|
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue