| OLD | NEW |
| 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 IDLAttribute, IDLFile, 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 IDLReleaseList, IDLReleaseMap | 11 from idl_release import IDLReleaseMap |
| 12 | 12 |
| 13 # | 13 # |
| 14 # IDL Predefined types | 14 # IDL Predefined types |
| 15 # | 15 # |
| 16 BuiltIn = set(['int8_t', 'int16_t', 'int32_t', 'int64_t', 'uint8_t', | 16 BuiltIn = set(['int8_t', 'int16_t', 'int32_t', 'int64_t', 'uint8_t', |
| 17 'uint16_t', 'uint32_t', 'uint64_t', 'double_t', 'float_t', | 17 'uint16_t', 'uint32_t', 'uint64_t', 'double_t', 'float_t', |
| 18 'handle_t', 'interface_t', 'char', 'mem_t', 'mem_ptr_t', | 18 'handle_t', 'interface_t', 'char', 'mem_t', 'mem_ptr_t', |
| 19 'str_t', 'void']) | 19 'str_t', 'void']) |
| 20 | 20 |
| 21 | 21 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 35 # On completion of the Label, apply to the parent File if the | 35 # On completion of the Label, apply to the parent File if the |
| 36 # name of the label matches the generation label. | 36 # name of the label matches the generation label. |
| 37 if node.IsA('Label') and node.GetName() == GetOption('label'): | 37 if node.IsA('Label') and node.GetName() == GetOption('label'): |
| 38 try: | 38 try: |
| 39 node.parent.release_map = IDLReleaseMap(childdata) | 39 node.parent.release_map = IDLReleaseMap(childdata) |
| 40 except Exception as err: | 40 except Exception as err: |
| 41 node.Error('Unable to build release map: %s' % str(err)) | 41 node.Error('Unable to build release map: %s' % str(err)) |
| 42 | 42 |
| 43 # For File objects, set the minimum version | 43 # For File objects, set the minimum version |
| 44 if node.IsA('File'): | 44 if node.IsA('File'): |
| 45 file_min, file_max = node.release_map.GetReleaseRange() | 45 file_min, _ = node.release_map.GetReleaseRange() |
| 46 node.SetMin(file_min) | 46 node.SetMin(file_min) |
| 47 | 47 |
| 48 return None | 48 return None |
| 49 | 49 |
| 50 | 50 |
| 51 # | 51 # |
| 52 # IDLNamespaceVersionResolver | 52 # IDLNamespaceVersionResolver |
| 53 # | 53 # |
| 54 # A specialized visitor which traverses the AST, building a namespace tree | 54 # A specialized visitor which traverses the AST, building a namespace tree |
| 55 # as it goes. The namespace tree is mapping from a name to a version list. | 55 # as it goes. The namespace tree is mapping from a name to a version list. |
| 56 # Labels must already be resolved to use. | 56 # Labels must already be resolved to use. |
| 57 # | 57 # |
| 58 class IDLNamespaceVersionResolver(IDLVisitor): | 58 class IDLNamespaceVersionResolver(IDLVisitor): |
| 59 NamespaceSet = set(['AST', 'Callspec', 'Interface', 'Member', 'Struct']) | 59 NamespaceSet = set(['AST', 'Callspec', 'Interface', 'Member', 'Struct']) |
| 60 # | 60 # |
| 61 # When we arrive at a node we must assign it a namespace and if the | 61 # When we arrive at a node we must assign it a namespace and if the |
| 62 # node is named, then place it in the appropriate namespace. | 62 # node is named, then place it in the appropriate namespace. |
| 63 # | 63 # |
| 64 def Arrive(self, node, parent_namespace): | 64 def Arrive(self, node, parent_namespace): |
| 65 # If we are a File, grab the Min version and replease mapping | 65 # If we are a File, grab the Min version and replease mapping |
| 66 if node.IsA('File'): | 66 if node.IsA('File'): |
| 67 self.rmin = node.GetMinMax()[0] | 67 self.rmin = node.GetMinMax()[0] |
| 68 self.release_map = node.release_map | 68 self.release_map = node.release_map |
| 69 | 69 |
| 70 # Set the min version on any non Label within the File | 70 # Set the min version on any non Label within the File |
| 71 if not node.IsA('AST', 'File', 'Label', 'LabelItem'): | 71 if not node.IsA('AST', 'File', 'Label', 'LabelItem'): |
| 72 my_min, my_max = node.GetMinMax() | 72 my_min, _ = node.GetMinMax() |
| 73 if not my_min: | 73 if not my_min: |
| 74 node.SetMin(self.rmin) | 74 node.SetMin(self.rmin) |
| 75 | 75 |
| 76 # If this object is not a namespace aware object, use the parent's one | 76 # If this object is not a namespace aware object, use the parent's one |
| 77 if node.cls not in self.NamespaceSet: | 77 if node.cls not in self.NamespaceSet: |
| 78 node.namespace = parent_namespace | 78 node.namespace = parent_namespace |
| 79 else: | 79 else: |
| 80 # otherwise create one. | 80 # otherwise create one. |
| 81 node.namespace = IDLNamespace(parent_namespace, node.GetName()) | 81 node.namespace = IDLNamespace(parent_namespace, node.GetName()) |
| 82 | 82 |
| (...skipping 28 matching lines...) Expand all Loading... |
| 111 def VisitFilter(self, node, data): | 111 def VisitFilter(self, node, data): |
| 112 return not node.IsA('Comment', 'Copyright') | 112 return not node.IsA('Comment', 'Copyright') |
| 113 | 113 |
| 114 def Arrive(self, node, filenode): | 114 def Arrive(self, node, filenode): |
| 115 # Track the file node to update errors | 115 # Track the file node to update errors |
| 116 if node.IsA('File'): | 116 if node.IsA('File'): |
| 117 node.SetProperty('FILE', node) | 117 node.SetProperty('FILE', node) |
| 118 filenode = node | 118 filenode = node |
| 119 | 119 |
| 120 if not node.IsA('AST'): | 120 if not node.IsA('AST'): |
| 121 file_min, file_max = filenode.release_map.GetReleaseRange() | 121 file_min, _ = filenode.release_map.GetReleaseRange() |
| 122 if not file_min: | 122 if not file_min: |
| 123 print 'Resetting min on %s to %s' % (node, file_min) | 123 print 'Resetting min on %s to %s' % (node, file_min) |
| 124 node.SetMinRange(file_min) | 124 node.SetMinRange(file_min) |
| 125 | 125 |
| 126 # If this node has a TYPEREF, resolve it to a version list | 126 # If this node has a TYPEREF, resolve it to a version list |
| 127 typeref = node.property_node.GetPropertyLocal('TYPEREF') | 127 typeref = node.property_node.GetPropertyLocal('TYPEREF') |
| 128 if typeref: | 128 if typeref: |
| 129 node.typelist = node.parent.namespace.FindList(typeref) | 129 node.typelist = node.parent.namespace.FindList(typeref) |
| 130 if not node.typelist: | 130 if not node.typelist: |
| 131 node.Error('Could not resolve %s.' % typeref) | 131 node.Error('Could not resolve %s.' % typeref) |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 172 | 172 |
| 173 # Build an ordered list of all releases | 173 # Build an ordered list of all releases |
| 174 releases = set() | 174 releases = set() |
| 175 for filenode in self.GetListOf('File'): | 175 for filenode in self.GetListOf('File'): |
| 176 releases |= set(filenode.release_map.GetReleases()) | 176 releases |= set(filenode.release_map.GetReleases()) |
| 177 | 177 |
| 178 # Generate a per node list of releases and release mapping | 178 # Generate a per node list of releases and release mapping |
| 179 IDLReleaseResolver().Visit(self, sorted(releases)) | 179 IDLReleaseResolver().Visit(self, sorted(releases)) |
| 180 | 180 |
| 181 for filenode in self.GetListOf('File'): | 181 for filenode in self.GetListOf('File'): |
| 182 self.errors += int(filenode.GetProperty('ERRORS', 0)) | 182 errors = filenode.GetProperty('ERRORS') |
| 183 if errors: |
| 184 self.errors += errors |
| 183 | 185 |
| 184 | 186 |
| OLD | NEW |