Chromium Code Reviews| Index: Source/bindings/scripts/v8_methods.py |
| diff --git a/Source/bindings/scripts/v8_methods.py b/Source/bindings/scripts/v8_methods.py |
| index 2fcb88633c3a5af04ddc72f54677fba89e3ac992..f6303f63d6b362c82e6bae553ec1b051da4ff5b4 100644 |
| --- a/Source/bindings/scripts/v8_methods.py |
| +++ b/Source/bindings/scripts/v8_methods.py |
| @@ -192,6 +192,16 @@ def argument_context(interface, method, argument, index): |
| this_cpp_value = cpp_value(interface, method, index) |
| is_variadic_wrapper_type = argument.is_variadic and idl_type.is_wrapper_type |
| + type_checking_interface = ( |
| + (has_extended_attribute_value(interface, 'TypeChecking', 'Interface') or |
| + has_extended_attribute_value(method, 'TypeChecking', 'Interface')) and |
| + idl_type.is_wrapper_type) |
| + |
| + type_checked = (type_checking_interface and |
| + not idl_type.is_nullable and |
|
Jens Widell
2014/10/10 09:26:02
Nit: Include the comment I had in my suggestion as
yunchao
2014/10/10 10:36:11
Done.
|
| + not (argument.is_optional and |
| + 'Default' in extended_attributes)) |
| + |
| if ('ImplementedInPrivateScript' in extended_attributes and |
| not idl_type.is_wrapper_type and |
| not idl_type.is_basic_type): |
| @@ -209,10 +219,7 @@ def argument_context(interface, method, argument, index): |
| 'handle': '%sHandle' % argument.name, |
| # FIXME: remove once [Default] removed and just use argument.default_value |
| 'has_default': 'Default' in extended_attributes or default_cpp_value, |
| - 'has_type_checking_interface': |
| - (has_extended_attribute_value(interface, 'TypeChecking', 'Interface') or |
| - has_extended_attribute_value(method, 'TypeChecking', 'Interface')) and |
| - idl_type.is_wrapper_type, |
| + 'has_type_checking_interface': type_checking_interface, |
|
Jens Widell
2014/10/10 09:26:02
Nit: haraken@ suggested we rename this 'needs_type
yunchao
2014/10/10 10:36:11
'has_type_checking_interface' is used as a key nam
Jens Widell
2014/10/10 10:44:14
Okay.
|
| 'has_type_checking_unrestricted': |
| (has_extended_attribute_value(interface, 'TypeChecking', 'Unrestricted') or |
| has_extended_attribute_value(method, 'TypeChecking', 'Unrestricted')) and |
| @@ -234,7 +241,7 @@ def argument_context(interface, method, argument, index): |
| creation_context='scriptState->context()->Global()'), |
| 'v8_set_return_value': v8_set_return_value(interface.name, method, this_cpp_value), |
| 'v8_set_return_value_for_main_world': v8_set_return_value(interface.name, method, this_cpp_value, for_main_world=True), |
| - 'v8_value_to_local_cpp_value': v8_value_to_local_cpp_value(argument, index, return_promise=method.returns_promise), |
| + 'v8_value_to_local_cpp_value': v8_value_to_local_cpp_value(argument, index, type_checked, return_promise=method.returns_promise), |
| 'vector_type': v8_types.cpp_ptr_type('Vector', 'HeapVector', idl_type.gc_type), |
| } |
| @@ -362,14 +369,14 @@ def v8_value_to_local_cpp_variadic_value(argument, index, return_promise): |
| return '%s%s(%s)' % (macro, suffix, ', '.join(macro_args)) |
| -def v8_value_to_local_cpp_value(argument, index, return_promise=False): |
| +def v8_value_to_local_cpp_value(argument, index, type_checked, return_promise=False): |
| extended_attributes = argument.extended_attributes |
| idl_type = argument.idl_type |
| name = argument.name |
| if argument.is_variadic: |
| return v8_value_to_local_cpp_variadic_value(argument, index, return_promise) |
| return idl_type.v8_value_to_local_cpp_value(extended_attributes, 'info[%s]' % index, |
| - name, index=index, declare_variable=False, return_promise=return_promise) |
| + name, needs_type_check=not type_checked, index=index, declare_variable=False, return_promise=return_promise) |
| ################################################################################ |