| OLD | NEW | 
|---|
| 1 #!/usr/bin/python | 1 #!/usr/bin/python | 
| 2 # | 2 # | 
| 3 # Copyright (c) 2011 The Chromium Authors. All rights reserved. | 3 # Copyright (c) 2011 The Chromium Authors. All rights reserved. | 
| 4 # Use of this source code is governed by a BSD-style license that can be | 4 # Use of this source code is governed by a BSD-style license that can be | 
| 5 # found in the LICENSE file. | 5 # found in the LICENSE file. | 
| 6 | 6 | 
| 7 """Nodes for PPAPI IDL AST.""" | 7 """Nodes for PPAPI IDL AST.""" | 
| 8 | 8 | 
| 9 from idl_namespace import IDLNamespace, IDLVersionMap | 9 from idl_namespace import IDLNamespace, IDLVersionMap | 
| 10 from idl_node import IDLAttribute, IDLFile, IDLNode | 10 from idl_node import IDLAttribute, IDLFile, IDLNode | 
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 71 | 71 | 
| 72 class IDLFileTypeResolver(IDLVisitor): | 72 class IDLFileTypeResolver(IDLVisitor): | 
| 73   def VisitFilter(self, node, data): | 73   def VisitFilter(self, node, data): | 
| 74     return not node.IsA('Comment', 'Copyright') | 74     return not node.IsA('Comment', 'Copyright') | 
| 75 | 75 | 
| 76   def Arrive(self, node, filenode): | 76   def Arrive(self, node, filenode): | 
| 77     # Track the file node to update errors | 77     # Track the file node to update errors | 
| 78     if node.IsA('File'): | 78     if node.IsA('File'): | 
| 79       node.SetProperty('FILE', node) | 79       node.SetProperty('FILE', node) | 
| 80 | 80 | 
| 81 |  | 
| 82     # If this node has a TYPEREF, resolve it to a version list | 81     # If this node has a TYPEREF, resolve it to a version list | 
| 83     typeref = node.property_node.GetPropertyLocal('TYPEREF') | 82     typeref = node.property_node.GetPropertyLocal('TYPEREF') | 
| 84     if typeref: | 83     if typeref: | 
| 85       node.typelist = node.parent.namespace.FindList(typeref) | 84       node.typelist = node.parent.namespace.FindList(typeref) | 
| 86       if not node.typelist: | 85       if not node.typelist: | 
| 87         node.Error('Could not resolve %s.' % typeref) | 86         node.Error('Could not resolve %s.' % typeref) | 
| 88     else: | 87     else: | 
| 89       node.typelist = None | 88       node.typelist = None | 
| 90     return filenode | 89     return filenode | 
| 91 | 90 | 
| 92 | 91 | 
|  | 92 class IDLReleaseResolver(IDLVisitor): | 
|  | 93   def VisitFilter(self, node, data): | 
|  | 94     return node.IsA('AST','File', 'Label') | 
|  | 95 | 
|  | 96   def Depart(self, node, data, childdata): | 
|  | 97     if node.IsA('Label'): | 
|  | 98       return set([child.name for child in GetListOf('LabelItem')]) | 
|  | 99     return childdata | 
| 93 | 100 | 
| 94 class IDLVersionMapDefault(IDLVersionMap): | 101 class IDLVersionMapDefault(IDLVersionMap): | 
| 95   def GetRelease(self, version): | 102   def GetRelease(self, version): | 
| 96     return 'M13' | 103     return 'M13' | 
| 97 | 104 | 
| 98   def GetVersion(self, release): | 105   def GetVersion(self, release): | 
| 99     return float(0.0) | 106     return float(0.0) | 
| 100 | 107 | 
| 101 # | 108 # | 
| 102 # IDLAst | 109 # IDLAst | 
| 103 # | 110 # | 
| 104 # A specialized version of the IDLNode for containing the whole of the | 111 # A specialized version of the IDLNode for containing the whole of the | 
| 105 # AST.  The specialized BuildTree function pulls the per file namespaces | 112 # AST.  The specialized BuildTree function pulls the per file namespaces | 
| 106 # into the global AST namespace and checks for collisions. | 113 # into the global AST namespace and checks for collisions. | 
| 107 # | 114 # | 
| 108 class IDLAst(IDLNode): | 115 class IDLAst(IDLNode): | 
| 109   def __init__(self, children): | 116   def __init__(self, children): | 
| 110     objs = [] | 117     objs = [] | 
| 111 | 118 | 
| 112     builtin = None | 119     builtin = None | 
| 113     extranodes = [] | 120     extranodes = [] | 
| 114     for filenode in children: | 121     for filenode in children: | 
| 115       if filenode.GetProperty('NAME') == 'pp_stdint.idl': | 122       if filenode.GetProperty('NAME') == 'pp_stdint.idl': | 
| 116         builtin = filenode | 123         builtin = filenode | 
| 117         break | 124         break | 
| 118 | 125 | 
| 119 #    if not builtin: |  | 
| 120 #      builtin = IDLFile('pp_stdint.idl', []) |  | 
| 121 #      extranodes = [builtin] |  | 
| 122 |  | 
| 123 #    for name in BuiltIn: |  | 
| 124 #      nameattr = IDLAttribute('NAME', name) |  | 
| 125 #      typenode = IDLNode('Type', 'BuiltIn', 1, 0, [nameattr]) |  | 
| 126 #      builtin.AddChild(typenode) |  | 
| 127 |  | 
| 128     IDLNode.__init__(self, 'AST', 'BuiltIn', 1, 0, extranodes + children) | 126     IDLNode.__init__(self, 'AST', 'BuiltIn', 1, 0, extranodes + children) | 
| 129     self.SetProperty('LABEL', IDLVersionMapDefault()) | 127     self.SetProperty('LABEL', IDLVersionMapDefault()) | 
| 130     self.Resolve() | 128     self.Resolve() | 
| 131 | 129 | 
| 132   def Resolve(self): | 130   def Resolve(self): | 
| 133     self.namespace = IDLNamespace(None) | 131     self.namespace = IDLNamespace(None) | 
| 134     self.namespace.name = 'AST' | 132     self.namespace.name = 'AST' | 
| 135     IDLNamespaceLabelResolver().Visit(self, self.namespace) | 133     IDLNamespaceLabelResolver().Visit(self, self.namespace) | 
| 136     IDLFileTypeResolver().Visit(self, None) | 134     IDLFileTypeResolver().Visit(self, None) | 
| 137 | 135 | 
|  | 136     # Build an ordered list of all releases | 
|  | 137     self.releases = set() | 
|  | 138     for filenode in self.GetListOf('File'): | 
|  | 139       vmap = filenode.GetProperty('LABEL') | 
|  | 140       self.releases |= set(vmap.releases) | 
|  | 141     self.releases = sorted(self.releases) | 
|  | 142 | 
| 138   def SetTypeInfo(self, name, properties): | 143   def SetTypeInfo(self, name, properties): | 
| 139     node = self.namespace[name] | 144     node = self.namespace[name] | 
| 140     for prop in properties: | 145     for prop in properties: | 
| 141       node.properties[prop] = properties[prop] | 146       node.properties[prop] = properties[prop] | 
| 142 | 147 | 
| 143 | 148 | 
| OLD | NEW | 
|---|