diff options
author | noelallen@google.com <noelallen@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-08-24 23:03:06 +0000 |
---|---|---|
committer | noelallen@google.com <noelallen@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-08-24 23:03:06 +0000 |
commit | f7314730aae52985ecc4a723289b6a7eade82cd1 (patch) | |
tree | 72a6a3c7f155a66527ee8a455b3bae919a384ec1 /ppapi/generators/idl_ast.py | |
parent | d995780c28c131a0ea30daa4d2e991746312cc19 (diff) | |
download | chromium_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.py | 25 |
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: |