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 348 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
359 'core/dom/NodeList.h', | 359 'core/dom/NodeList.h', |
360 'core/dom/StaticNodeList.h', | 360 'core/dom/StaticNodeList.h', |
361 'core/html/LabelsNodeList.h']), | 361 'core/html/LabelsNodeList.h']), |
362 'Promise': set(['bindings/core/v8/ScriptPromise.h']), | 362 'Promise': set(['bindings/core/v8/ScriptPromise.h']), |
363 'SerializedScriptValue': set(['bindings/core/v8/SerializedScriptValue.h', | 363 'SerializedScriptValue': set(['bindings/core/v8/SerializedScriptValue.h', |
364 'bindings/core/v8/SerializedScriptValueFactory
.h']), | 364 'bindings/core/v8/SerializedScriptValueFactory
.h']), |
365 'ScriptValue': set(['bindings/core/v8/ScriptValue.h']), | 365 'ScriptValue': set(['bindings/core/v8/ScriptValue.h']), |
366 } | 366 } |
367 | 367 |
368 | 368 |
369 def includes_for_type(idl_type): | 369 def includes_for_type(idl_type, extended_attributes=None): |
370 idl_type = idl_type.preprocessed_type | 370 idl_type = idl_type.preprocessed_type |
| 371 extended_attributes = extended_attributes or {} |
371 | 372 |
372 # Simple types | 373 # Simple types |
373 base_idl_type = idl_type.base_type | 374 base_idl_type = idl_type.base_type |
374 if base_idl_type in INCLUDES_FOR_TYPE: | 375 if base_idl_type in INCLUDES_FOR_TYPE: |
375 return INCLUDES_FOR_TYPE[base_idl_type] | 376 return INCLUDES_FOR_TYPE[base_idl_type] |
376 if idl_type.is_basic_type: | 377 if idl_type.is_basic_type: |
377 return set() | 378 return set() |
378 if base_idl_type.endswith('ConstructorConstructor'): | 379 if base_idl_type.endswith('ConstructorConstructor'): |
379 # FIXME: rename to NamedConstructor | 380 # FIXME: rename to NamedConstructor |
380 # FIXME: replace with a [NamedConstructorAttribute] extended attribute | 381 # FIXME: replace with a [NamedConstructorAttribute] extended attribute |
381 # Ending with 'ConstructorConstructor' indicates a named constructor, | 382 # Ending with 'ConstructorConstructor' indicates a named constructor, |
382 # and these do not have header files, as they are part of the generated | 383 # and these do not have header files, as they are part of the generated |
383 # bindings for the interface | 384 # bindings for the interface |
384 return set() | 385 return set() |
385 if base_idl_type.endswith('Constructor'): | 386 if base_idl_type.endswith('Constructor'): |
386 # FIXME: replace with a [ConstructorAttribute] extended attribute | 387 # FIXME: replace with a [ConstructorAttribute] extended attribute |
387 base_idl_type = idl_type.constructor_type_name | 388 base_idl_type = idl_type.constructor_type_name |
388 if base_idl_type not in component_dir: | 389 if base_idl_type not in component_dir: |
389 return set() | 390 return set() |
390 return set(['bindings/%s/v8/V8%s.h' % (component_dir[base_idl_type], | 391 return set(['bindings/%s/v8/V8%s.h' % (component_dir[base_idl_type], |
391 base_idl_type)]) | 392 base_idl_type)]) |
392 | 393 |
393 IdlType.includes_for_type = property(includes_for_type) | 394 IdlType.includes_for_type = includes_for_type |
394 IdlUnionType.includes_for_type = property( | |
395 lambda self: set.union(*[member_type.includes_for_type | |
396 for member_type in self.member_types])) | |
397 IdlArrayOrSequenceType.includes_for_type = property( | |
398 lambda self: self.element_type.includes_for_type) | |
399 | 395 |
400 | 396 |
401 def add_includes_for_type(idl_type): | 397 def includes_for_union_type(idl_type, extended_attributes=None): |
402 includes.update(idl_type.includes_for_type) | 398 return set.union(*[member_type.includes_for_type(extended_attributes) |
| 399 for member_type in idl_type.member_types]) |
| 400 |
| 401 IdlUnionType.includes_for_type = includes_for_union_type |
| 402 |
| 403 |
| 404 def includes_for_array_or_sequence_type(idl_type, extended_attributes=None): |
| 405 return idl_type.element_type.includes_for_type(extended_attributes) |
| 406 |
| 407 IdlArrayOrSequenceType.includes_for_type = includes_for_array_or_sequence_type |
| 408 |
| 409 |
| 410 def add_includes_for_type(idl_type, extended_attributes=None): |
| 411 includes.update(idl_type.includes_for_type(extended_attributes)) |
403 | 412 |
404 IdlTypeBase.add_includes_for_type = add_includes_for_type | 413 IdlTypeBase.add_includes_for_type = add_includes_for_type |
405 | 414 |
406 | 415 |
407 def includes_for_interface(interface_name): | 416 def includes_for_interface(interface_name): |
408 return IdlType(interface_name).includes_for_type | 417 return IdlType(interface_name).includes_for_type() |
409 | 418 |
410 | 419 |
411 def add_includes_for_interface(interface_name): | 420 def add_includes_for_interface(interface_name): |
412 includes.update(includes_for_interface(interface_name)) | 421 includes.update(includes_for_interface(interface_name)) |
413 | 422 |
414 | 423 |
415 def impl_should_use_nullable_container(idl_type): | 424 def impl_should_use_nullable_container(idl_type): |
416 return not(idl_type.cpp_type_has_null_value) | 425 return not(idl_type.cpp_type_has_null_value) |
417 | 426 |
418 IdlTypeBase.impl_should_use_nullable_container = property( | 427 IdlTypeBase.impl_should_use_nullable_container = property( |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
532 if idl_type.name == 'void': | 541 if idl_type.name == 'void': |
533 return '' | 542 return '' |
534 | 543 |
535 # Array or sequence types | 544 # Array or sequence types |
536 native_array_element_type = idl_type.native_array_element_type | 545 native_array_element_type = idl_type.native_array_element_type |
537 if native_array_element_type: | 546 if native_array_element_type: |
538 return v8_value_to_cpp_value_array_or_sequence(native_array_element_type
, v8_value, index, isolate) | 547 return v8_value_to_cpp_value_array_or_sequence(native_array_element_type
, v8_value, index, isolate) |
539 | 548 |
540 # Simple types | 549 # Simple types |
541 idl_type = idl_type.preprocessed_type | 550 idl_type = idl_type.preprocessed_type |
542 add_includes_for_type(idl_type) | |
543 base_idl_type = idl_type.as_union_type.name if idl_type.is_union_type else i
dl_type.base_type | 551 base_idl_type = idl_type.as_union_type.name if idl_type.is_union_type else i
dl_type.base_type |
544 | 552 |
545 if idl_type.is_integer_type: | 553 if idl_type.is_integer_type: |
546 configuration = 'NormalConversion' | 554 configuration = 'NormalConversion' |
547 if 'EnforceRange' in extended_attributes: | 555 if 'EnforceRange' in extended_attributes: |
548 configuration = 'EnforceRange' | 556 configuration = 'EnforceRange' |
549 elif 'Clamp' in extended_attributes: | 557 elif 'Clamp' in extended_attributes: |
550 configuration = 'Clamp' | 558 configuration = 'Clamp' |
551 arguments = ', '.join([v8_value, configuration, 'exceptionState']) | 559 arguments = ', '.join([v8_value, configuration, 'exceptionState']) |
552 elif idl_type.v8_conversion_needs_exception_state: | 560 elif idl_type.v8_conversion_needs_exception_state: |
(...skipping 22 matching lines...) Expand all Loading... |
575 # and is used to provide a human-readable exception message | 583 # and is used to provide a human-readable exception message |
576 if index is None: | 584 if index is None: |
577 index = 0 # special case, meaning "setter" | 585 index = 0 # special case, meaning "setter" |
578 else: | 586 else: |
579 index += 1 # human-readable index | 587 index += 1 # human-readable index |
580 if (native_array_element_type.is_interface_type and | 588 if (native_array_element_type.is_interface_type and |
581 native_array_element_type.name != 'Dictionary'): | 589 native_array_element_type.name != 'Dictionary'): |
582 this_cpp_type = None | 590 this_cpp_type = None |
583 ref_ptr_type = cpp_ptr_type('RefPtr', 'Member', native_array_element_typ
e.gc_type) | 591 ref_ptr_type = cpp_ptr_type('RefPtr', 'Member', native_array_element_typ
e.gc_type) |
584 expression_format = '(to{ref_ptr_type}NativeArray<{native_array_element_
type}, V8{native_array_element_type}>({v8_value}, {index}, {isolate}, exceptionS
tate))' | 592 expression_format = '(to{ref_ptr_type}NativeArray<{native_array_element_
type}, V8{native_array_element_type}>({v8_value}, {index}, {isolate}, exceptionS
tate))' |
585 add_includes_for_type(native_array_element_type) | |
586 else: | 593 else: |
587 ref_ptr_type = None | 594 ref_ptr_type = None |
588 this_cpp_type = native_array_element_type.cpp_type | 595 this_cpp_type = native_array_element_type.cpp_type |
589 expression_format = 'toImplArray<{cpp_type}>({v8_value}, {index}, {isola
te}, exceptionState)' | 596 expression_format = 'toImplArray<{cpp_type}>({v8_value}, {index}, {isola
te}, exceptionState)' |
590 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) | 597 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) |
591 return expression | 598 return expression |
592 | 599 |
593 | 600 |
594 # FIXME: this function should be refactored, as this takes too many flags. | 601 # FIXME: this function should be refactored, as this takes too many flags. |
595 def v8_value_to_local_cpp_value(idl_type, extended_attributes, v8_value, variabl
e_name, index=None, declare_variable=True, isolate='info.GetIsolate()', bailout_
return_value=None, use_exception_state=False, restricted_float=False): | 602 def v8_value_to_local_cpp_value(idl_type, extended_attributes, v8_value, variabl
e_name, index=None, declare_variable=True, isolate='info.GetIsolate()', bailout_
return_value=None, use_exception_state=False, restricted_float=False): |
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
722 # non-nullable dictionaries or unions. | 729 # non-nullable dictionaries or unions. |
723 if idl_type.is_dictionary and idl_type.is_nullable: | 730 if idl_type.is_dictionary and idl_type.is_nullable: |
724 return 'NullableDictionary' | 731 return 'NullableDictionary' |
725 | 732 |
726 if idl_type.is_dictionary or idl_type.is_union_type: | 733 if idl_type.is_dictionary or idl_type.is_union_type: |
727 return 'DictionaryOrUnion' | 734 return 'DictionaryOrUnion' |
728 | 735 |
729 # Array or sequence types | 736 # Array or sequence types |
730 native_array_element_type = idl_type.native_array_element_type | 737 native_array_element_type = idl_type.native_array_element_type |
731 if native_array_element_type: | 738 if native_array_element_type: |
732 if native_array_element_type.is_interface_type: | |
733 add_includes_for_type(native_array_element_type) | |
734 return 'array' | 739 return 'array' |
735 | 740 |
736 # Simple types | 741 # Simple types |
737 base_idl_type = idl_type.base_type | 742 base_idl_type = idl_type.base_type |
738 # Basic types, without additional includes | 743 # Basic types, without additional includes |
739 if base_idl_type in CPP_INT_TYPES: | 744 if base_idl_type in CPP_INT_TYPES: |
740 return 'int' | 745 return 'int' |
741 if base_idl_type in CPP_UNSIGNED_TYPES: | 746 if base_idl_type in CPP_UNSIGNED_TYPES: |
742 return 'unsigned' | 747 return 'unsigned' |
743 if idl_type.is_string_type: | 748 if idl_type.is_string_type: |
744 if idl_type.is_nullable: | 749 if idl_type.is_nullable: |
745 return 'StringOrNull' | 750 return 'StringOrNull' |
746 if 'TreatReturnedNullStringAs' not in extended_attributes: | 751 if 'TreatReturnedNullStringAs' not in extended_attributes: |
747 return base_idl_type | 752 return base_idl_type |
748 treat_returned_null_string_as = extended_attributes['TreatReturnedNullSt
ringAs'] | 753 treat_returned_null_string_as = extended_attributes['TreatReturnedNullSt
ringAs'] |
749 if treat_returned_null_string_as == 'Null': | 754 if treat_returned_null_string_as == 'Null': |
750 return 'StringOrNull' | 755 return 'StringOrNull' |
751 if treat_returned_null_string_as == 'Undefined': | 756 if treat_returned_null_string_as == 'Undefined': |
752 return 'StringOrUndefined' | 757 return 'StringOrUndefined' |
753 raise 'Unrecognized TreatReturnedNullStringAs value: "%s"' % treat_retur
ned_null_string_as | 758 raise 'Unrecognized TreatReturnedNullStringAs value: "%s"' % treat_retur
ned_null_string_as |
754 if idl_type.is_basic_type or base_idl_type == 'ScriptValue': | 759 if idl_type.is_basic_type or base_idl_type == 'ScriptValue': |
755 return base_idl_type | 760 return base_idl_type |
756 # Generic dictionary type | 761 # Generic dictionary type |
757 if base_idl_type == 'Dictionary': | 762 if base_idl_type == 'Dictionary': |
758 return 'Dictionary' | 763 return 'Dictionary' |
759 | 764 |
760 # Data type with potential additional includes | 765 # Data type with potential additional includes |
761 add_includes_for_type(idl_type) | |
762 if base_idl_type in V8_SET_RETURN_VALUE: # Special v8SetReturnValue treatme
nt | 766 if base_idl_type in V8_SET_RETURN_VALUE: # Special v8SetReturnValue treatme
nt |
763 return base_idl_type | 767 return base_idl_type |
764 | 768 |
765 # Pointer type | 769 # Pointer type |
766 return 'DOMWrapper' | 770 return 'DOMWrapper' |
767 | 771 |
768 IdlTypeBase.v8_conversion_type = v8_conversion_type | 772 IdlTypeBase.v8_conversion_type = v8_conversion_type |
769 | 773 |
770 | 774 |
771 V8_SET_RETURN_VALUE = { | 775 V8_SET_RETURN_VALUE = { |
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
970 number_of_nullable_member_types_union) | 974 number_of_nullable_member_types_union) |
971 | 975 |
972 | 976 |
973 def includes_nullable_type_union(idl_type): | 977 def includes_nullable_type_union(idl_type): |
974 # http://heycam.github.io/webidl/#dfn-includes-a-nullable-type | 978 # http://heycam.github.io/webidl/#dfn-includes-a-nullable-type |
975 return idl_type.number_of_nullable_member_types == 1 | 979 return idl_type.number_of_nullable_member_types == 1 |
976 | 980 |
977 IdlTypeBase.includes_nullable_type = False | 981 IdlTypeBase.includes_nullable_type = False |
978 IdlNullableType.includes_nullable_type = True | 982 IdlNullableType.includes_nullable_type = True |
979 IdlUnionType.includes_nullable_type = property(includes_nullable_type_union) | 983 IdlUnionType.includes_nullable_type = property(includes_nullable_type_union) |
OLD | NEW |