From 567abd52a3a69d8be9c177c0f5084f63489fc3ea Mon Sep 17 00:00:00 2001 From: Luke Wilde Date: Sat, 19 Feb 2022 21:53:29 +0000 Subject: [PATCH] LibWeb: Add support for optional, non-nullable wrapper types --- .../LibWeb/WrapperGenerator/IDLGenerators.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/Meta/Lagom/Tools/CodeGenerators/LibWeb/WrapperGenerator/IDLGenerators.cpp b/Meta/Lagom/Tools/CodeGenerators/LibWeb/WrapperGenerator/IDLGenerators.cpp index 63c4389785..5a99a08c16 100644 --- a/Meta/Lagom/Tools/CodeGenerators/LibWeb/WrapperGenerator/IDLGenerators.cpp +++ b/Meta/Lagom/Tools/CodeGenerators/LibWeb/WrapperGenerator/IDLGenerators.cpp @@ -335,12 +335,24 @@ static void generate_to_cpp(SourceGenerator& generator, ParameterType& parameter } } else if (IDL::is_wrappable_type(*parameter.type)) { if (!parameter.type->nullable) { - scoped_generator.append(R"~~~( + if (!optional) { + scoped_generator.append(R"~~~( if (!@js_name@@js_suffix@.is_object() || !is<@wrapper_name@>(@js_name@@js_suffix@.as_object())) return vm.throw_completion(global_object, JS::ErrorType::NotAnObjectOfType, "@parameter.type.name@"); auto& @cpp_name@ = static_cast<@wrapper_name@&>(@js_name@@js_suffix@.as_object()).impl(); )~~~"); + } else { + scoped_generator.append(R"~~~( + Optional> @cpp_name@; + if (!@js_name@@js_suffix@.is_undefined()) { + if (!@js_name@@js_suffix@.is_object() || !is<@wrapper_name@>(@js_name@@js_suffix@.as_object())) + return vm.throw_completion(global_object, JS::ErrorType::NotAnObjectOfType, "@parameter.type.name@"); + + @cpp_name@ = static_cast<@wrapper_name@&>(@js_name@@js_suffix@.as_object()).impl(); + } +)~~~"); + } } else { scoped_generator.append(R"~~~( @parameter.type.name@* @cpp_name@ = nullptr;