diff options
author | jvoung@google.com <jvoung@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-11-30 17:59:14 +0000 |
---|---|---|
committer | jvoung@google.com <jvoung@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-11-30 17:59:14 +0000 |
commit | 2978339a797536e720a18ebdde2fd7f1b4e12c34 (patch) | |
tree | 0cdc35c2663cd0e6c1715fbb184fe3e623b0e98b /ppapi/generators/idl_c_proto.py | |
parent | 8dc2405798db63428fa62d2affb1cf640783c388 (diff) | |
download | chromium_src-2978339a797536e720a18ebdde2fd7f1b4e12c34.zip chromium_src-2978339a797536e720a18ebdde2fd7f1b4e12c34.tar.gz chromium_src-2978339a797536e720a18ebdde2fd7f1b4e12c34.tar.bz2 |
Pnacl ppapi shim generator (from IDL), based on Noel's first cut.
BUG= http://code.google.com/p/nativeclient/issues/detail?id=2413
TEST= python idl_gen_pnacl.py --test --wnone
Also
** ./generator.py doesn't change
** ./generator.py --wnone --pnacl --pnaclshim=pnacl_shim.c
generates a shim that compiles and works in the NaCl repo.
Review URL: http://codereview.chromium.org/8568025
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@112244 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ppapi/generators/idl_c_proto.py')
-rw-r--r-- | ppapi/generators/idl_c_proto.py | 53 |
1 files changed, 38 insertions, 15 deletions
diff --git a/ppapi/generators/idl_c_proto.py b/ppapi/generators/idl_c_proto.py index 584cfaa..861f86f 100644 --- a/ppapi/generators/idl_c_proto.py +++ b/ppapi/generators/idl_c_proto.py @@ -342,7 +342,7 @@ class CGen(object): # rtype - The store or return type of the object. # name - The name of the object. # arrays - A list of array dimensions as [] or [<fixed_num>]. - # args - None of not a function, otherwise a list of parameters. + # args - None if not a function, otherwise a list of parameters. # def GetComponents(self, node, release, mode): self.LogEnter('GetComponents mode %s for %s %s' % (mode, node, release)) @@ -375,17 +375,23 @@ class CGen(object): return (rtype, name, arrayspec, callspec) - def Compose(self, rtype, name, arrayspec, callspec, prefix, func_as_ptr): + def Compose(self, rtype, name, arrayspec, callspec, prefix, func_as_ptr, + ptr_prefix, include_name): self.LogEnter('Compose: %s %s' % (rtype, name)) arrayspec = ''.join(arrayspec) - name = '%s%s%s' % (prefix, name, arrayspec) + if not include_name: + name = prefix + arrayspec + else: + name = prefix + name + arrayspec if callspec is None: out = '%s %s' % (rtype, name) else: params = [] for ptype, pname, parray, pspec in callspec: - params.append(self.Compose(ptype, pname, parray, pspec, '', True)) - if func_as_ptr: name = '(*%s)' % name + params.append(self.Compose(ptype, pname, parray, pspec, '', True, + ptr_prefix='', include_name=True)) + if func_as_ptr: + name = '(%s*%s)' % (ptr_prefix, name) out = '%s %s(%s)' % (rtype, name, ', '.join(params)) self.LogExit('Exit Compose: %s' % out) return out @@ -396,11 +402,18 @@ class CGen(object): # Returns the 'C' style signature of the object # prefix - A prefix for the object's name # func_as_ptr - Formats a function as a function pointer + # ptr_prefix - A prefix that goes before the "*" for a function pointer + # include_name - If true, include member name in the signature. + # If false, leave it out. In any case, prefix and ptr_prefix + # are always included. # - def GetSignature(self, node, release, mode, prefix='', func_as_ptr=True): - self.LogEnter('GetSignature %s %s as func=%s' % (node, mode, func_as_ptr)) + def GetSignature(self, node, release, mode, prefix='', func_as_ptr=True, + ptr_prefix='', include_name=True): + self.LogEnter('GetSignature %s %s as func=%s' % + (node, mode, func_as_ptr)) rtype, name, arrayspec, callspec = self.GetComponents(node, release, mode) - out = self.Compose(rtype, name, arrayspec, callspec, prefix, func_as_ptr) + out = self.Compose(rtype, name, arrayspec, callspec, prefix, + func_as_ptr, ptr_prefix, include_name) self.LogExit('Exit GetSignature: %s' % out) return out @@ -451,12 +464,22 @@ class CGen(object): self.LogExit('Exit DefineMember') return out - def DefineStructInternals(self, node, release, suffix='', comment=True): + def GetStructName(self, node, release, include_version=False): + suffix = '' + if include_version: + ver_num = node.GetVersion(release) + suffix = ('_%s' % ver_num).replace('.', '_') + return node.GetName() + suffix + + def DefineStructInternals(self, node, release, + include_version=False, comment=True): out = '' if node.GetProperty('union'): - out += 'union %s%s {\n' % (node.GetName(), suffix) + out += 'union %s {\n' % ( + self.GetStructName(node, release, include_version)) else: - out += 'struct %s%s {\n' % (node.GetName(), suffix) + out += 'struct %s {\n' % ( + self.GetStructName(node, release, include_version)) # Generate Member Functions members = [] @@ -476,13 +499,13 @@ class CGen(object): build_list = node.GetUniqueReleases(releases) # Build the most recent one with comments - out = self.DefineStructInternals(node, build_list[-1], comment=True) + out = self.DefineStructInternals(node, build_list[-1], + include_version=False, 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, + out += '\n' + self.DefineStructInternals(node, rel, + include_version=True, comment=False) self.LogExit('Exit DefineStruct') |