Index: Source/bindings/scripts/v8_types.py |
diff --git a/Source/bindings/scripts/v8_types.py b/Source/bindings/scripts/v8_types.py |
index 46f2553c952698edb5fc27e5c47a89e166603da5..5d599ab428dddef3676a84cbb6d983f34792fac0 100644 |
--- a/Source/bindings/scripts/v8_types.py |
+++ b/Source/bindings/scripts/v8_types.py |
@@ -39,7 +39,7 @@ Design doc: http://www.chromium.org/developers/design-documents/idl-compiler |
import posixpath |
-from idl_types import IdlTypeBase, IdlType, IdlUnionType |
+from idl_types import IdlTypeBase, IdlType, IdlUnionType, IdlArrayOrSequenceType |
import v8_attributes # for IdlType.constructor_type_name |
from v8_globals import includes |
@@ -152,7 +152,7 @@ def cpp_type(idl_type, extended_attributes=None, raw_type=False, used_as_rvalue_ |
extended_attributes = extended_attributes or {} |
idl_type = idl_type.preprocessed_type |
- # Composite types |
+ # Array or sequence types |
if used_as_variadic_argument: |
native_array_element_type = idl_type |
else: |
@@ -227,6 +227,11 @@ IdlUnionType.cpp_type_initializer = property(cpp_type_initializer_union) |
IdlUnionType.cpp_type_args = cpp_type_union |
+IdlTypeBase.native_array_element_type = None |
+IdlArrayOrSequenceType.native_array_element_type = property( |
+ lambda self: self.element_type) |
+ |
+ |
def cpp_template_type(template, inner_type): |
"""Returns C++ template specialized to type, with space added if needed.""" |
if inner_type.endswith('>'): |
@@ -347,11 +352,6 @@ INCLUDES_FOR_TYPE = { |
def includes_for_type(idl_type): |
idl_type = idl_type.preprocessed_type |
- # Composite types |
- native_array_element_type = idl_type.native_array_element_type |
- if native_array_element_type: |
- return includes_for_type(native_array_element_type) |
- |
# Simple types |
base_idl_type = idl_type.base_type |
if base_idl_type in INCLUDES_FOR_TYPE: |
@@ -379,6 +379,8 @@ IdlType.includes_for_type = property(includes_for_type) |
IdlUnionType.includes_for_type = property( |
lambda self: set.union(*[includes_for_type(member_type) |
for member_type in self.member_types])) |
+IdlArrayOrSequenceType.includes_for_type = property( |
+ lambda self: self.element_type.includes_for_type) |
def add_includes_for_type(idl_type): |
@@ -472,7 +474,7 @@ def v8_value_to_cpp_value(idl_type, extended_attributes, v8_value, index, isolat |
if idl_type.name == 'void': |
return '' |
- # Composite types |
+ # Array or sequence types |
native_array_element_type = idl_type.native_array_element_type |
if native_array_element_type: |
return v8_value_to_cpp_value_array_or_sequence(native_array_element_type, v8_value, index) |
@@ -537,7 +539,7 @@ def v8_value_to_local_cpp_value(idl_type, extended_attributes, v8_value, variabl |
idl_type = idl_type.preprocessed_type |
cpp_value = v8_value_to_cpp_value(idl_type, extended_attributes, v8_value, index, isolate) |
args = [variable_name, cpp_value] |
- if idl_type.base_type == 'DOMString' and not idl_type.native_array_element_type: |
+ if idl_type.base_type == 'DOMString': |
macro = 'TOSTRING_DEFAULT' if used_in_private_script else 'TOSTRING_VOID' |
elif idl_type.may_raise_exception_on_conversion: |
macro = 'TONATIVE_DEFAULT_EXCEPTIONSTATE' if used_in_private_script else 'TONATIVE_VOID_EXCEPTIONSTATE' |
@@ -614,7 +616,11 @@ def v8_conversion_type(idl_type, extended_attributes): |
""" |
extended_attributes = extended_attributes or {} |
- # Composite types |
+ # FIXME: Support union type. |
+ if idl_type.is_union_type: |
+ return '' |
+ |
+ # Array or sequence types |
native_array_element_type = idl_type.native_array_element_type |
if native_array_element_type: |
if native_array_element_type.is_interface_type: |
@@ -733,6 +739,7 @@ IdlType.release = property(lambda self: self.is_interface_type) |
IdlUnionType.release = property( |
lambda self: [member_type.is_interface_type |
for member_type in self.member_types]) |
+IdlArrayOrSequenceType.release = False |
CPP_VALUE_TO_V8_VALUE = { |
@@ -795,8 +802,7 @@ def cpp_type_has_null_value(idl_type): |
# i.e. one for which String::isNull() returns true. |
# - Wrapper types (raw pointer or RefPtr/PassRefPtr) represent null as |
# a null pointer. |
- return ((idl_type.is_string_type or idl_type.is_wrapper_type) and |
- not idl_type.native_array_element_type) |
+ return idl_type.is_string_type or idl_type.is_wrapper_type |
IdlTypeBase.cpp_type_has_null_value = property(cpp_type_has_null_value) |