From 0d921720b4687870eb57bf9099e4f8f3c9409426 Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Wed, 15 Mar 2023 18:13:03 -0400 Subject: [PATCH] LibWeb: Support generating optional object IDL parameters These are used by WebAssembly IDL. --- .../LibWeb/BindingsGenerator/IDLGenerators.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Meta/Lagom/Tools/CodeGenerators/LibWeb/BindingsGenerator/IDLGenerators.cpp b/Meta/Lagom/Tools/CodeGenerators/LibWeb/BindingsGenerator/IDLGenerators.cpp index 71c113d5b8..257e222603 100644 --- a/Meta/Lagom/Tools/CodeGenerators/LibWeb/BindingsGenerator/IDLGenerators.cpp +++ b/Meta/Lagom/Tools/CodeGenerators/LibWeb/BindingsGenerator/IDLGenerators.cpp @@ -605,9 +605,17 @@ static void generate_to_cpp(SourceGenerator& generator, ParameterType& parameter auto @cpp_name@ = JS::make_handle(&static_cast(@js_name@@js_suffix@.as_object())); )~~~"); } else if (parameter.type->name() == "object") { - scoped_generator.append(R"~~~( + if (optional) { + scoped_generator.append(R"~~~( + Optional> @cpp_name@; + if (!@js_name@@js_suffix@.is_undefined()) + @cpp_name@ = JS::make_handle(TRY(@js_name@@js_suffix@.to_object(vm))); +)~~~"); + } else { + scoped_generator.append(R"~~~( auto @cpp_name@ = JS::make_handle(TRY(@js_name@@js_suffix@.to_object(vm))); )~~~"); + } } else if (parameter.type->name() == "BufferSource") { scoped_generator.append(R"~~~( if (!@js_name@@js_suffix@.is_object() || !(is(@js_name@@js_suffix@.as_object()) || is(@js_name@@js_suffix@.as_object()) || is(@js_name@@js_suffix@.as_object())))