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

Side by Side Diff: ppapi/generators/idl_ast.py

Issue 98343005: Pepper: More IDL generator cleanup. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix for json_schema_compiler Created 7 years 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 | « no previous file | ppapi/generators/idl_c_proto.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) 2012 The Chromium Authors. All rights reserved. 1 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 """Nodes for PPAPI IDL AST.""" 5 """Nodes for PPAPI IDL AST."""
6 6
7 from idl_namespace import IDLNamespace 7 from idl_namespace import IDLNamespace
8 from idl_node import IDLNode 8 from idl_node import IDLNode
9 from idl_option import GetOption 9 from idl_option import GetOption
10 from idl_visitor import IDLVisitor 10 from idl_visitor import IDLVisitor
11 from idl_release import IDLReleaseMap 11 from idl_release import IDLReleaseMap
12 12
13 # 13 #
14 # IDL Predefined types
15 #
16 BuiltIn = set(['int8_t', 'int16_t', 'int32_t', 'int64_t', 'uint8_t',
17 'uint16_t', 'uint32_t', 'uint64_t', 'double_t', 'float_t',
18 'handle_t', 'interface_t', 'char', 'mem_t', 'mem_ptr_t',
19 'str_t', 'void'])
20
21
22 #
23 # IDLLabelResolver 14 # IDLLabelResolver
24 # 15 #
25 # A specialized visitor which traverses the AST, building a mapping of 16 # A specialized visitor which traverses the AST, building a mapping of
26 # Release names to Versions numbers and calculating a min version. 17 # Release names to Versions numbers and calculating a min version.
27 # The mapping is applied to the File nodes within the AST. 18 # The mapping is applied to the File nodes within the AST.
28 # 19 #
29 class IDLLabelResolver(IDLVisitor): 20 class IDLLabelResolver(IDLVisitor):
30 def Depart(self, node, ignore, childdata): 21 def Depart(self, node, ignore, childdata):
31 # Build list of Release=Version 22 # Build list of Release=Version
32 if node.IsA('LabelItem'): 23 if node.IsA('LabelItem'):
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 if not node.IsA('AST', 'File', 'Label', 'LabelItem'): 62 if not node.IsA('AST', 'File', 'Label', 'LabelItem'):
72 my_min, _ = node.GetMinMax() 63 my_min, _ = node.GetMinMax()
73 if not my_min: 64 if not my_min:
74 node.SetMin(self.rmin) 65 node.SetMin(self.rmin)
75 66
76 # If this object is not a namespace aware object, use the parent's one 67 # If this object is not a namespace aware object, use the parent's one
77 if node.cls not in self.NamespaceSet: 68 if node.cls not in self.NamespaceSet:
78 node.namespace = parent_namespace 69 node.namespace = parent_namespace
79 else: 70 else:
80 # otherwise create one. 71 # otherwise create one.
81 node.namespace = IDLNamespace(parent_namespace, node.GetName()) 72 node.namespace = IDLNamespace(parent_namespace)
82 73
83 # If this node is named, place it in its parent's namespace 74 # If this node is named, place it in its parent's namespace
84 if parent_namespace and node.cls in IDLNode.NamedSet: 75 if parent_namespace and node.cls in IDLNode.NamedSet:
85 # Set version min and max based on properties 76 # Set version min and max based on properties
86 if self.release_map: 77 if self.release_map:
87 vmin = node.GetProperty('version') 78 vmin = node.GetProperty('version')
88 vmax = node.GetProperty('deprecate') 79 vmax = node.GetProperty('deprecate')
89 # If no min is available, the use the parent File's min 80 # If no min is available, the use the parent File's min
90 if vmin == None: 81 if vmin == None:
91 rmin = self.rmin 82 rmin = self.rmin
(...skipping 25 matching lines...) Expand all
117 node.SetProperty('FILE', node) 108 node.SetProperty('FILE', node)
118 filenode = node 109 filenode = node
119 110
120 if not node.IsA('AST'): 111 if not node.IsA('AST'):
121 file_min, _ = filenode.release_map.GetReleaseRange() 112 file_min, _ = filenode.release_map.GetReleaseRange()
122 if not file_min: 113 if not file_min:
123 print 'Resetting min on %s to %s' % (node, file_min) 114 print 'Resetting min on %s to %s' % (node, file_min)
124 node.SetMinRange(file_min) 115 node.SetMinRange(file_min)
125 116
126 # If this node has a TYPEREF, resolve it to a version list 117 # If this node has a TYPEREF, resolve it to a version list
127 typeref = node.property_node.GetPropertyLocal('TYPEREF') 118 typeref = node.GetPropertyLocal('TYPEREF')
128 if typeref: 119 if typeref:
129 node.typelist = node.parent.namespace.FindList(typeref) 120 node.typelist = node.parent.namespace.FindList(typeref)
130 if not node.typelist: 121 if not node.typelist:
131 node.Error('Could not resolve %s.' % typeref) 122 node.Error('Could not resolve %s.' % typeref)
132 else: 123 else:
133 node.typelist = None 124 node.typelist = None
134 return filenode 125 return filenode
135 126
136 # 127 #
137 # IDLReleaseResolver 128 # IDLReleaseResolver
(...skipping 19 matching lines...) Expand all
157 class IDLAst(IDLNode): 148 class IDLAst(IDLNode):
158 def __init__(self, children): 149 def __init__(self, children):
159 IDLNode.__init__(self, 'AST', 'BuiltIn', 1, 0, children) 150 IDLNode.__init__(self, 'AST', 'BuiltIn', 1, 0, children)
160 self.Resolve() 151 self.Resolve()
161 152
162 def Resolve(self): 153 def Resolve(self):
163 # Set the appropriate Release=Version mapping for each File 154 # Set the appropriate Release=Version mapping for each File
164 IDLLabelResolver().Visit(self, None) 155 IDLLabelResolver().Visit(self, None)
165 156
166 # Generate the Namesapce Tree 157 # Generate the Namesapce Tree
167 self.namespace = IDLNamespace(None, 'AST') 158 self.namespace = IDLNamespace(None)
168 IDLNamespaceVersionResolver().Visit(self, self.namespace) 159 IDLNamespaceVersionResolver().Visit(self, self.namespace)
169 160
170 # Using the namespace, resolve type references 161 # Using the namespace, resolve type references
171 IDLFileTypeResolver().Visit(self, None) 162 IDLFileTypeResolver().Visit(self, None)
172 163
173 # Build an ordered list of all releases 164 # Build an ordered list of all releases
174 releases = set() 165 releases = set()
175 for filenode in self.GetListOf('File'): 166 for filenode in self.GetListOf('File'):
176 releases |= set(filenode.release_map.GetReleases()) 167 releases |= set(filenode.release_map.GetReleases())
177 168
178 # Generate a per node list of releases and release mapping 169 # Generate a per node list of releases and release mapping
179 IDLReleaseResolver().Visit(self, sorted(releases)) 170 IDLReleaseResolver().Visit(self, sorted(releases))
180 171
181 for filenode in self.GetListOf('File'): 172 for filenode in self.GetListOf('File'):
182 errors = filenode.GetProperty('ERRORS') 173 errors = filenode.GetProperty('ERRORS')
183 if errors: 174 if errors:
184 self.errors += errors 175 self.errors += errors
185 176
186 177
OLDNEW
« no previous file with comments | « no previous file | ppapi/generators/idl_c_proto.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698