Index: Source/bindings/scripts/v8_methods.py |
diff --git a/Source/bindings/scripts/v8_methods.py b/Source/bindings/scripts/v8_methods.py |
index 32888200307bf31616616ac90d3e5f7c659953c0..f4253981e4a1c54c1e5af8d2c26bf4a0446f0e82 100644 |
--- a/Source/bindings/scripts/v8_methods.py |
+++ b/Source/bindings/scripts/v8_methods.py |
@@ -175,8 +175,9 @@ def method_context(interface, method, is_visible=True): |
'only_exposed_to_private_script': is_only_exposed_to_private_script, |
'per_context_enabled_function': v8_utilities.per_context_enabled_function_name(method), # [PerContextEnabled] |
'private_script_v8_value_to_local_cpp_value': idl_type.v8_value_to_local_cpp_value( |
- extended_attributes, 'v8Value', 'cppValue', isolate='scriptState->isolate()', used_in_private_script=True), |
+ extended_attributes, 'v8Value', 'cppValue', isolate='scriptState->isolate()', bailout_return_value='false'), |
'property_attributes': property_attributes(interface, method), |
+ 'returns_promise': method.returns_promise, |
'runtime_enabled_function': v8_utilities.runtime_enabled_function_name(method), # [RuntimeEnabled] |
'should_be_exposed_to_script': not (is_implemented_in_private_script and is_only_exposed_to_private_script), |
'signature': 'v8::Local<v8::Signature>()' if is_static or 'DoNotCheckSignature' in extended_attributes else 'defaultSignature', |
@@ -242,7 +243,7 @@ def argument_context(interface, method, argument, index): |
'use_permissive_dictionary_conversion': 'PermissiveDictionaryConversion' in extended_attributes, |
'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, restricted_float=restricted_float), |
+ 'v8_value_to_local_cpp_value': v8_value_to_local_cpp_value(method, argument, index, restricted_float=restricted_float), |
'vector_type': v8_types.cpp_ptr_type('Vector', 'HeapVector', idl_type.gc_type), |
} |
@@ -347,37 +348,34 @@ def v8_set_return_value(interface_name, method, cpp_value, for_main_world=False) |
return idl_type.v8_set_return_value(cpp_value, extended_attributes, script_wrappable=script_wrappable, release=release, for_main_world=for_main_world) |
-def v8_value_to_local_cpp_variadic_value(argument, index, return_promise): |
+def v8_value_to_local_cpp_variadic_value(method, argument, index, return_promise): |
assert argument.is_variadic |
idl_type = argument.idl_type |
+ this_cpp_type = idl_type.cpp_type |
- suffix = '' |
- |
- macro = 'TONATIVE_VOID_EXCEPTIONSTATE' |
- macro_args = [ |
- argument.name, |
- 'toImplArguments<%s>(info, %s, exceptionState)' % (idl_type.cpp_type, index), |
- 'exceptionState', |
- ] |
- |
- if return_promise: |
- suffix += '_PROMISE' |
- macro_args.extend(['info', 'ScriptState::current(info.GetIsolate())']) |
- |
- suffix += '_INTERNAL' |
+ if method.returns_promise: |
+ check_expression = 'exceptionState.hadException()' |
+ else: |
+ check_expression = 'exceptionState.throwIfNeeded()' |
- return '%s%s(%s)' % (macro, suffix, ', '.join(macro_args)) |
+ return { |
+ 'assign_expression': 'toImplArguments<%s>(info, %s, exceptionState)' % (this_cpp_type, index), |
+ 'check_expression': check_expression, |
+ 'cpp_type': this_cpp_type, |
+ 'cpp_name': argument.name, |
+ 'declare_variable': False, |
+ } |
-def v8_value_to_local_cpp_value(argument, index, return_promise=False, restricted_float=False): |
+def v8_value_to_local_cpp_value(method, argument, index, return_promise=False, restricted_float=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 v8_value_to_local_cpp_variadic_value(method, 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, |
+ use_exception_state=method.returns_promise, |
restricted_float=restricted_float) |