diff options
author | Luke Wilde <lukew@serenityos.org> | 2023-02-27 18:07:41 +0000 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2023-02-27 20:55:09 +0100 |
commit | e3a9ed0c267990b6e517ca47e7c436146327ba4d (patch) | |
tree | 18bcdacdce78c595114f41a26b75fdb1c17733f6 | |
parent | dec09333a3c357cc72c52c5a9de9590cd001d721 (diff) | |
download | serenity-e3a9ed0c267990b6e517ca47e7c436146327ba4d.zip |
LibWeb: Make [UseNewAKString] work for enums and stringifiers
-rw-r--r-- | Meta/Lagom/Tools/CodeGenerators/LibWeb/BindingsGenerator/IDLGenerators.cpp | 55 |
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"~~~( |