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

Side by Side Diff: bindings/dart/scripts/dart_interface.py

Issue 551053003: Roll IDL Dartium37 (r181477) (Closed) Base URL: https://dart.googlecode.com/svn/third_party/WebCore
Patch Set: Created 6 years, 3 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 | Annotate | Revision Log
« no previous file with comments | « bindings/dart/scripts/dart_attributes.py ('k') | bindings/dart/scripts/dart_methods.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 377 matching lines...) Expand 10 before | Expand all | Expand 10 after
388 for extended_attribute_name in extended_attributes: 388 for extended_attribute_name in extended_attributes:
389 ignore_extended_values = IGNORE_EXTENDED_ATTRIBUTES.get(extended_attribu te_name) 389 ignore_extended_values = IGNORE_EXTENDED_ATTRIBUTES.get(extended_attribu te_name)
390 if ignore_extended_values != None: 390 if ignore_extended_values != None:
391 extended_attribute_value = extended_attributes.get(extended_attribut e_name) 391 extended_attribute_value = extended_attributes.get(extended_attribut e_name)
392 if ((not ignore_extended_values and extended_attribute_value == None ) or 392 if ((not ignore_extended_values and extended_attribute_value == None ) or
393 extended_attribute_value in ignore_extended_values): 393 extended_attribute_value in ignore_extended_values):
394 return True 394 return True
395 return False 395 return False
396 396
397 397
398 def add_native_entries(interface, constructors, is_custom):
399 for constructor in constructors:
400 types = None
401 if not is_custom:
402 types = [arg['preprocessed_type']
403 for arg in constructor['arguments']]
404 argument_names = [arg['name'] for arg in constructor['arguments']]
405 native_entry = \
406 DartUtilities.generate_native_entry(interface.name, constructor,
407 None, 'Constructor', None,
408 argument_names, types)
409 constructor.update({'native_entry': native_entry})
410
411
398 def generate_interface(interface): 412 def generate_interface(interface):
399 includes.clear() 413 includes.clear()
400 includes.update(INTERFACE_CPP_INCLUDES) 414 includes.update(INTERFACE_CPP_INCLUDES)
401 header_includes = set(INTERFACE_H_INCLUDES) 415 header_includes = set(INTERFACE_H_INCLUDES)
402 416
403 parent_interface = interface.parent 417 parent_interface = interface.parent
404 if parent_interface: 418 if parent_interface:
405 header_includes.update(dart_types.includes_for_interface(parent_interfac e)) 419 header_includes.update(dart_types.includes_for_interface(parent_interfac e))
406 extended_attributes = interface.extended_attributes 420 extended_attributes = interface.extended_attributes
407 421
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
533 any_type_attributes = [attribute for attribute in interface.attributes 547 any_type_attributes = [attribute for attribute in interface.attributes
534 if attribute.idl_type.name == 'Any'] 548 if attribute.idl_type.name == 'Any']
535 if has_event_constructor: 549 if has_event_constructor:
536 includes.add('bindings/common/Dictionary.h') 550 includes.add('bindings/common/Dictionary.h')
537 if any_type_attributes: 551 if any_type_attributes:
538 includes.add('bindings/v8/SerializedScriptValue.h') 552 includes.add('bindings/v8/SerializedScriptValue.h')
539 553
540 # [NamedConstructor] 554 # [NamedConstructor]
541 named_constructor = generate_named_constructor(interface) 555 named_constructor = generate_named_constructor(interface)
542 556
557 add_native_entries(interface, constructors, bool(custom_constructors))
558 add_native_entries(interface, custom_constructors, bool(custom_constructors) )
559 if named_constructor:
560 add_native_entries(interface, [named_constructor], bool(custom_construct ors))
561
543 if (constructors or custom_constructors or has_event_constructor or 562 if (constructors or custom_constructors or has_event_constructor or
544 named_constructor): 563 named_constructor):
545 includes.add('core/frame/LocalDOMWindow.h') 564 includes.add('core/frame/LocalDOMWindow.h')
546 565
547 template_contents.update({ 566 template_contents.update({
548 'any_type_attributes': any_type_attributes, 567 'any_type_attributes': any_type_attributes,
549 'constructors': constructors, 568 'constructors': constructors,
550 'custom_constructors': custom_constructors, 569 'custom_constructors': custom_constructors,
551 'has_custom_constructor': bool(custom_constructors), 570 'has_custom_constructor': bool(custom_constructors),
552 'has_event_constructor': has_event_constructor, 571 'has_event_constructor': has_event_constructor,
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
602 not _suppress_extended_attributes(method.extended_attributes) and 621 not _suppress_extended_attributes(method.extended_attributes) and
603 not 'DartSuppress' in method.extended_attributes)] 622 not 'DartSuppress' in method.extended_attributes)]
604 generate_overloads(methods) 623 generate_overloads(methods)
605 for method in methods: 624 for method in methods:
606 method['do_generate_method_configuration'] = ( 625 method['do_generate_method_configuration'] = (
607 method['do_not_check_signature'] and 626 method['do_not_check_signature'] and
608 not method['per_context_enabled_function'] and 627 not method['per_context_enabled_function'] and
609 # For overloaded methods, only generate one accessor 628 # For overloaded methods, only generate one accessor
610 ('overload_index' not in method or method['overload_index'] == 1)) 629 ('overload_index' not in method or method['overload_index'] == 1))
611 630
631 generate_method_native_entries(interface, methods)
632
612 template_contents.update({ 633 template_contents.update({
613 'has_origin_safe_method_setter': any( 634 'has_origin_safe_method_setter': any(
614 method['is_check_security_for_frame'] and not method['is_read_only'] 635 method['is_check_security_for_frame'] and not method['is_read_only']
615 for method in methods), 636 for method in methods),
616 'has_method_configuration': any(method['do_generate_method_configuration '] for method in methods), 637 'has_method_configuration': any(method['do_generate_method_configuration '] for method in methods),
617 'has_per_context_enabled_methods': any(method['per_context_enabled_funct ion'] for method in methods), 638 'has_per_context_enabled_methods': any(method['per_context_enabled_funct ion'] for method in methods),
618 'methods': methods, 639 'methods': methods,
619 }) 640 })
620 641
642 native_entries = generate_native_entries(interface, constructors,
643 custom_constructors, attributes,
644 methods, named_constructor)
645
621 template_contents.update({ 646 template_contents.update({
622 'indexed_property_getter': indexed_property_getter(interface), 647 'indexed_property_getter': indexed_property_getter(interface),
623 'indexed_property_setter': indexed_property_setter(interface), 648 'indexed_property_setter': indexed_property_setter(interface),
624 'indexed_property_deleter': indexed_property_deleter(interface), 649 'indexed_property_deleter': indexed_property_deleter(interface),
625 'is_override_builtins': 'OverrideBuiltins' in extended_attributes, 650 'is_override_builtins': 'OverrideBuiltins' in extended_attributes,
626 'named_property_getter': named_property_getter(interface), 651 'named_property_getter': named_property_getter(interface),
627 'named_property_setter': named_property_setter(interface), 652 'named_property_setter': named_property_setter(interface),
628 'named_property_deleter': named_property_deleter(interface), 653 'named_property_deleter': named_property_deleter(interface),
654 'native_entries': native_entries,
629 }) 655 })
630 656
631 return template_contents 657 return template_contents
632 658
633 659
660 def generate_native_entries(interface, constructors, custom_constructors,
661 attributes, methods, named_constructor):
662 entries = []
663 for constructor in constructors:
664 entries.append(constructor['native_entry'])
665 for constructor in custom_constructors:
666 entries.append(constructor['native_entry'])
667 if named_constructor:
668 entries.append(named_constructor['native_entry'])
669 for method in methods:
670 entries.extend(method['native_entries'])
671 for attribute in attributes:
672 entries.append(attribute['native_entry_getter'])
673 entries.append(attribute['native_entry_setter'])
674 return entries
675
676
634 # [DeprecateAs], [Reflect], [RuntimeEnabled] 677 # [DeprecateAs], [Reflect], [RuntimeEnabled]
635 def generate_constant(constant): 678 def generate_constant(constant):
636 # (Blink-only) string literals are unquoted in tokenizer, must be re-quoted 679 # (Blink-only) string literals are unquoted in tokenizer, must be re-quoted
637 # in C++. 680 # in C++.
638 if constant.idl_type.name == 'String': 681 if constant.idl_type.name == 'String':
639 value = '"%s"' % constant.value 682 value = '"%s"' % constant.value
640 else: 683 else:
641 value = constant.value 684 value = constant.value
642 685
643 extended_attributes = constant.extended_attributes 686 extended_attributes = constant.extended_attributes
644 return { 687 return {
645 'cpp_class': extended_attributes.get('PartialInterfaceImplementedAs'), 688 'cpp_class': extended_attributes.get('PartialInterfaceImplementedAs'),
646 'name': constant.name, 689 'name': constant.name,
647 # FIXME: use 'reflected_name' as correct 'name' 690 # FIXME: use 'reflected_name' as correct 'name'
648 'reflected_name': extended_attributes.get('Reflect', constant.name), 691 'reflected_name': extended_attributes.get('Reflect', constant.name),
649 'runtime_enabled_function': DartUtilities.runtime_enabled_function_name( constant), 692 'runtime_enabled_function': DartUtilities.runtime_enabled_function_name( constant),
650 'value': value, 693 'value': value,
651 } 694 }
652 695
653 696
654 ################################################################################ 697 ################################################################################
655 # Overloads 698 # Overloads
656 ################################################################################ 699 ################################################################################
657 700
701 def generate_method_native_entry(interface, method, count, optional_index):
702 types = None
703 if not method['is_custom']:
704 types = [arg['preprocessed_type'] for arg in method['arguments'][0:count ]]
705 if method['is_call_with_script_arguments']:
706 types.append("object")
707 argument_names = [arg['name'] for arg in method['arguments'][0:count]]
708 name = method['name']
709 native_entry = \
710 DartUtilities.generate_native_entry(interface.name, method,
711 name, 'Method',
712 optional_index,
713 argument_names, types)
714 return native_entry
715
716
717 def generate_method_native_entries(interface, methods):
718 for method in methods:
719 native_entries = []
720 required_arg_count = method['number_of_required_arguments']
721 arg_count = method['number_of_arguments']
722 if required_arg_count != arg_count:
723 for x in range(required_arg_count, arg_count + 1):
724 # This is really silly, but is here for now just to match up
725 # the existing name generation in the old dart:html scripts
726 index = arg_count - x + 1
727 native_entry = \
728 generate_method_native_entry(interface, method, x, index)
729 native_entries.append(native_entry)
730 else:
731 # Eventually, we should probably always generate an unindexed
732 # native entry, to handle cases like
733 # addEventListener in which we suppress the optionality,
734 # and in general to make us more robust against optional changes
735 native_entry = \
736 generate_method_native_entry(interface, method, arg_count, None)
737 native_entries.append(native_entry)
738
739 method.update({'native_entries': native_entries})
740
658 def generate_overloads(methods): 741 def generate_overloads(methods):
659 generate_overloads_by_type(methods, is_static=False) # Regular methods 742 generate_overloads_by_type(methods, is_static=False) # Regular methods
660 generate_overloads_by_type(methods, is_static=True) 743 generate_overloads_by_type(methods, is_static=True)
661 744
662 745
663 def generate_overloads_by_type(methods, is_static): 746 def generate_overloads_by_type(methods, is_static):
664 # Generates |overloads| template values and modifies |methods| in place; 747 # Generates |overloads| template values and modifies |methods| in place;
665 # |is_static| flag used (instead of partitioning list in 2) because need to 748 # |is_static| flag used (instead of partitioning list in 2) because need to
666 # iterate over original list of methods to modify in place 749 # iterate over original list of methods to modify in place
667 method_counts = defaultdict(lambda: 0) 750 method_counts = defaultdict(lambda: 0)
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
823 'number_of_required_arguments': 906 'number_of_required_arguments':
824 number_of_required_arguments(constructor), 907 number_of_required_arguments(constructor),
825 } 908 }
826 909
827 910
828 # We don't need much from this - just the idl_type_objects and preproceed_type 911 # We don't need much from this - just the idl_type_objects and preproceed_type
829 # to use in generating the resolver strings. 912 # to use in generating the resolver strings.
830 def custom_constructor_argument(argument, index): 913 def custom_constructor_argument(argument, index):
831 return { 914 return {
832 'idl_type_object': argument.idl_type, 915 'idl_type_object': argument.idl_type,
833 'preprocessed_type': argument.idl_type.preprocessed_type, 916 'name': argument.name,
917 'preprocessed_type': str(argument.idl_type.preprocessed_type),
834 } 918 }
835 919
836 920
837 # [Constructor] 921 # [Constructor]
838 def generate_constructor(interface, constructor): 922 def generate_constructor(interface, constructor):
839 return { 923 return {
840 'argument_list': constructor_argument_list(interface, constructor), 924 'argument_list': constructor_argument_list(interface, constructor),
841 # TODO(terry): Use dart_methods.generate_argument instead constructor_ar gument. 925 # TODO(terry): Use dart_methods.generate_argument instead constructor_ar gument.
842 'arguments': [constructor_argument(interface, argument, index) 926 'arguments': [constructor_argument(interface, argument, index)
843 for index, argument in enumerate(constructor.arguments)], 927 for index, argument in enumerate(constructor.arguments)],
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
892 default_value = str(argument.default_value) if argument.default_value else N one 976 default_value = str(argument.default_value) if argument.default_value else N one
893 977
894 argument_content = { 978 argument_content = {
895 'cpp_type': idl_type.cpp_type_args(), 979 'cpp_type': idl_type.cpp_type_args(),
896 'local_cpp_type': idl_type.cpp_type_args(argument.extended_attributes, u sed_as_argument=True), 980 'local_cpp_type': idl_type.cpp_type_args(argument.extended_attributes, u sed_as_argument=True),
897 # FIXME: check that the default value's type is compatible with the argu ment's 981 # FIXME: check that the default value's type is compatible with the argu ment's
898 'default_value': default_value, 982 'default_value': default_value,
899 # FIXME: remove once [Default] removed and just use argument.default_val ue 983 # FIXME: remove once [Default] removed and just use argument.default_val ue
900 'has_default': 'Default' in argument.extended_attributes or default_valu e, 984 'has_default': 'Default' in argument.extended_attributes or default_valu e,
901 'idl_type_object': idl_type, 985 'idl_type_object': idl_type,
902 'preprocessed_type': idl_type.preprocessed_type, 986 'preprocessed_type': str(idl_type.preprocessed_type),
903 # Dictionary is special-cased, but arrays and sequences shouldn't be 987 # Dictionary is special-cased, but arrays and sequences shouldn't be
904 'idl_type': not idl_type.array_or_sequence_type and idl_type.base_type, 988 'idl_type': not idl_type.array_or_sequence_type and idl_type.base_type,
905 'index': index, 989 'index': index,
906 'is_array_or_sequence_type': not not idl_type.array_or_sequence_type, 990 'is_array_or_sequence_type': not not idl_type.array_or_sequence_type,
907 'is_optional': argument.is_optional, 991 'is_optional': argument.is_optional,
908 'is_strict_type_checking': False, # Required for overload resolution 992 'is_strict_type_checking': False, # Required for overload resolution
909 'name': argument.name, 993 'name': argument.name,
910 'dart_value_to_local_cpp_value': dart_methods.dart_value_to_local_cpp_va lue(interface, argument, index), 994 'dart_value_to_local_cpp_value': dart_methods.dart_value_to_local_cpp_va lue(interface, argument, index),
911 } 995 }
912 return argument_content 996 return argument_content
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
1142 deleter = next( 1226 deleter = next(
1143 method 1227 method
1144 for method in interface.operations 1228 for method in interface.operations
1145 if ('deleter' in method.specials and 1229 if ('deleter' in method.specials and
1146 len(method.arguments) == 1 and 1230 len(method.arguments) == 1 and
1147 str(method.arguments[0].idl_type) == 'DOMString')) 1231 str(method.arguments[0].idl_type) == 'DOMString'))
1148 except StopIteration: 1232 except StopIteration:
1149 return None 1233 return None
1150 1234
1151 return property_deleter(deleter) 1235 return property_deleter(deleter)
OLDNEW
« no previous file with comments | « bindings/dart/scripts/dart_attributes.py ('k') | bindings/dart/scripts/dart_methods.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698