Index: Source/bindings/scripts/unstable/v8_methods.py |
diff --git a/Source/bindings/scripts/unstable/v8_methods.py b/Source/bindings/scripts/unstable/v8_methods.py |
index a20d28938ecd3693a623a86f8ecaa5ed530de7ad..63a41afe701c5e3229ddb821fff0c1b4eccfe624 100644 |
--- a/Source/bindings/scripts/unstable/v8_methods.py |
+++ b/Source/bindings/scripts/unstable/v8_methods.py |
@@ -65,6 +65,7 @@ def generate_argument(method, argument, index): |
'cpp_method': cpp_method(method, index), |
'cpp_type': v8_types.cpp_type(idl_type), |
'enum_validation_expression': v8_utilities.enum_validation_expression(idl_type), |
+ 'has_default': 'Default' in extended_attributes, |
'idl_type': argument.idl_type, |
'index': index, |
'is_clamp': 'Clamp' in extended_attributes, |
@@ -104,7 +105,9 @@ def custom_signature(arguments): |
return 'V8PerIsolateData::from(isolate)->rawTemplate(&V8{idl_type}::wrapperTypeInfo, currentWorldType)'.format(idl_type=idl_type) |
return 'v8::Handle<v8::FunctionTemplate>()' |
- if (any(argument.is_optional for argument in arguments) or |
+ if (any(argument.is_optional and |
+ 'Default' not in argument.extended_attributes |
+ for argument in arguments) or |
all(not v8_types.is_wrapper_type(argument.idl_type) |
for argument in arguments)): |
return None |
@@ -112,11 +115,17 @@ def custom_signature(arguments): |
def v8_value_to_local_cpp_value(argument, index): |
+ extended_attributes = argument.extended_attributes |
idl_type = argument.idl_type |
name = argument.name |
if argument.is_variadic: |
return 'V8TRYCATCH_VOID(Vector<{cpp_type}>, {name}, toNativeArguments<{cpp_type}>(args, {index}))'.format( |
cpp_type=v8_types.cpp_type(idl_type), name=name, index=index) |
+ if (argument.is_optional and idl_type == 'DOMString' and |
+ extended_attributes.get('Default') == 'NullString'): |
+ v8_value = 'argumentOrNull(args, %s)' % index |
+ else: |
+ v8_value = 'args[%s]' % index |
return v8_types.v8_value_to_local_cpp_value( |
- idl_type, argument.extended_attributes, |
- 'args[%s]' % index, name, 'args.GetIsolate()', index=index) |
+ idl_type, argument.extended_attributes, v8_value, name, |
+ 'args.GetIsolate()', index=index) |