summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Wilde <lukew@serenityos.org>2023-02-27 18:07:41 +0000
committerAndreas Kling <kling@serenityos.org>2023-02-27 20:55:09 +0100
commite3a9ed0c267990b6e517ca47e7c436146327ba4d (patch)
tree18bcdacdce78c595114f41a26b75fdb1c17733f6
parentdec09333a3c357cc72c52c5a9de9590cd001d721 (diff)
downloadserenity-e3a9ed0c267990b6e517ca47e7c436146327ba4d.zip
LibWeb: Make [UseNewAKString] work for enums and stringifiers
-rw-r--r--Meta/Lagom/Tools/CodeGenerators/LibWeb/BindingsGenerator/IDLGenerators.cpp55
1 files changed, 46 insertions, 9 deletions
diff --git a/Meta/Lagom/Tools/CodeGenerators/LibWeb/BindingsGenerator/IDLGenerators.cpp b/Meta/Lagom/Tools/CodeGenerators/LibWeb/BindingsGenerator/IDLGenerators.cpp
index e8639cfe39..60c551c7c6 100644
--- a/Meta/Lagom/Tools/CodeGenerators/LibWeb/BindingsGenerator/IDLGenerators.cpp
+++ b/Meta/Lagom/Tools/CodeGenerators/LibWeb/BindingsGenerator/IDLGenerators.cpp
@@ -1,7 +1,7 @@
/*
* Copyright (c) 2020-2023, Andreas Kling <kling@serenityos.org>
* Copyright (c) 2021-2023, Linus Groh <linusg@serenityos.org>
- * Copyright (c) 2021, Luke Wilde <lukew@serenityos.org>
+ * Copyright (c) 2021-2023, Luke Wilde <lukew@serenityos.org>
* Copyright (c) 2022, Ali Mohammad Pur <mpfard@serenityos.org>
* Copyright (c) 2023, Kenneth Myhra <kennethmyhra@serenityos.org>
*
@@ -654,7 +654,7 @@ static void generate_to_cpp(SourceGenerator& generator, ParameterType& parameter
}
enum_generator.append(R"~~~(
- auto @js_name.as_string@ = TRY(@js_name@@js_suffix@.to_deprecated_string(vm));
+ auto @js_name.as_string@ = TRY(@js_name@@js_suffix@.to_string(vm));
)~~~");
auto first = true;
VERIFY(enumeration.translated_cpp_names.size() >= 1);
@@ -1617,6 +1617,15 @@ static void generate_wrap_statement(SourceGenerator& generator, DeprecatedString
);
)~~~");
} else if (interface.enumerations.contains(type.name())) {
+ if (!interface.extended_attributes.contains("UseNewAKString")) {
+ scoped_generator.append(R"~~~(
+ @result_expression@ JS::PrimitiveString::create(vm, Bindings::idl_enum_to_deprecated_string(@value@));
+)~~~");
+ } else {
+ scoped_generator.append(R"~~~(
+ @result_expression@ JS::PrimitiveString::create(vm, TRY_OR_THROW_OOM(vm, Bindings::idl_enum_to_string(@value@)));
+)~~~");
+ }
scoped_generator.append(R"~~~(
@result_expression@ JS::PrimitiveString::create(vm, Bindings::idl_enum_to_deprecated_string(@value@));
)~~~");
@@ -2411,21 +2420,43 @@ enum class @enum.type.name@ {
enum_generator.append(R"~~~(
};
+)~~~");
+
+ if (!interface.extended_attributes.contains("UseNewAKString")) {
+ enum_generator.append(R"~~~(
inline DeprecatedString idl_enum_to_deprecated_string(@enum.type.name@ value) {
switch(value) {
)~~~");
- for (auto& entry : it.value.translated_cpp_names) {
- enum_generator.set("enum.entry", entry.value);
- enum_generator.set("enum.string", entry.key);
- enum_generator.append(R"~~~(
+ for (auto& entry : it.value.translated_cpp_names) {
+ enum_generator.set("enum.entry", entry.value);
+ enum_generator.set("enum.string", entry.key);
+ enum_generator.append(R"~~~(
case @enum.type.name@::@enum.entry@: return "@enum.string@";
)~~~");
- }
- enum_generator.append(R"~~~(
+ }
+ enum_generator.append(R"~~~(
default: return "<unknown>";
};
}
)~~~");
+ } else {
+ enum_generator.append(R"~~~(
+inline ErrorOr<String> idl_enum_to_string(@enum.type.name@ value) {
+ switch(value) {
+)~~~");
+ for (auto& entry : it.value.translated_cpp_names) {
+ enum_generator.set("enum.entry", entry.value);
+ enum_generator.set("enum.string", entry.key);
+ enum_generator.append(R"~~~(
+ case @enum.type.name@::@enum.entry@: return String::from_utf8("@enum.string@"sv);
+)~~~");
+ }
+ enum_generator.append(R"~~~(
+ default: return String::from_utf8("<unknown>"sv);
+ };
+}
+)~~~");
+ }
}
generator.append(R"~~~(
@@ -2811,9 +2842,15 @@ JS_DEFINE_NATIVE_FUNCTION(@class_name@::to_string)
auto retval = TRY(throw_dom_exception_if_needed(vm, [&] { return impl->@attribute.cpp_getter_name@(); }));
)~~~");
} else {
- stringifier_generator.append(R"~~~(
+ if (!interface.extended_attributes.contains("UseNewAKString")) {
+ stringifier_generator.append(R"~~~(
auto retval = TRY(throw_dom_exception_if_needed(vm, [&] { return impl->to_deprecated_string(); }));
)~~~");
+ } else {
+ stringifier_generator.append(R"~~~(
+ auto retval = TRY(throw_dom_exception_if_needed(vm, [&] { return impl->to_string(); }));
+)~~~");
+ }
}
stringifier_generator.append(R"~~~(