summaryrefslogtreecommitdiffstats
path: root/ppapi/generators/idl_ast.py
diff options
context:
space:
mode:
authornoelallen@google.com <noelallen@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-08-24 23:03:06 +0000
committernoelallen@google.com <noelallen@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-08-24 23:03:06 +0000
commitf7314730aae52985ecc4a723289b6a7eade82cd1 (patch)
tree72a6a3c7f155a66527ee8a455b3bae919a384ec1 /ppapi/generators/idl_ast.py
parentd995780c28c131a0ea30daa4d2e991746312cc19 (diff)
downloadchromium_src-f7314730aae52985ecc4a723289b6a7eade82cd1.zip
chromium_src-f7314730aae52985ecc4a723289b6a7eade82cd1.tar.gz
chromium_src-f7314730aae52985ecc4a723289b6a7eade82cd1.tar.bz2
More multi-version support
Minor fix to idl_output: switch from None to '' to alow split to work Add 'InReleases' member to verify node is valid within a list of releases. Add 'releases' member to IDLVersionMap class for easier search. Remove stale code and build ordered list of requested releases in AST Remove release member from CGen object, and pass into functions Move release tracking from C prototype to C header generator Update generator tests. Added golden files to verify the C generator is correct NOTE: This is work in progress. The header emitted using --release=X should be correct and has been tested to generate exactly what we have today, however --range=X,Y does not yet generate what we need. BUG= http://code.google.com/p/chromium/issues/detail?id=89969 TEST= python generator.py Review URL: http://codereview.chromium.org/7715036 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@98133 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ppapi/generators/idl_ast.py')
-rw-r--r--ppapi/generators/idl_ast.py25
1 files changed, 15 insertions, 10 deletions
diff --git a/ppapi/generators/idl_ast.py b/ppapi/generators/idl_ast.py
index 57105b7..95eae32 100644
--- a/ppapi/generators/idl_ast.py
+++ b/ppapi/generators/idl_ast.py
@@ -78,7 +78,6 @@ class IDLFileTypeResolver(IDLVisitor):
if node.IsA('File'):
node.SetProperty('FILE', node)
-
# If this node has a TYPEREF, resolve it to a version list
typeref = node.property_node.GetPropertyLocal('TYPEREF')
if typeref:
@@ -90,6 +89,14 @@ class IDLFileTypeResolver(IDLVisitor):
return filenode
+class IDLReleaseResolver(IDLVisitor):
+ def VisitFilter(self, node, data):
+ return node.IsA('AST','File', 'Label')
+
+ def Depart(self, node, data, childdata):
+ if node.IsA('Label'):
+ return set([child.name for child in GetListOf('LabelItem')])
+ return childdata
class IDLVersionMapDefault(IDLVersionMap):
def GetRelease(self, version):
@@ -116,15 +123,6 @@ class IDLAst(IDLNode):
builtin = filenode
break
-# if not builtin:
-# builtin = IDLFile('pp_stdint.idl', [])
-# extranodes = [builtin]
-
-# for name in BuiltIn:
-# nameattr = IDLAttribute('NAME', name)
-# typenode = IDLNode('Type', 'BuiltIn', 1, 0, [nameattr])
-# builtin.AddChild(typenode)
-
IDLNode.__init__(self, 'AST', 'BuiltIn', 1, 0, extranodes + children)
self.SetProperty('LABEL', IDLVersionMapDefault())
self.Resolve()
@@ -135,6 +133,13 @@ class IDLAst(IDLNode):
IDLNamespaceLabelResolver().Visit(self, self.namespace)
IDLFileTypeResolver().Visit(self, None)
+ # Build an ordered list of all releases
+ self.releases = set()
+ for filenode in self.GetListOf('File'):
+ vmap = filenode.GetProperty('LABEL')
+ self.releases |= set(vmap.releases)
+ self.releases = sorted(self.releases)
+
def SetTypeInfo(self, name, properties):
node = self.namespace[name]
for prop in properties: