Index: Source/bindings/scripts/unstable/v8_interface.py |
diff --git a/Source/bindings/scripts/unstable/v8_interface.py b/Source/bindings/scripts/unstable/v8_interface.py |
index e160e66aaf7bb8c17af0941d3aa1ddda05045326..97330a7d9143c03e75340caaf42fe6d474f0cf77 100644 |
--- a/Source/bindings/scripts/unstable/v8_interface.py |
+++ b/Source/bindings/scripts/unstable/v8_interface.py |
@@ -524,32 +524,42 @@ def interface_length(interface, constructors): |
# http://heycam.github.io/webidl/#idl-special-operations |
################################################################################ |
-def property_getter(getter): |
+def property_getter(getter, cpp_arguments): |
def is_null_expression(idl_type): |
+ if v8_types.is_union_type(idl_type): |
+ return ' && '.join('!result%sEnabled' % i |
+ for i, _ in |
+ enumerate(idl_type.union_member_types)) |
if idl_type == 'DOMString': |
- return 'element.isNull()' |
+ return 'result.isNull()' |
if is_interface_type(idl_type): |
- return '!element' |
+ return '!result' |
return '' |
- def union_arguments(idl_type): |
- """Return list of ['element0Enabled', 'element0', 'element1Enabled', ...]""" |
- return [arg |
- for i in range(len(idl_type.union_member_types)) |
- for arg in ['element%sEnabled' % i, 'element%s' % i]] |
- |
idl_type = getter.idl_type |
extended_attributes = getter.extended_attributes |
+ is_raises_exception = 'RaisesException' in extended_attributes |
- is_union_type = v8_types.is_union_type(idl_type) |
- if is_union_type: |
+ if v8_types.is_union_type(idl_type): |
release = [v8_types.is_interface_type(union_member_type) |
for union_member_type in idl_type.union_member_types] |
else: |
release = v8_types.is_interface_type(idl_type) |
+ # FIXME: make more generic, so can use v8_methods.cpp_value |
+ cpp_method_name = 'imp->%s' % cpp_name(getter) |
+ |
+ if is_raises_exception: |
+ cpp_arguments.append('exceptionState') |
+ this_union_arguments = v8_methods.union_arguments(idl_type) |
+ if this_union_arguments: |
+ cpp_arguments.extend(this_union_arguments) |
+ |
+ cpp_value = '%s(%s)' % (cpp_method_name, ', '.join(cpp_arguments)) |
+ |
return { |
'cpp_type': v8_types.cpp_type(idl_type), |
+ 'cpp_value': cpp_value, |
'is_custom': |
'Custom' in extended_attributes and |
(not extended_attributes['Custom'] or |
@@ -560,10 +570,10 @@ def property_getter(getter): |
getter, 'Custom', 'PropertyQuery'), |
'is_enumerable': 'NotEnumerable' not in extended_attributes, |
'is_null_expression': is_null_expression(idl_type), |
- 'is_raises_exception': 'RaisesException' in extended_attributes, |
+ 'is_raises_exception': is_raises_exception, |
'name': cpp_name(getter), |
- 'union_arguments': union_arguments(idl_type) if is_union_type else None, |
- 'v8_set_return_value': v8_types.v8_set_return_value(idl_type, 'element', extended_attributes=extended_attributes, script_wrappable='collection', release=release), |
+ 'union_arguments': v8_methods.union_arguments(idl_type), |
+ 'v8_set_return_value': v8_types.v8_set_return_value(idl_type, 'result', extended_attributes=extended_attributes, script_wrappable='imp', release=release), |
} |
@@ -618,7 +628,7 @@ def indexed_property_getter(interface): |
except StopIteration: |
return None |
- return property_getter(getter) |
+ return property_getter(getter, ['index']) |
def indexed_property_setter(interface): |
@@ -671,7 +681,8 @@ def named_property_getter(interface): |
except StopIteration: |
return None |
- return property_getter(getter) |
+ getter.name = getter.name or 'anonymousNamedGetter' |
+ return property_getter(getter, ['propertyName']) |
def named_property_setter(interface): |