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

Side by Side Diff: third_party/WebKit/Source/bindings/scripts/v8_types.py

Issue 2810843002: bindings: Make the sequence conversion code more complaint with WebIDL. (Closed)
Patch Set: Adjust even more tests Created 3 years, 8 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 unified diff | Download patch
OLDNEW
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 407 matching lines...) Expand 10 before | Expand all | Expand 10 after
418 418
419 419
420 def includes_for_union_type(idl_type, extended_attributes=None): 420 def includes_for_union_type(idl_type, extended_attributes=None):
421 return set.union(*[member_type.includes_for_type(extended_attributes) 421 return set.union(*[member_type.includes_for_type(extended_attributes)
422 for member_type in idl_type.member_types]) 422 for member_type in idl_type.member_types])
423 423
424 IdlUnionType.includes_for_type = includes_for_union_type 424 IdlUnionType.includes_for_type = includes_for_union_type
425 425
426 426
427 def includes_for_array_or_sequence_type(idl_type, extended_attributes=None): 427 def includes_for_array_or_sequence_type(idl_type, extended_attributes=None):
428 return idl_type.element_type.includes_for_type(extended_attributes) 428 return set.union(set(['bindings/core/v8/IDLTypes.h',
429 'bindings/core/v8/NativeValueTraitsImpl.h']),
430 idl_type.element_type.includes_for_type(extended_attributes ))
429 431
430 IdlArrayOrSequenceType.includes_for_type = includes_for_array_or_sequence_type 432 IdlArrayOrSequenceType.includes_for_type = includes_for_array_or_sequence_type
431 433
432 434
433 def includes_for_record_type(idl_type, extended_attributes=None): 435 def includes_for_record_type(idl_type, extended_attributes=None):
434 return set.union(idl_type.key_type.includes_for_type(extended_attributes), 436 return set.union(idl_type.key_type.includes_for_type(extended_attributes),
435 idl_type.value_type.includes_for_type(extended_attributes)) 437 idl_type.value_type.includes_for_type(extended_attributes))
436 438
437 IdlRecordType.includes_for_type = includes_for_record_type 439 IdlRecordType.includes_for_type = includes_for_record_type
438 440
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
571 native_value_traits_type_name(idl_type.val ue_type)) 573 native_value_traits_type_name(idl_type.val ue_type))
572 elif idl_type.is_basic_type or idl_type.name == 'Promise': 574 elif idl_type.is_basic_type or idl_type.name == 'Promise':
573 name = 'IDL%s' % idl_type.name 575 name = 'IDL%s' % idl_type.name
574 elif idl_type.implemented_as is not None: 576 elif idl_type.implemented_as is not None:
575 name = idl_type.implemented_as 577 name = idl_type.implemented_as
576 else: 578 else:
577 name = idl_type.name 579 name = idl_type.name
578 return name 580 return name
579 581
580 582
581 def v8_value_to_cpp_value(idl_type, extended_attributes, v8_value, variable_name , index, isolate): 583 def v8_value_to_cpp_value(idl_type, extended_attributes, v8_value, variable_name , isolate):
582 if idl_type.name == 'void': 584 if idl_type.name == 'void':
583 return '' 585 return ''
584 586
585 # Array or sequence types
586 native_array_element_type = idl_type.native_array_element_type
587 if native_array_element_type:
588 return v8_value_to_cpp_value_array_or_sequence(native_array_element_type , v8_value, index, isolate)
589
590 # Simple types 587 # Simple types
591 idl_type = idl_type.preprocessed_type 588 idl_type = idl_type.preprocessed_type
592 base_idl_type = idl_type.as_union_type.name if idl_type.is_union_type else i dl_type.base_type 589 base_idl_type = idl_type.as_union_type.name if idl_type.is_union_type else i dl_type.base_type
593 590
594 if 'FlexibleArrayBufferView' in extended_attributes: 591 if 'FlexibleArrayBufferView' in extended_attributes:
595 if base_idl_type not in ARRAY_BUFFER_VIEW_AND_TYPED_ARRAY_TYPES: 592 if base_idl_type not in ARRAY_BUFFER_VIEW_AND_TYPED_ARRAY_TYPES:
596 raise ValueError("Unrecognized base type for extended attribute 'Fle xibleArrayBufferView': %s" % (idl_type.base_type)) 593 raise ValueError("Unrecognized base type for extended attribute 'Fle xibleArrayBufferView': %s" % (idl_type.base_type))
597 base_idl_type = 'FlexibleArrayBufferView' 594 base_idl_type = 'FlexibleArrayBufferView'
598 595
599 if idl_type.is_integer_type: 596 if idl_type.is_integer_type:
(...skipping 21 matching lines...) Expand all
621 nullable = 'UnionTypeConversionMode::kNullable' if idl_type.includes_nul lable_type \ 618 nullable = 'UnionTypeConversionMode::kNullable' if idl_type.includes_nul lable_type \
622 else 'UnionTypeConversionMode::kNotNullable' 619 else 'UnionTypeConversionMode::kNotNullable'
623 cpp_expression_format = 'V8{idl_type}::toImpl({isolate}, {v8_value}, {va riable_name}, %s, exceptionState)' % nullable 620 cpp_expression_format = 'V8{idl_type}::toImpl({isolate}, {v8_value}, {va riable_name}, %s, exceptionState)' % nullable
624 elif idl_type.use_output_parameter_for_result: 621 elif idl_type.use_output_parameter_for_result:
625 cpp_expression_format = 'V8{idl_type}::toImpl({isolate}, {v8_value}, {va riable_name}, exceptionState)' 622 cpp_expression_format = 'V8{idl_type}::toImpl({isolate}, {v8_value}, {va riable_name}, exceptionState)'
626 elif idl_type.is_callback_function: 623 elif idl_type.is_callback_function:
627 cpp_expression_format = ( 624 cpp_expression_format = (
628 '{idl_type}::Create(ScriptState::Current({isolate}), {v8_value})') 625 '{idl_type}::Create(ScriptState::Current({isolate}), {v8_value})')
629 elif idl_type.v8_conversion_needs_exception_state: 626 elif idl_type.v8_conversion_needs_exception_state:
630 # Effectively, this if branch means everything with v8_conversion_needs_ exception_state == True 627 # Effectively, this if branch means everything with v8_conversion_needs_ exception_state == True
631 # except for unions, sequences and dictionary interfaces. 628 # except for unions and dictionary interfaces.
632 base_idl_type = native_value_traits_type_name(idl_type) 629 base_idl_type = native_value_traits_type_name(idl_type)
633 cpp_expression_format = ( 630 cpp_expression_format = (
634 'NativeValueTraits<{idl_type}>::NativeValue({isolate}, {arguments})' ) 631 'NativeValueTraits<{idl_type}>::NativeValue({isolate}, {arguments})' )
635 else: 632 else:
636 cpp_expression_format = ( 633 cpp_expression_format = (
637 'V8{idl_type}::toImplWithTypeCheck({isolate}, {v8_value})') 634 'V8{idl_type}::toImplWithTypeCheck({isolate}, {v8_value})')
638 635
639 return cpp_expression_format.format(arguments=arguments, idl_type=base_idl_t ype, v8_value=v8_value, variable_name=variable_name, isolate=isolate) 636 return cpp_expression_format.format(arguments=arguments, idl_type=base_idl_t ype, v8_value=v8_value, variable_name=variable_name, isolate=isolate)
640 637
641 638
642 def v8_value_to_cpp_value_array_or_sequence(native_array_element_type, v8_value, index, isolate='info.GetIsolate()'):
643 # Index is None for setters, index (starting at 0) for method arguments,
644 # and is used to provide a human-readable exception message
645 if index is None:
646 index = 0 # special case, meaning "setter"
647 else:
648 index += 1 # human-readable index
649 if (native_array_element_type.is_interface_type and
650 native_array_element_type.name != 'Dictionary'):
651 this_cpp_type = None
652 expression_format = 'ToMemberNativeArray<{native_array_element_type}>({v 8_value}, {index}, {isolate}, exceptionState)'
653 else:
654 this_cpp_type = native_array_element_type.cpp_type
655 if native_array_element_type.is_dictionary or native_array_element_type. is_union_type:
656 vector_type = 'HeapVector'
657 else:
658 vector_type = 'Vector'
659 if native_array_element_type.is_primitive_type:
660 value_type = native_value_traits_type_name(native_array_element_type )
661 expression_format = ('ToImplArray<%s<{cpp_type}>, %s>'
662 '({v8_value}, {index}, {isolate}, '
663 'exceptionState)' % (vector_type, value_type))
664 else:
665 expression_format = ('ToImplArray<%s<{cpp_type}>>'
666 '({v8_value}, {index}, {isolate}, '
667 'exceptionState)' % vector_type)
668
669 expression = expression_format.format(native_array_element_type=native_array _element_type.name, cpp_type=this_cpp_type,
670 index=index, v8_value=v8_value, isolat e=isolate)
671 return expression
672
673
674 # FIXME: this function should be refactored, as this takes too many flags. 639 # FIXME: this function should be refactored, as this takes too many flags.
675 def v8_value_to_local_cpp_value(idl_type, extended_attributes, v8_value, variabl e_name, index=None, declare_variable=True, 640 def v8_value_to_local_cpp_value(idl_type, extended_attributes, v8_value, variabl e_name, declare_variable=True,
676 isolate='info.GetIsolate()', bailout_return_valu e=None, use_exception_state=False): 641 isolate='info.GetIsolate()', bailout_return_valu e=None, use_exception_state=False):
677 """Returns an expression that converts a V8 value to a C++ value and stores it as a local value.""" 642 """Returns an expression that converts a V8 value to a C++ value and stores it as a local value."""
678 643
679 this_cpp_type = idl_type.cpp_type_args(extended_attributes=extended_attribut es, raw_type=True) 644 this_cpp_type = idl_type.cpp_type_args(extended_attributes=extended_attribut es, raw_type=True)
680 idl_type = idl_type.preprocessed_type 645 idl_type = idl_type.preprocessed_type
681 646
682 cpp_value = v8_value_to_cpp_value(idl_type, extended_attributes, v8_value, v ariable_name, index, isolate) 647 cpp_value = v8_value_to_cpp_value(idl_type, extended_attributes, v8_value, v ariable_name, isolate)
683 648
684 # Optional expression that returns a value to be assigned to the local varia ble. 649 # Optional expression that returns a value to be assigned to the local varia ble.
685 assign_expression = None 650 assign_expression = None
686 # Optional void expression executed unconditionally. 651 # Optional void expression executed unconditionally.
687 set_expression = None 652 set_expression = None
688 # Optional expression that returns true if the conversion fails. 653 # Optional expression that returns true if the conversion fails.
689 check_expression = None 654 check_expression = None
690 # Optional expression used as the return value when returning. Only 655 # Optional expression used as the return value when returning. Only
691 # meaningful if 'check_expression' is not None. 656 # meaningful if 'check_expression' is not None.
692 return_expression = bailout_return_value 657 return_expression = bailout_return_value
(...skipping 392 matching lines...) Expand 10 before | Expand all | Expand 10 after
1085 IdlTypeBase.is_explicit_nullable = property(is_explicit_nullable) 1050 IdlTypeBase.is_explicit_nullable = property(is_explicit_nullable)
1086 1051
1087 1052
1088 def includes_nullable_type_union(idl_type): 1053 def includes_nullable_type_union(idl_type):
1089 # http://heycam.github.io/webidl/#dfn-includes-a-nullable-type 1054 # http://heycam.github.io/webidl/#dfn-includes-a-nullable-type
1090 return idl_type.number_of_nullable_member_types == 1 1055 return idl_type.number_of_nullable_member_types == 1
1091 1056
1092 IdlTypeBase.includes_nullable_type = False 1057 IdlTypeBase.includes_nullable_type = False
1093 IdlNullableType.includes_nullable_type = True 1058 IdlNullableType.includes_nullable_type = True
1094 IdlUnionType.includes_nullable_type = property(includes_nullable_type_union) 1059 IdlUnionType.includes_nullable_type = property(includes_nullable_type_union)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698