Index: Source/bindings/templates/methods.cpp |
diff --git a/Source/bindings/templates/methods.cpp b/Source/bindings/templates/methods.cpp |
index 0650c48664fea7f36890f858e7e8521d162a5d84..af976dc5bc24f457a0a26a4bb6ac785811609af9 100644 |
--- a/Source/bindings/templates/methods.cpp |
+++ b/Source/bindings/templates/methods.cpp |
@@ -76,19 +76,23 @@ if (listener && !impl->toNode()) |
{######################################} |
{% macro generate_arguments(method, world_suffix) %} |
{% for argument in method.arguments %} |
-{{generate_argument_var_declaration(argument)}}; |
-{% endfor %} |
+{{generate_argument_var_declaration(argument)}} |
+{%- endfor %} |
{ |
{% if method.arguments_need_try_catch %} |
v8::TryCatch block; |
V8RethrowTryCatchScope rethrow(block); |
{% endif %} |
{% for argument in method.arguments %} |
- {% if argument.default_value %} |
+ {% if argument.default_value or argument.is_explicit_optional %} |
if (info.Length() > {{argument.index}}) { |
{{generate_argument(method, argument, world_suffix) | indent(8)}} |
} else { |
+ {% if argument.default_value %} |
{{argument.name}} = {{argument.default_value}}; |
+ {% else %} |
+ {{argument.name}}Missing = true; |
+ {% endif %} |
} |
{% else %} |
{{generate_argument(method, argument, world_suffix) | indent}} |
@@ -103,23 +107,26 @@ if (listener && !impl->toNode()) |
{% if argument.is_callback_interface %} |
{# FIXME: remove EventListener special case #} |
{% if argument.idl_type == 'EventListener' %} |
-RefPtr<{{argument.idl_type}}> {{argument.name}} |
-{%- else %} |
-OwnPtr<{{argument.idl_type}}> {{argument.name}} |
-{%- endif %}{# argument.idl_type == 'EventListener' #} |
-{%- elif argument.is_clamp %}{# argument.is_callback_interface #} |
+RefPtr<{{argument.idl_type}}> {{argument.name}}; |
+{% else %} |
+OwnPtr<{{argument.idl_type}}> {{argument.name}}; |
+{% endif %}{# argument.idl_type == 'EventListener' #} |
+{% elif argument.is_clamp %}{# argument.is_callback_interface #} |
{# NaN is treated as 0: http://www.w3.org/TR/WebIDL/#es-type-mapping #} |
-{{argument.cpp_type}} {{argument.name}} = 0 |
-{%- else %} |
-{{argument.cpp_type}} {{argument.name}} |
-{%- endif %} |
-{% endmacro %} |
+{{argument.cpp_type}} {{argument.name}} = 0; |
+{% else %} |
+{{argument.cpp_type}} {{argument.name}}; |
+{% endif %} |
+{% if argument.is_explicit_optional %} |
+bool {{argument.name}}Missing = false; |
+{% endif %} |
+{%- endmacro %} |
{######################################} |
{% macro generate_argument(method, argument, world_suffix) %} |
-{% if argument.is_optional and not argument.has_default and |
- argument.idl_type != 'Dictionary' and |
+{% if argument.is_optional and not argument.is_explicit_optional and |
+ not argument.has_default and argument.idl_type != 'Dictionary' and |
not argument.is_callback_interface %} |
{# Optional arguments without a default value generate an early call with |
fewer arguments if they are omitted. |