summaryrefslogtreecommitdiffstats
path: root/ppapi/generators
diff options
context:
space:
mode:
authornoelallen@chromium.org <noelallen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-28 23:48:44 +0000
committernoelallen@chromium.org <noelallen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-28 23:48:44 +0000
commit3121bc10e2dd666aa23d0a9921b170cff1e65aeb (patch)
treec36760fc823698bb5cf939d9d5486f6f0b77e05f /ppapi/generators
parent9b917fdc65319d6d83a5185510cda82e3aaf1c74 (diff)
downloadchromium_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-xppapi/generators/idl_c_proto.py27
-rwxr-xr-xppapi/generators/idl_node.py13
-rwxr-xr-xppapi/generators/idl_parser.py1
-rwxr-xr-xppapi/generators/idl_thunk.py1
-rw-r--r--ppapi/generators/test_version/versions.idl13
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