diff options
author | noelallen@chromium.org <noelallen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-28 23:48:44 +0000 |
---|---|---|
committer | noelallen@chromium.org <noelallen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-28 23:48:44 +0000 |
commit | 3121bc10e2dd666aa23d0a9921b170cff1e65aeb (patch) | |
tree | c36760fc823698bb5cf939d9d5486f6f0b77e05f /ppapi/generators | |
parent | 9b917fdc65319d6d83a5185510cda82e3aaf1c74 (diff) | |
download | chromium_src-3121bc10e2dd666aa23d0a9921b170cff1e65aeb.zip chromium_src-3121bc10e2dd666aa23d0a9921b170cff1e65aeb.tar.gz chromium_src-3121bc10e2dd666aa23d0a9921b170cff1e65aeb.tar.bz2 |
Version support for structs, enum, typedef
Add missing support for name mangling of versions structures, enums,and typedefs.
NOTRY=true
BUG=157017
R=sehr@chromium.org
sehr for generator change.
yzshen please test with your CL to verify fix.
Review URL: https://chromiumcodereview.appspot.com/17924002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@209233 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ppapi/generators')
-rwxr-xr-x | ppapi/generators/idl_c_proto.py | 27 | ||||
-rwxr-xr-x | ppapi/generators/idl_node.py | 13 | ||||
-rwxr-xr-x | ppapi/generators/idl_parser.py | 1 | ||||
-rwxr-xr-x | ppapi/generators/idl_thunk.py | 1 | ||||
-rw-r--r-- | ppapi/generators/test_version/versions.idl | 13 |
5 files changed, 43 insertions, 12 deletions
diff --git a/ppapi/generators/idl_c_proto.py b/ppapi/generators/idl_c_proto.py index fff3e65..2989a09 100755 --- a/ppapi/generators/idl_c_proto.py +++ b/ppapi/generators/idl_c_proto.py @@ -276,11 +276,16 @@ class CGen(object): # If it's an enum, or typedef then return the Enum's name elif typeref.IsA('Enum', 'Typedef'): + if not typeref.LastRelease(release): + first = node.first_release[release] + ver = '_' + node.GetVersion(first).replace('.','_') + else: + ver = '' # The enum may have skipped having a typedef, we need prefix with 'enum'. if typeref.GetProperty('notypedef'): - name = 'enum %s%s' % (prefix, typeref.GetName()) + name = 'enum %s%s%s' % (prefix, typeref.GetName(), ver) else: - name = '%s%s' % (prefix, typeref.GetName()) + name = '%s%s%s' % (prefix, typeref.GetName(), ver) else: raise RuntimeError('Getting name of non-type %s.' % node) @@ -386,6 +391,8 @@ class CGen(object): if callnode: callspec = [] for param in callnode.GetListOf('Param'): + if not param.IsRelease(release): + continue mode = self.GetParamMode(param) ptype, pname, parray, pspec = self.GetComponents(param, release, mode) callspec.append((ptype, pname, parray, pspec)) @@ -460,13 +467,15 @@ class CGen(object): __pychecker__ = 'unusednames=comment' build_list = node.GetUniqueReleases(releases) - # TODO(noelallen) : Bug 157017 finish multiversion support - if len(build_list) != 1: - node.Error('Can not support multiple versions of node: %s' % build_list) - assert len(build_list) == 1 - - out = 'typedef %s;\n' % self.GetSignature(node, build_list[0], 'return', - prefix, True) + out = 'typedef %s;\n' % self.GetSignature(node, build_list[-1], 'return', + prefix, True, + include_version=False) + # Version mangle any other versions + for index, rel in enumerate(build_list[:-1]): + out += '\n' + out += 'typedef %s;\n' % self.GetSignature(node, rel, 'return', + prefix, True, + include_version=True) self.Log('DefineTypedef: %s' % out) return out diff --git a/ppapi/generators/idl_node.py b/ppapi/generators/idl_node.py index ec40ffe..a6b1c88 100755 --- a/ppapi/generators/idl_node.py +++ b/ppapi/generators/idl_node.py @@ -70,6 +70,7 @@ class IDLNode(IDLRelease): self.typelist = None self.parent = None self.property_node = IDLPropertyNode() + self.unique_releases = None # A list of unique releases for this node self.releases = None @@ -297,9 +298,17 @@ class IDLNode(IDLRelease): remapped = self.first_release[rel] if not remapped: continue out |= set([remapped]) - out = sorted(out) - return out + # Cache the most recent set of unique_releases + self.unique_releases = sorted(out) + return self.unique_releases + + def LastRelease(self, release): + # Get the most recent release from the most recently generated set of + # cached unique releases. + if self.unique_releases and self.unique_releases[-1] > release: + return False + return True def GetRelease(self, version): filenode = self.GetProperty('FILE') diff --git a/ppapi/generators/idl_parser.py b/ppapi/generators/idl_parser.py index 95b0ddb..40751e3 100755 --- a/ppapi/generators/idl_parser.py +++ b/ppapi/generators/idl_parser.py @@ -1162,6 +1162,7 @@ def TestVersionFiles(filter): ast = ParseFiles(testnames) errs = FindVersionError(ast.releases, ast) + errs += ast.errors if errs: ErrOut.Log("Failed version test.") diff --git a/ppapi/generators/idl_thunk.py b/ppapi/generators/idl_thunk.py index 1bb0de0..023335c 100755 --- a/ppapi/generators/idl_thunk.py +++ b/ppapi/generators/idl_thunk.py @@ -502,7 +502,6 @@ class TGen(GeneratorByFile): build_list = filter(lambda r: child.InReleases([r]), build_list) if len(build_list) == 0: continue - assert(len(build_list) == 1) release = build_list[-1] include_version = not _IsNewestMember(child, members, releases) member = DefineMember(filenode, node, child, release, include_version, diff --git a/ppapi/generators/test_version/versions.idl b/ppapi/generators/test_version/versions.idl index ce39f2a..4d1a42f 100644 --- a/ppapi/generators/test_version/versions.idl +++ b/ppapi/generators/test_version/versions.idl @@ -51,3 +51,16 @@ struct iX { [version=1.0] int32_t y; }; + +/** + * Typedef to generate M13-M14, M15 + */ +typedef int32_t callback_t([in] int32_t x, [in, version=2.0] int32_t y); + +/*REL: M13 M14 M15 */ +interface iFooX { + /** + * Comment for function Bar + */ + int32_t Bar([in, version=1.0] callback_t cb); +};
\ No newline at end of file |