Index: Source/bindings/scripts/code_generator_v8.py |
diff --git a/Source/bindings/scripts/code_generator_v8.py b/Source/bindings/scripts/code_generator_v8.py |
index 41e81fdaae08a507ec9365f5c4e5ecb204048477..0cfaec9bdf5bab4a464e0b30ccb960d27ad1a0ff 100644 |
--- a/Source/bindings/scripts/code_generator_v8.py |
+++ b/Source/bindings/scripts/code_generator_v8.py |
@@ -126,7 +126,7 @@ def cpp_value_to_js_value(data_type, cpp_value, isolate, creation_context=''): |
return 'v8::Number::New(%s)' % cpp_value |
if data_type == 'DOMString': |
return 'v8String(%s, %s)' % (cpp_value, isolate) |
- if sequence_type(data_type): |
+ if array_or_sequence_type(data_type): |
return 'v8Array(%s, %s)' % (cpp_value, isolate) |
return 'toV8(%s, %s, %s)' % (cpp_value, creation_context, isolate) |
@@ -146,8 +146,8 @@ def generate_conditional_string(interface_or_attribute_or_operation): |
def includes_for_type(data_type): |
if primitive_type(data_type) or data_type == 'DOMString': |
return set() |
- if sequence_type(data_type): |
- return includes_for_type(sequence_type(data_type)) |
+ if array_or_sequence_type(data_type): |
+ return includes_for_type(array_or_sequence_type(data_type)) |
return set(['V8%s.h' % data_type]) |
@@ -173,6 +173,16 @@ def sequence_type(data_type): |
return matched.group(1) |
+def array_type(data_type): |
+ matched = re.match(r'([\w\d_\s]+)\[\]', data_type) |
+ if not matched: |
+ return None |
+ return matched.group(1) |
+ |
+ |
+def array_or_sequence_type(data_type): |
+ return array_type(data_type) or sequence_type(data_type) |
+ |
def cpp_type(data_type, pointer_type): |
"""Returns the C++ type corresponding to the IDL type. |
@@ -184,8 +194,8 @@ def cpp_type(data_type, pointer_type): |
""" |
if data_type in CPP_TYPE_SPECIAL_CONVERSION_RULES: |
return CPP_TYPE_SPECIAL_CONVERSION_RULES[data_type] |
- if sequence_type(data_type): |
- return 'Vector<%s >' % cpp_type(sequence_type(data_type), 'RefPtr') |
+ if array_or_sequence_type(data_type): |
+ return 'const Vector<%s >&' % cpp_type(array_or_sequence_type(data_type), 'RefPtr') |
if pointer_type == 'raw': |
return data_type + '*' |
if pointer_type in ['RefPtr', 'PassRefPtr']: |