summaryrefslogtreecommitdiffstats
path: root/Tools
diff options
context:
space:
mode:
authorJack Jansen <jack.jansen@cwi.nl>2006-02-10 16:17:24 (GMT)
committerJack Jansen <jack.jansen@cwi.nl>2006-02-10 16:17:24 (GMT)
commit03904bf20b1bd161ee2cfdeb87797ed1f877a02b (patch)
treee7c5dadedd22fac3959e672eb7b7e45a420c1100 /Tools
parent2bc23f512dd38717092f4642aa9b3d63705e9836 (diff)
downloadcpython-03904bf20b1bd161ee2cfdeb87797ed1f877a02b.zip
cpython-03904bf20b1bd161ee2cfdeb87797ed1f877a02b.tar.gz
cpython-03904bf20b1bd161ee2cfdeb87797ed1f877a02b.tar.bz2
For overriding C++ methods we also need to know whether a parameter
is an output parameter or not. Added support for that.
Diffstat (limited to 'Tools')
-rw-r--r--Tools/bgen/bgen/bgenBuffer.py40
-rw-r--r--Tools/bgen/bgen/bgenHeapBuffer.py8
-rw-r--r--Tools/bgen/bgen/bgenType.py10
-rw-r--r--Tools/bgen/bgen/bgenVariable.py9
4 files changed, 45 insertions, 22 deletions
diff --git a/Tools/bgen/bgen/bgenBuffer.py b/Tools/bgen/bgen/bgenBuffer.py
index 2d3209e..d7a7cbb 100644
--- a/Tools/bgen/bgen/bgenBuffer.py
+++ b/Tools/bgen/bgen/bgenBuffer.py
@@ -38,15 +38,15 @@ class FixedInputOutputBufferType(InputOnlyType):
self.sizeformat = sizeformat or type2format[sizetype]
self.label_needed = 0
- def getArgDeclarations(self, name, reference=False, constmode=False):
+ def getArgDeclarations(self, name, reference=False, constmode=False, outmode=False):
if reference:
raise RuntimeError, "Cannot pass buffer types by reference"
return (self.getBufferDeclarations(name, constmode) +
- self.getSizeDeclarations(name))
+ self.getSizeDeclarations(name, outmode))
- def getBufferDeclarations(self, name, constmode=False):
+ def getBufferDeclarations(self, name, constmode=False, outmode=False):
return self.getInputBufferDeclarations(name, constmode) + \
- self.getOutputBufferDeclarations(name, constmode)
+ self.getOutputBufferDeclarations(name, constmode, outmode)
def getInputBufferDeclarations(self, name, constmode=False):
if constmode:
@@ -55,13 +55,21 @@ class FixedInputOutputBufferType(InputOnlyType):
const = ""
return ["%s%s *%s__in__" % (const, self.datatype, name)]
- def getOutputBufferDeclarations(self, name, constmode=False):
+ def getOutputBufferDeclarations(self, name, constmode=False, outmode=False):
if constmode:
raise RuntimeError, "Cannot use const output buffer"
- return ["%s %s__out__[%s]" % (self.datatype, name, self.size)]
+ if outmode:
+ out = "*"
+ else:
+ out = ""
+ return ["%s%s %s__out__[%s]" % (self.datatype, out, name, self.size)]
- def getSizeDeclarations(self, name):
- return ["%s %s__len__" %(self.sizetype, name)]
+ def getSizeDeclarations(self, name, outmode=False):
+ if outmode:
+ out = "*"
+ else:
+ out = ""
+ return ["%s%s %s__len__" %(self.sizetype, out, name)]
def getAuxDeclarations(self, name):
return ["int %s__in_len__" %(name)]
@@ -112,7 +120,7 @@ class FixedCombinedInputOutputBufferType(FixedInputOutputBufferType):
class InputOnlyBufferMixIn(InputOnlyMixIn):
- def getOutputBufferDeclarations(self, name, constmode=False):
+ def getOutputBufferDeclarations(self, name, constmode=False, outmode=False):
return []
@@ -200,16 +208,20 @@ class StructInputOutputBufferType(FixedInputOutputBufferType):
const = ""
return ["%s%s *%s__in__" % (const, self.type, name)]
- def getSizeDeclarations(self, name):
+ def getSizeDeclarations(self, name, outmode=False):
return []
def getAuxDeclarations(self, name):
return ["int %s__in_len__" % (name)]
- def getOutputBufferDeclarations(self, name, constmode=False):
+ def getOutputBufferDeclarations(self, name, constmode=False, outmode=False):
if constmode:
raise RuntimeError, "Cannot use const output buffer"
- return ["%s %s__out__" % (self.type, name)]
+ if outmode:
+ out = "*"
+ else:
+ out = ""
+ return ["%s%s %s__out__" % (self.type, out, name)]
def getargsArgs(self, name):
return "(char **)&%s__in__, &%s__in_len__" % (name, name)
@@ -262,7 +274,7 @@ class StructOutputBufferType(OutputOnlyBufferMixIn, StructInputOutputBufferType)
Instantiate with the struct type as parameter.
"""
- def getSizeDeclarations(self, name):
+ def getSizeDeclarations(self, name, outmode=False):
return []
def getAuxDeclarations(self, name):
@@ -279,7 +291,7 @@ class ArrayOutputBufferType(OutputOnlyBufferMixIn, StructInputOutputBufferType):
Instantiate with the struct type as parameter.
"""
- def getSizeDeclarations(self, name):
+ def getSizeDeclarations(self, name, outmode=False):
return []
def getAuxDeclarations(self, name):
diff --git a/Tools/bgen/bgen/bgenHeapBuffer.py b/Tools/bgen/bgen/bgenHeapBuffer.py
index 3d440e6..930bb7e 100644
--- a/Tools/bgen/bgen/bgenHeapBuffer.py
+++ b/Tools/bgen/bgen/bgenHeapBuffer.py
@@ -16,10 +16,14 @@ class HeapInputOutputBufferType(FixedInputOutputBufferType):
def __init__(self, datatype = 'char', sizetype = 'int', sizeformat = None):
FixedInputOutputBufferType.__init__(self, "0", datatype, sizetype, sizeformat)
- def getOutputBufferDeclarations(self, name, constmode=False):
+ def getOutputBufferDeclarations(self, name, constmode=False, outmode=False):
if constmode:
raise RuntimeError, "Cannot use const output buffer"
- return ["%s *%s__out__" % (self.datatype, name)]
+ if outmode:
+ out = "*"
+ else:
+ out = ""
+ return ["%s%s *%s__out__" % (self.datatype, out, name)]
def getargsCheck(self, name):
Output("if ((%s__out__ = malloc(%s__in_len__)) == NULL)", name, name)
diff --git a/Tools/bgen/bgen/bgenType.py b/Tools/bgen/bgen/bgenType.py
index f47d8ce..c988700 100644
--- a/Tools/bgen/bgen/bgenType.py
+++ b/Tools/bgen/bgen/bgenType.py
@@ -29,7 +29,7 @@ class Type:
for decl in self.getAuxDeclarations(name):
Output("%s;", decl)
- def getArgDeclarations(self, name, reference=False, constmode=False):
+ def getArgDeclarations(self, name, reference=False, constmode=False, outmode=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:
@@ -40,7 +40,11 @@ class Type:
const = "const "
else:
const = ""
- return ["%s%s%s %s" % (const, self.typeName, ref, name)]
+ if outmode:
+ out = "*"
+ else:
+ out = ""
+ return ["%s%s%s%s %s" % (const, self.typeName, ref, out, name)]
def getAuxDeclarations(self, name):
"""Return any auxiliary declarations needed for implementing this
@@ -213,7 +217,7 @@ class FakeType(InputOnlyType):
self.substitute = substitute
self.typeName = None # Don't show this argument in __doc__ string
- def getArgDeclarations(self, name, reference=False, constmode=False):
+ def getArgDeclarations(self, name, reference=False, constmode=False, outmode=False):
return []
def getAuxDeclarations(self, name, reference=False):
diff --git a/Tools/bgen/bgen/bgenVariable.py b/Tools/bgen/bgen/bgenVariable.py
index 07679f8..0ad24b3 100644
--- a/Tools/bgen/bgen/bgenVariable.py
+++ b/Tools/bgen/bgen/bgenVariable.py
@@ -45,12 +45,15 @@ class Variable:
elif self.flags != SelfMode:
self.type.declare(self.name)
- def getArgDeclarations(self, constmode=False):
+ def getArgDeclarations(self, fullmodes=False):
refmode = (self.flags & RefMode)
- if constmode:
+ constmode = False
+ outmode = False
+ if fullmodes:
constmode = (self.flags & ConstMode)
+ outmode = (self.flags & OutMode)
return self.type.getArgDeclarations(self.name,
- reference=refmode, constmode=constmode)
+ reference=refmode, constmode=constmode, outmode=outmode)
def getAuxDeclarations(self):
return self.type.getAuxDeclarations(self.name)