OLD | NEW |
1 {% from 'utilities.cpp' import declare_enum_validation_variable %} | 1 {% from 'utilities.cpp' import declare_enum_validation_variable %} |
2 {% include 'copyright_block.txt' %} | 2 {% include 'copyright_block.txt' %} |
3 #include "{{this_include_header_name}}.h" | 3 #include "{{this_include_header_name}}.h" |
4 | 4 |
5 {% from 'utilities.cpp' import v8_value_to_local_cpp_value %} | 5 {% from 'utilities.cpp' import v8_value_to_local_cpp_value %} |
6 {% macro assign_and_return_if_hasinstance(member) %} | 6 {% macro assign_and_return_if_hasinstance(member) %} |
7 if (V8{{member.type_name}}::hasInstance(v8Value, isolate)) { | 7 if (V8{{member.type_name}}::hasInstance(v8Value, isolate)) { |
8 {{member.cpp_local_type}} cppValue = V8{{member.type_name}}::toImpl(v8::Loca
l<v8::Object>::Cast(v8Value)); | 8 {{member.cpp_local_type}} cppValue = V8{{member.type_name}}::toImpl(v8::Loca
l<v8::Object>::Cast(v8Value)); |
9 impl.set{{member.type_name}}(cppValue); | 9 impl.set{{member.type_name}}(cppValue); |
10 return; | 10 return; |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
86 {# 9., 10. ArrayBufferView #} | 86 {# 9., 10. ArrayBufferView #} |
87 {# FIXME: Individual typed arrays (e.g. Uint8Array) aren't supported yet. #} | 87 {# FIXME: Individual typed arrays (e.g. Uint8Array) aren't supported yet. #} |
88 {% if array_buffer_view_type %} | 88 {% if array_buffer_view_type %} |
89 {{assign_and_return_if_hasinstance(array_buffer_view_type) | indent}} | 89 {{assign_and_return_if_hasinstance(array_buffer_view_type) | indent}} |
90 | 90 |
91 {% endif %} | 91 {% endif %} |
92 {% if dictionary_type %} | 92 {% if dictionary_type %} |
93 {# 12. Dictionaries #} | 93 {# 12. Dictionaries #} |
94 {# FIXME: This should also check "object but not Date or RegExp". Add checks | 94 {# FIXME: This should also check "object but not Date or RegExp". Add checks |
95 when we implement conversions for Date and RegExp. #} | 95 when we implement conversions for Date and RegExp. #} |
96 if (isUndefinedOrNull(v8Value) || v8Value->IsObject()) { | 96 {# TODO(bashi): The spec doesn't say we should check !IsArray() but otherwis
e |
| 97 we can't distinguish a sequence<T> and a dictionary. |
| 98 https://github.com/heycam/webidl/issues/123 #} |
| 99 if (isUndefinedOrNull(v8Value) || (v8Value->IsObject() && !v8Value->IsArray(
))) { |
97 {{v8_value_to_local_cpp_value(dictionary_type) | indent(8)}} | 100 {{v8_value_to_local_cpp_value(dictionary_type) | indent(8)}} |
98 impl.set{{dictionary_type.type_name}}(cppValue); | 101 impl.set{{dictionary_type.type_name}}(cppValue); |
99 return; | 102 return; |
100 } | 103 } |
101 | 104 |
102 {% endif %} | 105 {% endif %} |
103 {% if array_or_sequence_type %} | 106 {% if array_or_sequence_type %} |
104 {# 13.1, 13.2. Arrays and Sequences #} | 107 {# 13.1, 13.2. Arrays and Sequences #} |
105 {# FIXME: This should also check "object but not Date or RegExp". Add checks | 108 {# FIXME: This should also check "object but not Date or RegExp". Add checks |
106 when we implement conversions for Date and RegExp. #} | 109 when we implement conversions for Date and RegExp. #} |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
192 } | 195 } |
193 | 196 |
194 {{cpp_class}} NativeValueTraits<{{cpp_class}}>::nativeValue(v8::Isolate* isolate
, v8::Local<v8::Value> value, ExceptionState& exceptionState) | 197 {{cpp_class}} NativeValueTraits<{{cpp_class}}>::nativeValue(v8::Isolate* isolate
, v8::Local<v8::Value> value, ExceptionState& exceptionState) |
195 { | 198 { |
196 {{cpp_class}} impl; | 199 {{cpp_class}} impl; |
197 {{v8_class}}::toImpl(isolate, value, impl, UnionTypeConversionMode::NotNulla
ble, exceptionState); | 200 {{v8_class}}::toImpl(isolate, value, impl, UnionTypeConversionMode::NotNulla
ble, exceptionState); |
198 return impl; | 201 return impl; |
199 } | 202 } |
200 | 203 |
201 } // namespace blink | 204 } // namespace blink |
OLD | NEW |