Index: Source/bindings/scripts/v8_methods.py |
diff --git a/Source/bindings/scripts/v8_methods.py b/Source/bindings/scripts/v8_methods.py |
index 9cb15b0283a2a842f6720e02152ca42bc0f322c5..32888200307bf31616616ac90d3e5f7c659953c0 100644 |
--- a/Source/bindings/scripts/v8_methods.py |
+++ b/Source/bindings/scripts/v8_methods.py |
@@ -39,7 +39,7 @@ from idl_types import IdlTypeBase, IdlUnionType, inherits_interface |
from v8_globals import includes |
import v8_types |
import v8_utilities |
-from v8_utilities import has_extended_attribute_value |
+from v8_utilities import has_extended_attribute_value, is_unforgeable |
# Methods with any of these require custom method registration code in the |
@@ -75,7 +75,7 @@ def method_context(interface, method, is_visible=True): |
def function_template(): |
if is_static: |
return 'functionTemplate' |
- if 'Unforgeable' in extended_attributes: |
+ if is_unforgeable(interface, method): |
return 'instanceTemplate' |
return 'prototypeTemplate' |
@@ -131,7 +131,9 @@ def method_context(interface, method, is_visible=True): |
'deprecate_as': v8_utilities.deprecate_as(method), # [DeprecateAs] |
'exposed_test': v8_utilities.exposed(method, interface), # [Exposed] |
'function_template': function_template(), |
- 'has_custom_registration': is_static or |
+ 'has_custom_registration': |
+ is_static or |
+ is_unforgeable(interface, method) or |
v8_utilities.has_extended_attribute( |
method, CUSTOM_REGISTRATION_EXTENDED_ATTRIBUTES), |
'has_exception_state': |
@@ -158,7 +160,7 @@ def method_context(interface, method, is_visible=True): |
'PartialInterfaceImplementedAs' in extended_attributes, |
'is_per_world_bindings': 'PerWorldBindings' in extended_attributes, |
'is_raises_exception': is_raises_exception, |
- 'is_read_only': 'Unforgeable' in extended_attributes, |
+ 'is_read_only': is_unforgeable(interface, method), |
'is_static': is_static, |
'is_variadic': arguments and arguments[-1].is_variadic, |
'measure_as': v8_utilities.measure_as(method), # [MeasureAs] |
@@ -174,7 +176,7 @@ def method_context(interface, method, is_visible=True): |
'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), |
- 'property_attributes': property_attributes(method), |
+ 'property_attributes': property_attributes(interface, method), |
'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', |
@@ -384,12 +386,12 @@ def v8_value_to_local_cpp_value(argument, index, return_promise=False, restricte |
################################################################################ |
# [NotEnumerable] |
-def property_attributes(method): |
+def property_attributes(interface, method): |
extended_attributes = method.extended_attributes |
property_attributes_list = [] |
if 'NotEnumerable' in extended_attributes: |
property_attributes_list.append('v8::DontEnum') |
- if 'Unforgeable' in extended_attributes: |
+ if is_unforgeable(interface, method): |
property_attributes_list.append('v8::ReadOnly') |
if property_attributes_list: |
property_attributes_list.insert(0, 'v8::DontDelete') |