diff options
Diffstat (limited to 'ppapi/generators')
-rw-r--r-- | ppapi/generators/idl_c_header.py | 17 | ||||
-rw-r--r-- | ppapi/generators/idl_c_proto.py | 30 | ||||
-rw-r--r-- | ppapi/generators/idl_namespace.py | 4 | ||||
-rw-r--r-- | ppapi/generators/idl_node.py | 11 | ||||
-rw-r--r-- | ppapi/generators/test_cgen_range/versions.h | 40 | ||||
-rw-r--r-- | ppapi/generators/test_cgen_range/versions.idl | 22 |
6 files changed, 93 insertions, 31 deletions
diff --git a/ppapi/generators/idl_c_header.py b/ppapi/generators/idl_c_header.py index edec95f..00933b5 100644 --- a/ppapi/generators/idl_c_header.py +++ b/ppapi/generators/idl_c_header.py @@ -167,15 +167,14 @@ class HGen(GeneratorByFile): macro = node.GetProperty('macro') if not macro: macro = self.GetMacro(node) - label = node.GetLabel() - if label: - for vers in label.versions: - strver = str(vers).replace('.', '_') - idefs += self.GetDefine('%s_%s' % (macro, strver), - '"%s;%s"' % (name, vers)) - if label.GetRelease(vers) == releases[-1]: - idefs += self.GetDefine(macro, '%s_%s' % (macro, strver)) - idefs += '\n' + + unique = node.GetUniqueReleases(releases) + for rel in unique: + version = node.GetVersion(rel) + strver = str(version).replace('.', '_') + idefs += self.GetDefine('%s_%s' % (macro, strver), + '"%s;%s"' % (name, version)) + idefs += self.GetDefine(macro, '%s_%s' % (macro, strver)) + '\n' out.Write(idefs) # Generate the @file comment diff --git a/ppapi/generators/idl_c_proto.py b/ppapi/generators/idl_c_proto.py index 05937e4..1ea8e03 100644 --- a/ppapi/generators/idl_c_proto.py +++ b/ppapi/generators/idl_c_proto.py @@ -398,27 +398,43 @@ class CGen(object): self.LogExit('Exit DefineMember') return out - # Define a Struct. - def DefineStruct(self, node, releases, prefix='', comment=False): + def DefineStructInternals(self, node, release, suffix='', comment=True): out = '' - - self.LogEnter('DefineStruct %s' % node) if node.GetProperty('union'): - out += 'union %s%s {\n' % (prefix, node.GetName()) + out += 'union %s%s {\n' % (node.GetName(), suffix) else: - out += 'struct %s%s {\n' % (prefix, node.GetName()) + out += 'struct %s%s {\n' % (node.GetName(), suffix) # Generate Member Functions members = [] for child in node.GetListOf('Member'): - member = self.Define(child, releases, tabs=1, comment=comment) + member = self.Define(child, [release], tabs=1, comment=comment) if not member: continue members.append(member) out += '%s\n};\n' % '\n'.join(members) + return out + + + def DefineStruct(self, node, releases, prefix='', comment=False): + self.LogEnter('DefineStruct %s' % node) + out = '' + build_list = node.GetUniqueReleases(releases) + + # Build the most recent one with comments + out = self.DefineStructInternals(node, build_list[-1], comment=True) + + # Build the rest without comments and with the version number appended + for rel in build_list[0:-1]: + ver_num = node.GetVersion(rel) + ver = ("_%s" % ver_num).replace('.', '_') + out += '\n' + self.DefineStructInternals(node, rel, suffix=ver, + comment=False) + self.LogExit('Exit DefineStruct') return out + # # Copyright and Comment # diff --git a/ppapi/generators/idl_namespace.py b/ppapi/generators/idl_namespace.py index 98e86258..ee9c151 100644 --- a/ppapi/generators/idl_namespace.py +++ b/ppapi/generators/idl_namespace.py @@ -119,6 +119,10 @@ class IDLVersionMap(object): return self.version_to_release[version] def GetVersion(self, release): + if release > self.releases[-1]: + release = self.releases[-1] + elif release < self.releases[0]: + release = self.releases[0] return self.release_to_version[release] diff --git a/ppapi/generators/idl_node.py b/ppapi/generators/idl_node.py index b8f71eb..b146ba3 100644 --- a/ppapi/generators/idl_node.py +++ b/ppapi/generators/idl_node.py @@ -273,6 +273,17 @@ class IDLNode(IDLVersion): if not label: return None return label.GetVersion(release) + def GetUniqueReleases(self, releases): + # Given a list of release, return a subset of releases that change. + last_hash = None + build_list = [] + for rel in releases: + cur_hash = self.GetHash(rel) + if last_hash != cur_hash: + build_list.append(rel) + last_hash = cur_hash + return build_list + def SetProperty(self, name, val): self.property_node.SetProperty(name, val) diff --git a/ppapi/generators/test_cgen_range/versions.h b/ppapi/generators/test_cgen_range/versions.h index 819ec0c..92b5324 100644 --- a/ppapi/generators/test_cgen_range/versions.h +++ b/ppapi/generators/test_cgen_range/versions.h @@ -3,13 +3,18 @@ * found in the LICENSE file. */ -/* From test_cgen_range/versions.idl modified Wed Aug 24 10:35:01 2011. */ +/* From test_cgen_range/versions.idl modified Wed Aug 24 19:49:19 2011. */ #ifndef PPAPI_C_TEST_CGEN_RANGE_VERSIONS_H_ #define PPAPI_C_TEST_CGEN_RANGE_VERSIONS_H_ #include "ppapi/c/pp_macros.h" +#define BAR_INTERFACE_0_0 "Bar;0.0" +#define BAR_INTERFACE_1_0 "Bar;1.0" +#define BAR_INTERFACE_2_0 "Bar;2.0" +#define BAR_INTERFACE BAR_INTERFACE_2_0 + /** * @file * File Comment. */ @@ -19,20 +24,39 @@ * @addtogroup Structs * @{ */ -/* Bogus Struct */ -struct PP_Size { +/* Bogus Struct Foo */ +struct Foo { /** - * Comment for function + * Comment for function x,y,z */ + int32_t (*Foo)(int32_t x, int32_t y, int32_t z); +}; +struct Foo_0_0 { int32_t (*Foo)(int32_t x); - /** - * Comment for function - */ +}; +struct Foo_1_0 { int32_t (*Foo)(int32_t x, int32_t y); +}; +/** + * @} + */ + +/** + * @addtogroup Interfaces + * @{ + */ +/* Inherit revisions thanks to Foo */ +struct Bar { /** * Comment for function */ - int32_t (*Foo)(int32_t x, int32_t y, int32_t z); + int32_t (*UseFoo)( struct Foo* val); +}; +struct Bar_0_0 { + int32_t (*UseFoo)( struct Foo* val); +}; +struct Bar_1_0 { + int32_t (*UseFoo)( struct Foo* val); }; /** * @} diff --git a/ppapi/generators/test_cgen_range/versions.idl b/ppapi/generators/test_cgen_range/versions.idl index f4fe232..11b4de0 100644 --- a/ppapi/generators/test_cgen_range/versions.idl +++ b/ppapi/generators/test_cgen_range/versions.idl @@ -11,26 +11,34 @@ label Chrome { M15 = 2.0 }; -[version=0.0] describe { - /** Standard Ints. */ int32_t; }; -/* Bogus Struct */ +/* Bogus Struct Foo */ [version=0.0] -struct PP_Size { +struct Foo { /** - * Comment for function + * Comment for function x */ [version=0.0] int32_t Foo(int32_t x); /** - * Comment for function + * Comment for function x,y */ [version=1.0] int32_t Foo(int32_t x, int32_t y); /** - * Comment for function + * Comment for function x,y,z */ [version=2.0] int32_t Foo(int32_t x, int32_t y, int32_t z); }; + + +/* Inherit revisions thanks to Foo */ +[version=0.0] +interface Bar { + /** + * Comment for function + */ + int32_t UseFoo(Foo val); +}; |