فهرست منبع

LibWeb: Add support for optional double arguments with no default value

This is implemented by emitting AK::Optional, similar to optional
boolean arguments.
Idan Horowitz 4 سال پیش
والد
کامیت
a257ef0f35
1فایلهای تغییر یافته به همراه30 افزوده شده و 2 حذف شده
  1. 30 2
      Userland/Libraries/LibWeb/CodeGenerators/WrapperGenerator.cpp

+ 30 - 2
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();
     auto& @cpp_name@ = static_cast<@parameter.type.name@Wrapper*>(@cpp_name@_object)->impl();
 )~~~");
 )~~~");
     } else if (parameter.type.name == "double") {
     } 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())
     if (vm.exception())
         @return_statement@
         @return_statement@
 )~~~");
 )~~~");
+        } else {
+            if (!optional_default_value.is_null()) {
+                scoped_generator.append(R"~~~(
+    double @cpp_name@;
+)~~~");
+            } else {
+                scoped_generator.append(R"~~~(
+    Optional<double> @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") {
     } else if (parameter.type.name == "boolean") {
         if (!optional) {
         if (!optional) {
             scoped_generator.append(R"~~~(
             scoped_generator.append(R"~~~(