in bindings/scripts/v8_types.py [0:0]
def v8_value_to_cpp_value(idl_type, extended_attributes, v8_value, variable_name, isolate):
if idl_type.name == 'void':
return ''
# Simple types
idl_type = idl_type.preprocessed_type
base_idl_type = idl_type.as_union_type.name if idl_type.is_union_type else idl_type.base_type
type_extended_attributes = idl_type.extended_attributes or {}
if 'FlexibleArrayBufferView' in extended_attributes:
if base_idl_type not in ARRAY_BUFFER_VIEW_AND_TYPED_ARRAY_TYPES:
raise ValueError('Unrecognized base type for extended attribute "FlexibleArrayBufferView": %s' % (idl_type.base_type))
base_idl_type = 'FlexibleArrayBufferView'
if 'AllowShared' in extended_attributes and not idl_type.is_array_buffer_view_or_typed_array:
raise ValueError('Unrecognized base type for extended attribute "AllowShared": %s' % (idl_type.base_type))
if idl_type.is_integer_type:
configuration = 'kNormalConversion'
# TODO(lisabelle): Remove these 4 lines when we have fully supported
# annoteted types.
# It is because at that time 'Clamp' and 'EnforceRange' will only
# appear in type_extended_attributes, not in extended_attributes.
if 'EnforceRange' in extended_attributes:
configuration = 'kEnforceRange'
elif 'Clamp' in extended_attributes:
configuration = 'kClamp'
if 'EnforceRange' in type_extended_attributes:
configuration = 'kEnforceRange'
elif 'Clamp' in type_extended_attributes:
configuration = 'kClamp'
arguments = ', '.join([v8_value, 'exceptionState', configuration])
elif base_idl_type == 'SerializedScriptValue':
arguments = ', '.join([
v8_value,
'SerializedScriptValue::SerializeOptions(SerializedScriptValue::kNotForStorage)',
'exceptionState'])
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.name == 'ArrayBuffer':
cpp_expression_format = (
'{v8_value}->Is{idl_type}() ? '
'V8{idl_type}::ToImpl(v8::Local<v8::{idl_type}>::Cast({v8_value})) : 0')
elif idl_type.is_array_buffer_view_or_typed_array:
this_cpp_type = idl_type.cpp_type_args(extended_attributes=extended_attributes)
if 'AllowShared' in extended_attributes:
cpp_expression_format = ('ToMaybeShared<%s>({isolate}, {v8_value}, exceptionState)' % this_cpp_type)
else:
cpp_expression_format = ('ToNotShared<%s>({isolate}, {v8_value}, exceptionState)' % this_cpp_type)
elif idl_type.is_union_type:
nullable = 'UnionTypeConversionMode::kNullable' if idl_type.includes_nullable_type \
else 'UnionTypeConversionMode::kNotNullable'
cpp_expression_format = 'V8{idl_type}::ToImpl({isolate}, {v8_value}, {variable_name}, %s, exceptionState)' % nullable
elif idl_type.use_output_parameter_for_result:
cpp_expression_format = 'V8{idl_type}::ToImpl({isolate}, {v8_value}, {variable_name}, exceptionState)'
elif idl_type.is_callback_function:
cpp_expression_format = (
'V8{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 and dictionary interfaces.
base_idl_type = native_value_traits_type_name(idl_type)
cpp_expression_format = (
'NativeValueTraits<{idl_type}>::NativeValue({isolate}, {arguments})')
else:
cpp_expression_format = (
'V8{idl_type}::ToImplWithTypeCheck({isolate}, {v8_value})')
return cpp_expression_format.format(arguments=arguments, idl_type=base_idl_type, v8_value=v8_value, variable_name=variable_name, isolate=isolate)