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

Side by Side Diff: Source/bindings/scripts/idl_definitions.py

Issue 670663002: IDL: Use IdlReader to compute interface_info_individual (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Rebase Created 6 years, 2 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 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
50 IdlConstant < TypedObject 50 IdlConstant < TypedObject
51 IdlLiteral 51 IdlLiteral
52 IdlOperation < TypedObject 52 IdlOperation < TypedObject
53 IdlArgument < TypedObject 53 IdlArgument < TypedObject
54 IdlStringifier 54 IdlStringifier
55 IdlException < IdlInterface 55 IdlException < IdlInterface
56 (same contents as IdlInterface) 56 (same contents as IdlInterface)
57 57
58 TypedObject :: mixin for typedef resolution 58 TypedObject :: mixin for typedef resolution
59 59
60 IdlArgument is 'picklable', as it is stored in interfaces_info.
61
60 Design doc: http://www.chromium.org/developers/design-documents/idl-compiler 62 Design doc: http://www.chromium.org/developers/design-documents/idl-compiler
61 """ 63 """
62 64
63 import abc 65 import abc
64 66
65 from idl_types import IdlType, IdlUnionType, IdlArrayType, IdlSequenceType, IdlN ullableType 67 from idl_types import IdlType, IdlUnionType, IdlArrayType, IdlSequenceType, IdlN ullableType
66 68
67 SPECIAL_KEYWORD_LIST = ['GETTER', 'SETTER', 'DELETER'] 69 SPECIAL_KEYWORD_LIST = ['GETTER', 'SETTER', 'DELETER']
68 STANDARD_TYPEDEFS = { 70 STANDARD_TYPEDEFS = {
69 # http://www.w3.org/TR/WebIDL/#common-DOMTimeStamp 71 # http://www.w3.org/TR/WebIDL/#common-DOMTimeStamp
(...skipping 28 matching lines...) Expand all
98 ################################################################################ 100 ################################################################################
99 # Definitions (main container class) 101 # Definitions (main container class)
100 ################################################################################ 102 ################################################################################
101 103
102 class IdlDefinitions(object): 104 class IdlDefinitions(object):
103 def __init__(self, idl_name, node): 105 def __init__(self, idl_name, node):
104 """Args: node: AST root node, class == 'File'""" 106 """Args: node: AST root node, class == 'File'"""
105 self.callback_functions = {} 107 self.callback_functions = {}
106 self.dictionaries = {} 108 self.dictionaries = {}
107 self.enumerations = {} 109 self.enumerations = {}
110 self.implements = []
108 self.interfaces = {} 111 self.interfaces = {}
109 self.idl_name = idl_name 112 self.idl_name = idl_name
110 113
111 node_class = node.GetClass() 114 node_class = node.GetClass()
112 if node_class != 'File': 115 if node_class != 'File':
113 raise ValueError('Unrecognized node class: %s' % node_class) 116 raise ValueError('Unrecognized node class: %s' % node_class)
114 117
115 typedefs = dict((typedef_name, IdlType(type_name)) 118 typedefs = dict((typedef_name, IdlType(type_name))
116 for typedef_name, type_name in 119 for typedef_name, type_name in
117 STANDARD_TYPEDEFS.iteritems()) 120 STANDARD_TYPEDEFS.iteritems())
(...skipping 11 matching lines...) Expand all
129 elif child_class == 'Typedef': 132 elif child_class == 'Typedef':
130 type_name = child.GetName() 133 type_name = child.GetName()
131 typedefs[type_name] = typedef_node_to_type(child) 134 typedefs[type_name] = typedef_node_to_type(child)
132 elif child_class == 'Enum': 135 elif child_class == 'Enum':
133 enumeration = IdlEnum(idl_name, child) 136 enumeration = IdlEnum(idl_name, child)
134 self.enumerations[enumeration.name] = enumeration 137 self.enumerations[enumeration.name] = enumeration
135 elif child_class == 'Callback': 138 elif child_class == 'Callback':
136 callback_function = IdlCallbackFunction(idl_name, child) 139 callback_function = IdlCallbackFunction(idl_name, child)
137 self.callback_functions[callback_function.name] = callback_funct ion 140 self.callback_functions[callback_function.name] = callback_funct ion
138 elif child_class == 'Implements': 141 elif child_class == 'Implements':
139 # Implements is handled at the interface merging step 142 self.implements.append(IdlImplement(child))
140 pass
141 elif child_class == 'Dictionary': 143 elif child_class == 'Dictionary':
142 dictionary = IdlDictionary(idl_name, child) 144 dictionary = IdlDictionary(idl_name, child)
143 self.dictionaries[dictionary.name] = dictionary 145 self.dictionaries[dictionary.name] = dictionary
144 else: 146 else:
145 raise ValueError('Unrecognized node class: %s' % child_class) 147 raise ValueError('Unrecognized node class: %s' % child_class)
146 148
147 # Typedefs are not stored in IR: 149 # Typedefs are not stored in IR:
148 # Resolve typedefs with the actual types and then discard the Typedefs. 150 # Resolve typedefs with the actual types and then discard the Typedefs.
149 # http://www.w3.org/TR/WebIDL/#idl-typedefs 151 # http://www.w3.org/TR/WebIDL/#idl-typedefs
150 self.resolve_typedefs(typedefs) 152 self.resolve_typedefs(typedefs)
(...skipping 432 matching lines...) Expand 10 before | Expand all | Expand 10 after
583 elif child_class == 'Argument': 585 elif child_class == 'Argument':
584 child_name = child.GetName() 586 child_name = child.GetName()
585 if child_name != '...': 587 if child_name != '...':
586 raise ValueError('Unrecognized Argument node; expected "..." , got "%s"' % child_name) 588 raise ValueError('Unrecognized Argument node; expected "..." , got "%s"' % child_name)
587 self.is_variadic = child.GetProperty('ELLIPSIS') or False 589 self.is_variadic = child.GetProperty('ELLIPSIS') or False
588 elif child_class == 'Default': 590 elif child_class == 'Default':
589 self.default_value = default_node_to_idl_literal(child) 591 self.default_value = default_node_to_idl_literal(child)
590 else: 592 else:
591 raise ValueError('Unrecognized node class: %s' % child_class) 593 raise ValueError('Unrecognized node class: %s' % child_class)
592 594
595 def __getstate__(self):
596 # FIXME: Return a picklable object which has enough information to
597 # unpickle.
598 return {}
599
600 def __setstate__(self, state):
601 pass
602
593 603
594 def arguments_node_to_arguments(idl_name, node): 604 def arguments_node_to_arguments(idl_name, node):
595 # [Constructor] and [CustomConstructor] without arguments (the bare form) 605 # [Constructor] and [CustomConstructor] without arguments (the bare form)
596 # have None instead of an arguments node, but have the same meaning as using 606 # have None instead of an arguments node, but have the same meaning as using
597 # an empty argument list, [Constructor()], so special-case this. 607 # an empty argument list, [Constructor()], so special-case this.
598 # http://www.w3.org/TR/WebIDL/#Constructor 608 # http://www.w3.org/TR/WebIDL/#Constructor
599 if node is None: 609 if node is None:
600 return [] 610 return []
601 return [IdlArgument(idl_name, argument_node) 611 return [IdlArgument(idl_name, argument_node)
602 for argument_node in node.GetChildren()] 612 for argument_node in node.GetChildren()]
(...skipping 24 matching lines...) Expand all
627 raise ValueError('Unrecognized node class: %s' % child_class) 637 raise ValueError('Unrecognized node class: %s' % child_class)
628 638
629 # Copy the stringifier's extended attributes (such as [Unforgable]) onto 639 # Copy the stringifier's extended attributes (such as [Unforgable]) onto
630 # the underlying attribute or operation, if there is one. 640 # the underlying attribute or operation, if there is one.
631 if self.attribute or self.operation: 641 if self.attribute or self.operation:
632 (self.attribute or self.operation).extended_attributes.update( 642 (self.attribute or self.operation).extended_attributes.update(
633 self.extended_attributes) 643 self.extended_attributes)
634 644
635 645
636 ################################################################################ 646 ################################################################################
647 # Implement statements
648 ################################################################################
649
650 class IdlImplement(object):
651 def __init__(self, node):
652 self.left_interface = node.GetName()
653 self.right_interface = node.GetProperty('REFERENCE')
654
655
656 ################################################################################
637 # Extended attributes 657 # Extended attributes
638 ################################################################################ 658 ################################################################################
639 659
640 def ext_attributes_node_to_extended_attributes(idl_name, node): 660 def ext_attributes_node_to_extended_attributes(idl_name, node):
641 """ 661 """
642 Returns: 662 Returns:
643 Dictionary of {ExtAttributeName: ExtAttributeValue}. 663 Dictionary of {ExtAttributeName: ExtAttributeValue}.
644 Value is usually a string, with these exceptions: 664 Value is usually a string, with these exceptions:
645 Constructors: value is a list of Arguments nodes, corresponding to 665 Constructors: value is a list of Arguments nodes, corresponding to
646 possible signatures of the constructor. 666 possible signatures of the constructor.
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
821 child_class = child.GetClass() 841 child_class = child.GetClass()
822 if child_class != 'Type': 842 if child_class != 'Type':
823 raise ValueError('Unrecognized node class: %s' % child_class) 843 raise ValueError('Unrecognized node class: %s' % child_class)
824 return type_node_to_type(child) 844 return type_node_to_type(child)
825 845
826 846
827 def union_type_node_to_idl_union_type(node): 847 def union_type_node_to_idl_union_type(node):
828 member_types = [type_node_to_type(member_type_node) 848 member_types = [type_node_to_type(member_type_node)
829 for member_type_node in node.GetChildren()] 849 for member_type_node in node.GetChildren()]
830 return IdlUnionType(member_types) 850 return IdlUnionType(member_types)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698