From a257ef0f35c1a744e5c284c6752efc69db006e91 Mon Sep 17 00:00:00 2001 From: Idan Horowitz Date: Thu, 15 Apr 2021 20:34:44 +0300 Subject: [PATCH] LibWeb: Add support for optional double arguments with no default value This is implemented by emitting AK::Optional, similar to optional boolean arguments. --- .../CodeGenerators/WrapperGenerator.cpp | 32 +++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/Userland/Libraries/LibWeb/CodeGenerators/WrapperGenerator.cpp b/Userland/Libraries/LibWeb/CodeGenerators/WrapperGenerator.cpp index 42b5bb7d3b6..7fde8af1358 100644 --- a/Userland/Libraries/LibWeb/CodeGenerators/WrapperGenerator.cpp +++ b/Userland/Libraries/LibWeb/CodeGenerators/WrapperGenerator.cpp @@ -599,11 +599,39 @@ static void generate_to_cpp(SourceGenerator& generator, ParameterType& parameter auto& @cpp_name@ = static_cast<@parameter.type.name@Wrapper*>(@cpp_name@_object)->impl(); )~~~"); } else if (parameter.type.name == "double") { - scoped_generator.append(R"~~~( - auto @cpp_name@ = @js_name@@js_suffix@.to_double(global_object); + if (!optional) { + scoped_generator.append(R"~~~( + double @cpp_name@ = @js_name@@js_suffix@.to_double(global_object); if (vm.exception()) @return_statement@ )~~~"); + } else { + if (!optional_default_value.is_null()) { + scoped_generator.append(R"~~~( + double @cpp_name@; +)~~~"); + } else { + scoped_generator.append(R"~~~( + Optional @cpp_name@; +)~~~"); + } + scoped_generator.append(R"~~~( + if (!@js_name@@js_suffix@.is_undefined()) { + @cpp_name@ = @js_name@@js_suffix@.to_double(global_object); + if (vm.exception()) + @return_statement@ + } +)~~~"); + if (!optional_default_value.is_null()) { + scoped_generator.append(R"~~~( + else + @cpp_name@ = @parameter.optional_default_value@; +)~~~"); + } else { + scoped_generator.append(R"~~~( +)~~~"); + } + } } else if (parameter.type.name == "boolean") { if (!optional) { scoped_generator.append(R"~~~(