summaryrefslogtreecommitdiffstats
path: root/Tools/bgen
diff options
context:
space:
mode:
authorJack Jansen <jack.jansen@cwi.nl>2005-07-05 10:00:57 (GMT)
committerJack Jansen <jack.jansen@cwi.nl>2005-07-05 10:00:57 (GMT)
commit0257424a2ac6ec89732fb90155657dfd8382b686 (patch)
treed5dace473c1e841cadd68088c2247aad8c86167d /Tools/bgen
parent82cb9a235de45074d578d46bbf6680e726b13efd (diff)
downloadcpython-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.py37
-rw-r--r--Tools/bgen/bgen/bgenHeapBuffer.py6
-rw-r--r--Tools/bgen/bgen/bgenType.py13
-rw-r--r--Tools/bgen/bgen/bgenVariable.py7
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)