OLD | NEW |
1 # Copyright (C) 2013 Google Inc. All rights reserved. | 1 # Copyright (C) 2013 Google Inc. All rights reserved. |
2 # | 2 # |
3 # Redistribution and use in source and binary forms, with or without | 3 # Redistribution and use in source and binary forms, with or without |
4 # modification, are permitted provided that the following conditions are | 4 # modification, are permitted provided that the following conditions are |
5 # met: | 5 # met: |
6 # | 6 # |
7 # * Redistributions of source code must retain the above copyright | 7 # * Redistributions of source code must retain the above copyright |
8 # notice, this list of conditions and the following disclaimer. | 8 # notice, this list of conditions and the following disclaimer. |
9 # * Redistributions in binary form must reproduce the above | 9 # * Redistributions in binary form must reproduce the above |
10 # copyright notice, this list of conditions and the following disclaimer | 10 # copyright notice, this list of conditions and the following disclaimer |
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
185 return idl_type.implemented_as + '*' | 185 return idl_type.implemented_as + '*' |
186 if idl_type.is_interface_type: | 186 if idl_type.is_interface_type: |
187 implemented_as_class = idl_type.implemented_as | 187 implemented_as_class = idl_type.implemented_as |
188 if raw_type: | 188 if raw_type: |
189 return implemented_as_class + '*' | 189 return implemented_as_class + '*' |
190 new_type = 'Member' if used_in_cpp_sequence else 'RawPtr' | 190 new_type = 'Member' if used_in_cpp_sequence else 'RawPtr' |
191 ptr_type = cpp_ptr_type(('PassRefPtr' if used_as_rvalue_type else 'RefPt
r'), new_type, idl_type.gc_type) | 191 ptr_type = cpp_ptr_type(('PassRefPtr' if used_as_rvalue_type else 'RefPt
r'), new_type, idl_type.gc_type) |
192 return cpp_template_type(ptr_type, implemented_as_class) | 192 return cpp_template_type(ptr_type, implemented_as_class) |
193 if idl_type.is_dictionary: | 193 if idl_type.is_dictionary: |
194 return base_idl_type | 194 return base_idl_type |
| 195 if idl_type.is_union_type: |
| 196 return idl_type.name |
| 197 |
195 # Default, assume native type is a pointer with same type name as idl type | 198 # Default, assume native type is a pointer with same type name as idl type |
196 return base_idl_type + '*' | 199 return base_idl_type + '*' |
197 | 200 |
198 | 201 |
199 def cpp_type_initializer(idl_type): | 202 def cpp_type_initializer(idl_type): |
200 """Returns a string containing a C++ initialization statement for the | 203 """Returns a string containing a C++ initialization statement for the |
201 corresponding type. | 204 corresponding type. |
202 | 205 |
203 |idl_type| argument is of type IdlType. | 206 |idl_type| argument is of type IdlType. |
204 """ | 207 """ |
205 | 208 |
206 base_idl_type = idl_type.base_type | 209 base_idl_type = idl_type.base_type |
207 | 210 |
208 if idl_type.native_array_element_type: | 211 if idl_type.native_array_element_type: |
209 return '' | 212 return '' |
210 if idl_type.is_numeric_type: | 213 if idl_type.is_numeric_type: |
211 return ' = 0' | 214 return ' = 0' |
212 if base_idl_type == 'boolean': | 215 if base_idl_type == 'boolean': |
213 return ' = false' | 216 return ' = false' |
214 if (base_idl_type in NON_WRAPPER_TYPES or | 217 if (base_idl_type in NON_WRAPPER_TYPES or |
215 base_idl_type in CPP_SPECIAL_CONVERSION_RULES or | 218 base_idl_type in CPP_SPECIAL_CONVERSION_RULES or |
216 base_idl_type == 'any' or | 219 base_idl_type == 'any' or |
217 idl_type.is_string_type or | 220 idl_type.is_string_type or |
218 idl_type.is_enum): | 221 idl_type.is_enum): |
219 return '' | 222 return '' |
220 return ' = nullptr' | 223 return ' = nullptr' |
221 | 224 |
222 | 225 |
223 def cpp_type_union(idl_type, extended_attributes=None, raw_type=False): | |
224 # FIXME: Need to revisit the design of union support. | |
225 # http://crbug.com/240176 | |
226 return None | |
227 | |
228 | |
229 def cpp_type_initializer_union(idl_type): | |
230 return (member_type.cpp_type_initializer for member_type in idl_type.member_
types) | |
231 | |
232 | |
233 # Allow access as idl_type.cpp_type if no arguments | 226 # Allow access as idl_type.cpp_type if no arguments |
234 IdlTypeBase.cpp_type = property(cpp_type) | 227 IdlTypeBase.cpp_type = property(cpp_type) |
235 IdlTypeBase.cpp_type_initializer = property(cpp_type_initializer) | 228 IdlTypeBase.cpp_type_initializer = property(cpp_type_initializer) |
236 IdlTypeBase.cpp_type_args = cpp_type | 229 IdlTypeBase.cpp_type_args = cpp_type |
237 IdlUnionType.cpp_type = property(cpp_type_union) | 230 IdlUnionType.cpp_type_initializer = '' |
238 IdlUnionType.cpp_type_initializer = property(cpp_type_initializer_union) | |
239 IdlUnionType.cpp_type_args = cpp_type_union | |
240 | 231 |
241 | 232 |
242 IdlArrayOrSequenceType.native_array_element_type = property( | 233 IdlArrayOrSequenceType.native_array_element_type = property( |
243 lambda self: self.element_type) | 234 lambda self: self.element_type) |
244 | 235 |
245 | 236 |
246 def cpp_template_type(template, inner_type): | 237 def cpp_template_type(template, inner_type): |
247 """Returns C++ template specialized to type, with space added if needed.""" | 238 """Returns C++ template specialized to type, with space added if needed.""" |
248 if inner_type.endswith('>'): | 239 if inner_type.endswith('>'): |
249 format_string = '{template}<{inner_type} >' | 240 format_string = '{template}<{inner_type} >' |
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
477 } | 468 } |
478 | 469 |
479 | 470 |
480 def v8_conversion_needs_exception_state(idl_type): | 471 def v8_conversion_needs_exception_state(idl_type): |
481 return (idl_type.is_numeric_type or | 472 return (idl_type.is_numeric_type or |
482 idl_type.is_dictionary or | 473 idl_type.is_dictionary or |
483 idl_type.name in ('ByteString', 'USVString', 'SerializedScriptValue'
)) | 474 idl_type.name in ('ByteString', 'USVString', 'SerializedScriptValue'
)) |
484 | 475 |
485 IdlType.v8_conversion_needs_exception_state = property(v8_conversion_needs_excep
tion_state) | 476 IdlType.v8_conversion_needs_exception_state = property(v8_conversion_needs_excep
tion_state) |
486 IdlArrayOrSequenceType.v8_conversion_needs_exception_state = True | 477 IdlArrayOrSequenceType.v8_conversion_needs_exception_state = True |
| 478 IdlUnionType.v8_conversion_needs_exception_state = True |
487 | 479 |
488 | 480 |
489 TRIVIAL_CONVERSIONS = frozenset([ | 481 TRIVIAL_CONVERSIONS = frozenset([ |
490 'any', | 482 'any', |
491 'boolean', | 483 'boolean', |
492 'Date', | 484 'Date', |
493 'Dictionary', | 485 'Dictionary', |
494 'NodeFilter', | 486 'NodeFilter', |
495 'XPathNSResolver', | 487 'XPathNSResolver', |
496 'Promise' | 488 'Promise' |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
561 expression_format = '(to{ref_ptr_type}NativeArray<{native_array_element_
type}, V8{native_array_element_type}>({v8_value}, {index}, {isolate}, exceptionS
tate))' | 553 expression_format = '(to{ref_ptr_type}NativeArray<{native_array_element_
type}, V8{native_array_element_type}>({v8_value}, {index}, {isolate}, exceptionS
tate))' |
562 add_includes_for_type(native_array_element_type) | 554 add_includes_for_type(native_array_element_type) |
563 else: | 555 else: |
564 ref_ptr_type = None | 556 ref_ptr_type = None |
565 this_cpp_type = native_array_element_type.cpp_type | 557 this_cpp_type = native_array_element_type.cpp_type |
566 expression_format = 'toImplArray<{cpp_type}>({v8_value}, {index}, {isola
te}, exceptionState)' | 558 expression_format = 'toImplArray<{cpp_type}>({v8_value}, {index}, {isola
te}, exceptionState)' |
567 expression = expression_format.format(native_array_element_type=native_array
_element_type.name, cpp_type=this_cpp_type, index=index, ref_ptr_type=ref_ptr_ty
pe, v8_value=v8_value, isolate=isolate) | 559 expression = expression_format.format(native_array_element_type=native_array
_element_type.name, cpp_type=this_cpp_type, index=index, ref_ptr_type=ref_ptr_ty
pe, v8_value=v8_value, isolate=isolate) |
568 return expression | 560 return expression |
569 | 561 |
570 | 562 |
571 def v8_value_to_local_cpp_value(idl_type, extended_attributes, v8_value, variabl
e_name=None, needs_type_check=True, index=None, declare_variable=True, isolate='
info.GetIsolate()', used_in_private_script=False, return_promise=False): | 563 # FIXME: this function should be refactored, as this takes too many flags. |
| 564 def v8_value_to_local_cpp_value(idl_type, extended_attributes, v8_value, variabl
e_name=None, needs_type_check=True, index=None, declare_variable=True, isolate='
info.GetIsolate()', used_in_private_script=False, return_promise=False, needs_ex
ception_state_for_string=False): |
572 """Returns an expression that converts a V8 value to a C++ value and stores
it as a local value.""" | 565 """Returns an expression that converts a V8 value to a C++ value and stores
it as a local value.""" |
573 | 566 |
574 # FIXME: Support union type. | 567 # FIXME: Support union type. |
575 if idl_type.is_union_type: | 568 if idl_type.is_union_type: |
576 return '/* no V8 -> C++ conversion for IDL union type: %s */' % idl_type
.name | 569 return '/* no V8 -> C++ conversion for IDL union type: %s */' % idl_type
.name |
577 | 570 |
578 this_cpp_type = idl_type.cpp_type_args(extended_attributes=extended_attribut
es, raw_type=True) | 571 this_cpp_type = idl_type.cpp_type_args(extended_attributes=extended_attribut
es, raw_type=True) |
579 idl_type = idl_type.preprocessed_type | 572 idl_type = idl_type.preprocessed_type |
580 | 573 |
581 if idl_type.base_type in ('void', 'object', 'EventHandler', 'EventListener')
: | 574 if idl_type.base_type in ('void', 'object', 'EventHandler', 'EventListener')
: |
582 return '/* no V8 -> C++ conversion for IDL type: %s */' % idl_type.name | 575 return '/* no V8 -> C++ conversion for IDL type: %s */' % idl_type.name |
583 | 576 |
584 cpp_value = v8_value_to_cpp_value(idl_type, extended_attributes, v8_value, v
ariable_name, needs_type_check, index, isolate) | 577 cpp_value = v8_value_to_cpp_value(idl_type, extended_attributes, v8_value, v
ariable_name, needs_type_check, index, isolate) |
585 | 578 |
586 if idl_type.is_dictionary: | 579 if idl_type.is_dictionary: |
587 return 'TONATIVE_VOID_EXCEPTIONSTATE_ARGINTERNAL(%s, exceptionState)' %
cpp_value | 580 return 'TONATIVE_VOID_EXCEPTIONSTATE_ARGINTERNAL(%s, exceptionState)' %
cpp_value |
588 | 581 |
589 if idl_type.is_string_type or idl_type.v8_conversion_needs_exception_state: | 582 if idl_type.is_string_type or idl_type.v8_conversion_needs_exception_state: |
590 # Types that need error handling and use one of a group of (C++) macros | 583 # Types that need error handling and use one of a group of (C++) macros |
591 # to take care of this. | 584 # to take care of this. |
592 | 585 |
593 args = [variable_name, cpp_value] | 586 args = [variable_name, cpp_value] |
594 | 587 |
595 if idl_type.v8_conversion_needs_exception_state: | 588 if idl_type.v8_conversion_needs_exception_state: |
596 macro = 'TONATIVE_DEFAULT_EXCEPTIONSTATE' if used_in_private_script
else 'TONATIVE_VOID_EXCEPTIONSTATE' | 589 macro = 'TONATIVE_DEFAULT_EXCEPTIONSTATE' if used_in_private_script
else 'TONATIVE_VOID_EXCEPTIONSTATE' |
597 elif return_promise: | 590 elif return_promise or needs_exception_state_for_string: |
598 macro = 'TOSTRING_VOID_EXCEPTIONSTATE' | 591 macro = 'TOSTRING_VOID_EXCEPTIONSTATE' |
599 else: | 592 else: |
600 macro = 'TOSTRING_DEFAULT' if used_in_private_script else 'TOSTRING_
VOID' | 593 macro = 'TOSTRING_DEFAULT' if used_in_private_script else 'TOSTRING_
VOID' |
601 | 594 |
602 if macro.endswith('_EXCEPTIONSTATE'): | 595 if macro.endswith('_EXCEPTIONSTATE'): |
603 args.append('exceptionState') | 596 args.append('exceptionState') |
604 | 597 |
605 if used_in_private_script: | 598 if used_in_private_script: |
606 args.append('false') | 599 args.append('false') |
607 | 600 |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
677 | 670 |
678 def v8_conversion_type(idl_type, extended_attributes): | 671 def v8_conversion_type(idl_type, extended_attributes): |
679 """Returns V8 conversion type, adding any additional includes. | 672 """Returns V8 conversion type, adding any additional includes. |
680 | 673 |
681 The V8 conversion type is used to select the C++ -> V8 conversion function | 674 The V8 conversion type is used to select the C++ -> V8 conversion function |
682 or v8SetReturnValue* function; it can be an idl_type, a cpp_type, or a | 675 or v8SetReturnValue* function; it can be an idl_type, a cpp_type, or a |
683 separate name for the type of conversion (e.g., 'DOMWrapper'). | 676 separate name for the type of conversion (e.g., 'DOMWrapper'). |
684 """ | 677 """ |
685 extended_attributes = extended_attributes or {} | 678 extended_attributes = extended_attributes or {} |
686 | 679 |
687 # FIXME: Support union type. | 680 if idl_type.is_dictionary or idl_type.is_union_type: |
688 if idl_type.is_union_type: | 681 return 'DictionaryOrUnion' |
689 return '' | |
690 | |
691 if idl_type.is_dictionary: | |
692 return 'IDLDictionary' | |
693 | 682 |
694 # Array or sequence types | 683 # Array or sequence types |
695 native_array_element_type = idl_type.native_array_element_type | 684 native_array_element_type = idl_type.native_array_element_type |
696 if native_array_element_type: | 685 if native_array_element_type: |
697 if native_array_element_type.is_interface_type: | 686 if native_array_element_type.is_interface_type: |
698 add_includes_for_type(native_array_element_type) | 687 add_includes_for_type(native_array_element_type) |
699 return 'array' | 688 return 'array' |
700 | 689 |
701 # Simple types | 690 # Simple types |
702 base_idl_type = idl_type.base_type | 691 base_idl_type = idl_type.base_type |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
750 # and then use general v8SetReturnValue. | 739 # and then use general v8SetReturnValue. |
751 'array': 'v8SetReturnValue(info, {cpp_value})', | 740 'array': 'v8SetReturnValue(info, {cpp_value})', |
752 'Date': 'v8SetReturnValue(info, {cpp_value})', | 741 'Date': 'v8SetReturnValue(info, {cpp_value})', |
753 'EventHandler': 'v8SetReturnValue(info, {cpp_value})', | 742 'EventHandler': 'v8SetReturnValue(info, {cpp_value})', |
754 'ScriptValue': 'v8SetReturnValue(info, {cpp_value})', | 743 'ScriptValue': 'v8SetReturnValue(info, {cpp_value})', |
755 'SerializedScriptValue': 'v8SetReturnValue(info, {cpp_value})', | 744 'SerializedScriptValue': 'v8SetReturnValue(info, {cpp_value})', |
756 # DOMWrapper | 745 # DOMWrapper |
757 'DOMWrapperForMainWorld': 'v8SetReturnValueForMainWorld(info, WTF::getPtr({c
pp_value}))', | 746 'DOMWrapperForMainWorld': 'v8SetReturnValueForMainWorld(info, WTF::getPtr({c
pp_value}))', |
758 'DOMWrapperFast': 'v8SetReturnValueFast(info, WTF::getPtr({cpp_value}), {scr
ipt_wrappable})', | 747 'DOMWrapperFast': 'v8SetReturnValueFast(info, WTF::getPtr({cpp_value}), {scr
ipt_wrappable})', |
759 'DOMWrapperDefault': 'v8SetReturnValue(info, {cpp_value})', | 748 'DOMWrapperDefault': 'v8SetReturnValue(info, {cpp_value})', |
760 'IDLDictionary': 'v8SetReturnValue(info, result)', | 749 # Union types or dictionaries |
| 750 'DictionaryOrUnion': 'v8SetReturnValue(info, result)', |
761 } | 751 } |
762 | 752 |
763 | 753 |
764 def v8_set_return_value(idl_type, cpp_value, extended_attributes=None, script_wr
appable='', release=False, for_main_world=False): | 754 def v8_set_return_value(idl_type, cpp_value, extended_attributes=None, script_wr
appable='', release=False, for_main_world=False): |
765 """Returns a statement that converts a C++ value to a V8 value and sets it a
s a return value. | 755 """Returns a statement that converts a C++ value to a V8 value and sets it a
s a return value. |
766 | 756 |
767 """ | 757 """ |
768 def dom_wrapper_conversion_type(): | 758 def dom_wrapper_conversion_type(): |
769 if not script_wrappable: | 759 if not script_wrappable: |
770 return 'DOMWrapperDefault' | 760 return 'DOMWrapperDefault' |
(...skipping 11 matching lines...) Expand all Loading... |
782 this_v8_conversion_type = dom_wrapper_conversion_type() | 772 this_v8_conversion_type = dom_wrapper_conversion_type() |
783 | 773 |
784 format_string = V8_SET_RETURN_VALUE[this_v8_conversion_type] | 774 format_string = V8_SET_RETURN_VALUE[this_v8_conversion_type] |
785 # FIXME: oilpan: Remove .release() once we remove all RefPtrs from generated
code. | 775 # FIXME: oilpan: Remove .release() once we remove all RefPtrs from generated
code. |
786 if release: | 776 if release: |
787 cpp_value = '%s.release()' % cpp_value | 777 cpp_value = '%s.release()' % cpp_value |
788 statement = format_string.format(cpp_value=cpp_value, script_wrappable=scrip
t_wrappable) | 778 statement = format_string.format(cpp_value=cpp_value, script_wrappable=scrip
t_wrappable) |
789 return statement | 779 return statement |
790 | 780 |
791 | 781 |
792 def v8_set_return_value_union(idl_type, cpp_value, extended_attributes=None, scr
ipt_wrappable='', release=False, for_main_world=False): | |
793 # FIXME: Need to revisit the design of union support. | |
794 # http://crbug.com/240176 | |
795 return None | |
796 | |
797 | |
798 IdlTypeBase.v8_set_return_value = v8_set_return_value | 782 IdlTypeBase.v8_set_return_value = v8_set_return_value |
799 IdlUnionType.v8_set_return_value = v8_set_return_value_union | |
800 | 783 |
801 IdlType.release = property(lambda self: self.is_interface_type) | 784 IdlType.release = property(lambda self: self.is_interface_type) |
802 IdlUnionType.release = property( | 785 IdlUnionType.release = False |
803 lambda self: [member_type.is_interface_type | |
804 for member_type in self.member_types]) | |
805 | 786 |
806 | 787 |
807 CPP_VALUE_TO_V8_VALUE = { | 788 CPP_VALUE_TO_V8_VALUE = { |
808 # Built-in types | 789 # Built-in types |
809 'Date': 'v8DateOrNaN({cpp_value}, {isolate})', | 790 'Date': 'v8DateOrNaN({cpp_value}, {isolate})', |
810 'DOMString': 'v8String({isolate}, {cpp_value})', | 791 'DOMString': 'v8String({isolate}, {cpp_value})', |
811 'ByteString': 'v8String({isolate}, {cpp_value})', | 792 'ByteString': 'v8String({isolate}, {cpp_value})', |
812 'USVString': 'v8String({isolate}, {cpp_value})', | 793 'USVString': 'v8String({isolate}, {cpp_value})', |
813 'boolean': 'v8Boolean({cpp_value}, {isolate})', | 794 'boolean': 'v8Boolean({cpp_value}, {isolate})', |
814 'int': 'v8::Integer::New({isolate}, {cpp_value})', | 795 'int': 'v8::Integer::New({isolate}, {cpp_value})', |
815 'unsigned': 'v8::Integer::NewFromUnsigned({isolate}, {cpp_value})', | 796 'unsigned': 'v8::Integer::NewFromUnsigned({isolate}, {cpp_value})', |
816 'float': 'v8::Number::New({isolate}, {cpp_value})', | 797 'float': 'v8::Number::New({isolate}, {cpp_value})', |
817 'unrestricted float': 'v8::Number::New({isolate}, {cpp_value})', | 798 'unrestricted float': 'v8::Number::New({isolate}, {cpp_value})', |
818 'double': 'v8::Number::New({isolate}, {cpp_value})', | 799 'double': 'v8::Number::New({isolate}, {cpp_value})', |
819 'unrestricted double': 'v8::Number::New({isolate}, {cpp_value})', | 800 'unrestricted double': 'v8::Number::New({isolate}, {cpp_value})', |
820 'void': 'v8Undefined()', | 801 'void': 'v8Undefined()', |
821 # [TreatReturnedNullStringAs] | 802 # [TreatReturnedNullStringAs] |
822 'StringOrNull': '{cpp_value}.isNull() ? v8::Handle<v8::Value>(v8::Null({isol
ate})) : v8String({isolate}, {cpp_value})', | 803 'StringOrNull': '{cpp_value}.isNull() ? v8::Handle<v8::Value>(v8::Null({isol
ate})) : v8String({isolate}, {cpp_value})', |
823 'StringOrUndefined': '{cpp_value}.isNull() ? v8Undefined() : v8String({isola
te}, {cpp_value})', | 804 'StringOrUndefined': '{cpp_value}.isNull() ? v8Undefined() : v8String({isola
te}, {cpp_value})', |
824 # Special cases | 805 # Special cases |
825 'EventHandler': '{cpp_value} ? v8::Handle<v8::Value>(V8AbstractEventListener
::cast({cpp_value})->getListenerObject(impl->executionContext())) : v8::Handle<v
8::Value>(v8::Null({isolate}))', | 806 'EventHandler': '{cpp_value} ? v8::Handle<v8::Value>(V8AbstractEventListener
::cast({cpp_value})->getListenerObject(impl->executionContext())) : v8::Handle<v
8::Value>(v8::Null({isolate}))', |
826 'ScriptValue': '{cpp_value}.v8Value()', | 807 'ScriptValue': '{cpp_value}.v8Value()', |
827 'SerializedScriptValue': '{cpp_value} ? {cpp_value}->deserialize() : v8::Han
dle<v8::Value>(v8::Null({isolate}))', | 808 'SerializedScriptValue': '{cpp_value} ? {cpp_value}->deserialize() : v8::Han
dle<v8::Value>(v8::Null({isolate}))', |
828 # General | 809 # General |
829 'array': 'v8Array({cpp_value}, {creation_context}, {isolate})', | 810 'array': 'v8Array({cpp_value}, {creation_context}, {isolate})', |
830 'DOMWrapper': 'toV8({cpp_value}, {creation_context}, {isolate})', | 811 'DOMWrapper': 'toV8({cpp_value}, {creation_context}, {isolate})', |
831 'IDLDictionary': 'toV8({cpp_value}, {creation_context}, {isolate})', | 812 # Union types or dictionaries |
| 813 'DictionaryOrUnion': 'toV8({cpp_value}, {creation_context}, {isolate})', |
832 } | 814 } |
833 | 815 |
834 | 816 |
835 def cpp_value_to_v8_value(idl_type, cpp_value, isolate='info.GetIsolate()', crea
tion_context='info.Holder()', extended_attributes=None): | 817 def cpp_value_to_v8_value(idl_type, cpp_value, isolate='info.GetIsolate()', crea
tion_context='info.Holder()', extended_attributes=None): |
836 """Returns an expression that converts a C++ value to a V8 value.""" | 818 """Returns an expression that converts a C++ value to a V8 value.""" |
837 # the isolate parameter is needed for callback interfaces | 819 # the isolate parameter is needed for callback interfaces |
838 idl_type, cpp_value = preprocess_idl_type_and_value(idl_type, cpp_value, ext
ended_attributes) | 820 idl_type, cpp_value = preprocess_idl_type_and_value(idl_type, cpp_value, ext
ended_attributes) |
839 this_v8_conversion_type = idl_type.v8_conversion_type(extended_attributes) | 821 this_v8_conversion_type = idl_type.v8_conversion_type(extended_attributes) |
840 format_string = CPP_VALUE_TO_V8_VALUE[this_v8_conversion_type] | 822 format_string = CPP_VALUE_TO_V8_VALUE[this_v8_conversion_type] |
841 statement = format_string.format(cpp_value=cpp_value, isolate=isolate, creat
ion_context=creation_context) | 823 statement = format_string.format(cpp_value=cpp_value, isolate=isolate, creat
ion_context=creation_context) |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
879 | 861 |
880 | 862 |
881 def is_explicit_nullable(idl_type): | 863 def is_explicit_nullable(idl_type): |
882 # Nullable type that isn't implicit nullable (see above.) For such types, | 864 # Nullable type that isn't implicit nullable (see above.) For such types, |
883 # we use Nullable<T> or similar explicit ways to represent a null value. | 865 # we use Nullable<T> or similar explicit ways to represent a null value. |
884 return idl_type.is_nullable and not idl_type.is_implicit_nullable | 866 return idl_type.is_nullable and not idl_type.is_implicit_nullable |
885 | 867 |
886 IdlTypeBase.is_implicit_nullable = property(is_implicit_nullable) | 868 IdlTypeBase.is_implicit_nullable = property(is_implicit_nullable) |
887 IdlUnionType.is_implicit_nullable = False | 869 IdlUnionType.is_implicit_nullable = False |
888 IdlTypeBase.is_explicit_nullable = property(is_explicit_nullable) | 870 IdlTypeBase.is_explicit_nullable = property(is_explicit_nullable) |
OLD | NEW |