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

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

Issue 2730183003: bindings: Add C++ versions of WebIDL types and generalize NativeValueTraits. (Closed)
Patch Set: Move specialization for SerializedScriptValue to the appropriate header Created 3 years, 9 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: third_party/WebKit/Source/bindings/scripts/v8_types.py
diff --git a/third_party/WebKit/Source/bindings/scripts/v8_types.py b/third_party/WebKit/Source/bindings/scripts/v8_types.py
index d3e21143b23827961c717806b9d2ee5a557c5e2a..536e1d6db894923807cd875f0888ddba30535642 100644
--- a/third_party/WebKit/Source/bindings/scripts/v8_types.py
+++ b/third_party/WebKit/Source/bindings/scripts/v8_types.py
@@ -365,7 +365,8 @@ def includes_for_type(idl_type, extended_attributes=None):
set(['bindings/%s/v8/V8%s.h' % (component_dir[base_idl_type], base_idl_type)])
)
if idl_type.is_basic_type:
- return set()
+ return set(['bindings/core/v8/IDLTypes.h',
+ 'bindings/core/v8/NativeValueTraitsImpl.h'])
if base_idl_type.endswith('ConstructorConstructor'):
# FIXME: rename to NamedConstructor
# FIXME: replace with a [NamedConstructorAttribute] extended attribute
@@ -474,31 +475,16 @@ def set_component_dirs(new_component_dirs):
# V8 -> C++
################################################################################
+# TODO(rakuco): Get rid of this definition altogether and move to NativeValueTraits<T>::nativeValue().
+# That requires not requiring ExceptionState where it is not used, and we must be careful not
+# to introduce any performance regressions.
V8_VALUE_TO_CPP_VALUE = {
# Basic
- 'Date': 'toCoreDate({isolate}, {v8_value}, exceptionState)',
'DOMString': '{v8_value}',
- 'ByteString': 'toByteString({isolate}, {arguments})',
- 'USVString': 'toUSVString({isolate}, {arguments})',
- 'boolean': 'toBoolean({isolate}, {arguments})',
- 'float': 'toRestrictedFloat({isolate}, {arguments})',
- 'unrestricted float': 'toFloat({isolate}, {arguments})',
- 'double': 'toRestrictedDouble({isolate}, {arguments})',
- 'unrestricted double': 'toDouble({isolate}, {arguments})',
- 'byte': 'toInt8({isolate}, {arguments})',
- 'octet': 'toUInt8({isolate}, {arguments})',
- 'short': 'toInt16({isolate}, {arguments})',
- 'unsigned short': 'toUInt16({isolate}, {arguments})',
- 'long': 'toInt32({isolate}, {arguments})',
- 'unsigned long': 'toUInt32({isolate}, {arguments})',
- 'long long': 'toInt64({isolate}, {arguments})',
- 'unsigned long long': 'toUInt64({isolate}, {arguments})',
# Interface types
- 'Dictionary': 'Dictionary({isolate}, {v8_value}, exceptionState)',
'FlexibleArrayBufferView': 'toFlexibleArrayBufferView({isolate}, {v8_value}, {variable_name}, allocateFlexibleArrayBufferViewStorage({v8_value}))',
'NodeFilter': 'toNodeFilter({v8_value}, info.Holder(), ScriptState::current({isolate}))',
'Promise': 'ScriptPromise::cast(ScriptState::current({isolate}), {v8_value})',
- 'SerializedScriptValue': 'SerializedScriptValue::serialize({isolate}, {v8_value}, nullptr, nullptr, exceptionState)',
'ScriptValue': 'ScriptValue(ScriptState::current({isolate}), {v8_value})',
'Window': 'toDOMWindow({isolate}, {v8_value})',
'XPathNSResolver': 'toXPathNSResolver(ScriptState::current({isolate}), {v8_value})',
@@ -560,11 +546,12 @@ def v8_value_to_cpp_value(idl_type, extended_attributes, v8_value, variable_name
configuration = 'EnforceRange'
elif 'Clamp' in extended_attributes:
configuration = 'Clamp'
- arguments = ', '.join([v8_value, configuration, 'exceptionState'])
+ arguments = ', '.join([v8_value, 'exceptionState', configuration])
elif idl_type.v8_conversion_needs_exception_state:
arguments = ', '.join([v8_value, 'exceptionState'])
else:
arguments = v8_value
+
if base_idl_type in V8_VALUE_TO_CPP_VALUE:
cpp_expression_format = V8_VALUE_TO_CPP_VALUE[base_idl_type]
elif idl_type.is_array_buffer_or_view:
@@ -579,6 +566,17 @@ def v8_value_to_cpp_value(idl_type, extended_attributes, v8_value, variable_name
elif idl_type.is_callback_function:
cpp_expression_format = (
'{idl_type}::create(ScriptState::current({isolate}), {v8_value})')
+ elif idl_type.v8_conversion_needs_exception_state:
+ # Effectively, this if branch means everything with v8_conversion_needs_exception_state == True
+ # except for unions, sequences and dictionary interfaces.
+ if idl_type.is_nullable:
+ idl_type = idl_type.inner_type
+ if idl_type.is_primitive_type or idl_type.name in ('ByteString', 'Date', 'Promise', 'USVString'):
+ trait_type = 'IDL%s' % idl_type.name
+ else:
+ trait_type = idl_type.name
+ cpp_expression_format = (
+ 'NativeValueTraits<%s>::nativeValue({isolate}, {arguments})' % trait_type)
else:
cpp_expression_format = (
'V8{idl_type}::toImplWithTypeCheck({isolate}, {v8_value})')
« no previous file with comments | « third_party/WebKit/Source/bindings/scripts/v8_interface.py ('k') | third_party/WebKit/Source/bindings/scripts/v8_union.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698