LibWeb/IDL: Add support for optional enums

This commit is contained in:
Luke Wilde 2022-06-04 03:57:54 +01:00 committed by Linus Groh
parent 2a27f2293a
commit 633ac53c0c
Notes: sideshowbarker 2024-07-17 10:16:36 +09:00

View file

@ -577,6 +577,15 @@ static void generate_to_cpp(SourceGenerator& generator, ParameterType& parameter
enum_generator.set("js_name.as_string", String::formatted("{}{}_string", enum_generator.get("js_name"), enum_generator.get("js_suffix")));
enum_generator.append(R"~~~(
@parameter.type.name@ @cpp_name@ { @parameter.type.name@::@enum.default.cpp_value@ };
)~~~");
if (optional) {
enum_generator.append(R"~~~(
if (!@js_name@@js_suffix@.is_undefined()) {
)~~~");
}
enum_generator.append(R"~~~(
auto @js_name.as_string@ = TRY(@js_name@@js_suffix@.to_string(global_object));
)~~~");
auto first = true;
@ -596,6 +605,11 @@ static void generate_to_cpp(SourceGenerator& generator, ParameterType& parameter
@else@
return vm.throw_completion<JS::TypeError>(global_object, JS::ErrorType::InvalidEnumerationValue, @js_name.as_string@, "@parameter.type.name@");
)~~~");
if (optional) {
enum_generator.append(R"~~~(
}
)~~~");
}
} else if (interface.dictionaries.contains(parameter.type->name)) {
if (optional_default_value.has_value() && optional_default_value != "{}")