diff options
author | Jack Jansen <jack.jansen@cwi.nl> | 2005-07-05 10:00:57 (GMT) |
---|---|---|
committer | Jack Jansen <jack.jansen@cwi.nl> | 2005-07-05 10:00:57 (GMT) |
commit | 0257424a2ac6ec89732fb90155657dfd8382b686 (patch) | |
tree | d5dace473c1e841cadd68088c2247aad8c86167d /Tools/bgen | |
parent | 82cb9a235de45074d578d46bbf6680e726b13efd (diff) | |
download | cpython-0257424a2ac6ec89732fb90155657dfd8382b686.zip cpython-0257424a2ac6ec89732fb90155657dfd8382b686.tar.gz cpython-0257424a2ac6ec89732fb90155657dfd8382b686.tar.bz2 |
Allow for (optional) const declaration.
Diffstat (limited to 'Tools/bgen')
-rw-r--r-- | Tools/bgen/bgen/bgenBuffer.py | 37 | ||||
-rw-r--r-- | Tools/bgen/bgen/bgenHeapBuffer.py | 6 | ||||
-rw-r--r-- | Tools/bgen/bgen/bgenType.py | 13 | ||||
-rw-r--r-- | Tools/bgen/bgen/bgenVariable.py | 7 |
4 files changed, 43 insertions, 20 deletions
diff --git a/Tools/bgen/bgen/bgenBuffer.py b/Tools/bgen/bgen/bgenBuffer.py index bc11e64..a07e8f0 100644 --- a/Tools/bgen/bgen/bgenBuffer.py +++ b/Tools/bgen/bgen/bgenBuffer.py @@ -38,19 +38,26 @@ class FixedInputOutputBufferType(InputOnlyType): self.sizeformat = sizeformat or type2format[sizetype] self.label_needed = 0 - def getArgDeclarations(self, name, reference=False): + def getArgDeclarations(self, name, reference=False, constmode=False): if reference: raise RuntimeError, "Cannot pass buffer types by reference" - return (self.getBufferDeclarations(name) + + return (self.getBufferDeclarations(name, constmode) + self.getSizeDeclarations(name)) - def getBufferDeclarations(self, name): - return self.getInputBufferDeclarations(name) + self.getOutputBufferDeclarations(name) + def getBufferDeclarations(self, name, constmode=False): + return self.getInputBufferDeclarations(name, constmode) + \ + self.getOutputBufferDeclarations(name, constmode) - def getInputBufferDeclarations(self, name): - return ["%s *%s__in__" % (self.datatype, name)] + def getInputBufferDeclarations(self, name, constmode=False): + if constmode: + const = "const " + else: + const = "" + return ["%s%s *%s__in__" % (const, self.datatype, name)] - def getOutputBufferDeclarations(self, name): + def getOutputBufferDeclarations(self, name, constmode=False): + if constmode: + raise RuntimeError, "Cannot use const output buffer" return ["%s %s__out__[%s]" % (self.datatype, name, self.size)] def getSizeDeclarations(self, name): @@ -105,13 +112,13 @@ class FixedCombinedInputOutputBufferType(FixedInputOutputBufferType): class InputOnlyBufferMixIn(InputOnlyMixIn): - def getOutputBufferDeclarations(self, name): + def getOutputBufferDeclarations(self, name, constmode=False): return [] class OutputOnlyBufferMixIn(OutputOnlyMixIn): - def getInputBufferDeclarations(self, name): + def getInputBufferDeclarations(self, name, constmode=False): return [] class OptionalInputBufferMixIn: @@ -186,8 +193,12 @@ class StructInputOutputBufferType(FixedInputOutputBufferType): FixedInputOutputBufferType.__init__(self, "sizeof(%s)" % type) self.typeName = self.type = type - def getInputBufferDeclarations(self, name): - return ["%s *%s__in__" % (self.type, name)] + def getInputBufferDeclarations(self, name, constmode=False): + if constmode: + const = "const " + else: + const = "" + return ["%s%s *%s__in__" % (const, self.type, name)] def getSizeDeclarations(self, name): return [] @@ -195,7 +206,9 @@ class StructInputOutputBufferType(FixedInputOutputBufferType): def getAuxDeclarations(self, name): return ["int %s__in_len__" % (name)] - def getOutputBufferDeclarations(self, name): + def getOutputBufferDeclarations(self, name, constmode=False): + if constmode: + raise RuntimeError, "Cannot use const output buffer" return ["%s %s__out__" % (self.type, name)] def getargsArgs(self, name): diff --git a/Tools/bgen/bgen/bgenHeapBuffer.py b/Tools/bgen/bgen/bgenHeapBuffer.py index f9b3daf..c9c4232 100644 --- a/Tools/bgen/bgen/bgenHeapBuffer.py +++ b/Tools/bgen/bgen/bgenHeapBuffer.py @@ -16,7 +16,9 @@ class HeapInputOutputBufferType(FixedInputOutputBufferType): def __init__(self, datatype = 'char', sizetype = 'int', sizeformat = None): FixedInputOutputBufferType.__init__(self, "0", datatype, sizetype, sizeformat) - def getOutputBufferDeclarations(self, name): + def getOutputBufferDeclarations(self, name, constmode=False): + if constmode: + raise RuntimeError, "Cannot use const output buffer" return ["%s *%s__out__" % (self.datatype, name)] def getargsCheck(self, name): @@ -74,7 +76,7 @@ class HeapOutputBufferType(OutputOnlyMixIn, HeapInputOutputBufferType): Call from Python with buffer size. """ - def getInputBufferDeclarations(self, name): + def getInputBufferDeclarations(self, name, constmode=False): return [] def getargsFormat(self): diff --git a/Tools/bgen/bgen/bgenType.py b/Tools/bgen/bgen/bgenType.py index 00dd9d7..3cbd18f 100644 --- a/Tools/bgen/bgen/bgenType.py +++ b/Tools/bgen/bgen/bgenType.py @@ -29,13 +29,18 @@ class Type: for decl in self.getAuxDeclarations(name): Output("%s;", decl) - def getArgDeclarations(self, name, reference=False): + def getArgDeclarations(self, name, reference=False, constmode=False): """Return the main part of the declarations for this type: the items that will be passed as arguments in the C/C++ function call.""" if reference: - return ["%s& %s" % (self.typeName, name)] + ref = "&" else: - return ["%s %s" % (self.typeName, name)] + ref = "" + if constmode: + const = "const " + else: + const = "" + return ["%s%s%s %s" % (const, self.typeName, ref, name)] def getAuxDeclarations(self, name): """Return any auxiliary declarations needed for implementing this @@ -208,7 +213,7 @@ class FakeType(InputOnlyType): self.substitute = substitute self.typeName = None # Don't show this argument in __doc__ string - def getArgDeclarations(self, name, reference=False): + def getArgDeclarations(self, name, reference=False, constmode=False): return [] def getAuxDeclarations(self, name, reference=False): diff --git a/Tools/bgen/bgen/bgenVariable.py b/Tools/bgen/bgen/bgenVariable.py index 7848a4f..ef0e6d2 100644 --- a/Tools/bgen/bgen/bgenVariable.py +++ b/Tools/bgen/bgen/bgenVariable.py @@ -45,9 +45,12 @@ class Variable: elif self.flags != SelfMode: self.type.declare(self.name) - def getArgDeclarations(self): + def getArgDeclarations(self, constmode=False): refmode = (self.flags & RefMode) - return self.type.getArgDeclarations(self.name, reference=refmode) + if constmode: + constmode = (self.flags & ConstMode) + return self.type.getArgDeclarations(self.name, + reference=refmode, constmode=constmode) def getAuxDeclarations(self): return self.type.getAuxDeclarations(self.name) |