Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(312)

Unified Diff: Source/bindings/scripts/v8_types.py

Issue 680193003: IDL: Generate union type containers (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/bindings/scripts/v8_types.py
diff --git a/Source/bindings/scripts/v8_types.py b/Source/bindings/scripts/v8_types.py
index 0dbbc0bc162c5e7a0ec42701a4a29e85b89c3574..7cfe1f82ad9a8163bd6fff18a9a884d67f9106f0 100644
--- a/Source/bindings/scripts/v8_types.py
+++ b/Source/bindings/scripts/v8_types.py
@@ -192,6 +192,9 @@ def cpp_type(idl_type, extended_attributes=None, raw_type=False, used_as_rvalue_
return cpp_template_type(ptr_type, implemented_as_class)
if idl_type.is_dictionary:
return base_idl_type
+ if idl_type.is_union_type:
+ return idl_type.name
+
# Default, assume native type is a pointer with same type name as idl type
return base_idl_type + '*'
@@ -220,23 +223,11 @@ def cpp_type_initializer(idl_type):
return ' = nullptr'
-def cpp_type_union(idl_type, extended_attributes=None, raw_type=False):
- # FIXME: Need to revisit the design of union support.
- # http://crbug.com/240176
- return None
-
-
-def cpp_type_initializer_union(idl_type):
- return (member_type.cpp_type_initializer for member_type in idl_type.member_types)
-
-
# Allow access as idl_type.cpp_type if no arguments
IdlTypeBase.cpp_type = property(cpp_type)
IdlTypeBase.cpp_type_initializer = property(cpp_type_initializer)
IdlTypeBase.cpp_type_args = cpp_type
-IdlUnionType.cpp_type = property(cpp_type_union)
-IdlUnionType.cpp_type_initializer = property(cpp_type_initializer_union)
-IdlUnionType.cpp_type_args = cpp_type_union
+IdlUnionType.cpp_type_initializer = ''
IdlArrayOrSequenceType.native_array_element_type = property(
@@ -484,6 +475,7 @@ def v8_conversion_needs_exception_state(idl_type):
IdlType.v8_conversion_needs_exception_state = property(v8_conversion_needs_exception_state)
IdlArrayOrSequenceType.v8_conversion_needs_exception_state = True
+IdlUnionType.v8_conversion_needs_exception_state = True
TRIVIAL_CONVERSIONS = frozenset([
@@ -568,7 +560,8 @@ def v8_value_to_cpp_value_array_or_sequence(native_array_element_type, v8_value,
return expression
-def v8_value_to_local_cpp_value(idl_type, extended_attributes, v8_value, variable_name=None, needs_type_check=True, index=None, declare_variable=True, isolate='info.GetIsolate()', used_in_private_script=False, return_promise=False):
+# FIXME: this function should be refactored, as this takes too many flags.
+def v8_value_to_local_cpp_value(idl_type, extended_attributes, v8_value, variable_name=None, needs_type_check=True, index=None, declare_variable=True, isolate='info.GetIsolate()', used_in_private_script=False, return_promise=False, needs_exception_state_for_string=False):
"""Returns an expression that converts a V8 value to a C++ value and stores it as a local value."""
# FIXME: Support union type.
@@ -594,7 +587,7 @@ def v8_value_to_local_cpp_value(idl_type, extended_attributes, v8_value, variabl
if idl_type.v8_conversion_needs_exception_state:
macro = 'TONATIVE_DEFAULT_EXCEPTIONSTATE' if used_in_private_script else 'TONATIVE_VOID_EXCEPTIONSTATE'
- elif return_promise:
+ elif return_promise or needs_exception_state_for_string:
macro = 'TOSTRING_VOID_EXCEPTIONSTATE'
else:
macro = 'TOSTRING_DEFAULT' if used_in_private_script else 'TOSTRING_VOID'
@@ -684,12 +677,8 @@ def v8_conversion_type(idl_type, extended_attributes):
"""
extended_attributes = extended_attributes or {}
- # FIXME: Support union type.
- if idl_type.is_union_type:
- return ''
-
- if idl_type.is_dictionary:
- return 'IDLDictionary'
+ if idl_type.is_dictionary or idl_type.is_union_type:
+ return 'DictionaryOrUnion'
# Array or sequence types
native_array_element_type = idl_type.native_array_element_type
@@ -757,7 +746,8 @@ V8_SET_RETURN_VALUE = {
'DOMWrapperForMainWorld': 'v8SetReturnValueForMainWorld(info, WTF::getPtr({cpp_value}))',
'DOMWrapperFast': 'v8SetReturnValueFast(info, WTF::getPtr({cpp_value}), {script_wrappable})',
'DOMWrapperDefault': 'v8SetReturnValue(info, {cpp_value})',
- 'IDLDictionary': 'v8SetReturnValue(info, result)',
+ # Union types or dictionaries
+ 'DictionaryOrUnion': 'v8SetReturnValue(info, result)',
}
@@ -789,19 +779,10 @@ def v8_set_return_value(idl_type, cpp_value, extended_attributes=None, script_wr
return statement
-def v8_set_return_value_union(idl_type, cpp_value, extended_attributes=None, script_wrappable='', release=False, for_main_world=False):
- # FIXME: Need to revisit the design of union support.
- # http://crbug.com/240176
- return None
-
-
IdlTypeBase.v8_set_return_value = v8_set_return_value
-IdlUnionType.v8_set_return_value = v8_set_return_value_union
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])
+IdlUnionType.release = False
CPP_VALUE_TO_V8_VALUE = {
@@ -828,7 +809,8 @@ CPP_VALUE_TO_V8_VALUE = {
# General
'array': 'v8Array({cpp_value}, {creation_context}, {isolate})',
'DOMWrapper': 'toV8({cpp_value}, {creation_context}, {isolate})',
- 'IDLDictionary': 'toV8({cpp_value}, {creation_context}, {isolate})',
+ # Union types or dictionaries
+ 'DictionaryOrUnion': 'toV8({cpp_value}, {creation_context}, {isolate})',
}

Powered by Google App Engine
This is Rietveld 408576698