mirror of
https://github.com/python/cpython.git
synced 2025-08-04 17:08:35 +00:00
the usual
This commit is contained in:
parent
fc8a01fc5a
commit
227a4232e6
20 changed files with 83 additions and 27 deletions
|
@ -53,21 +53,22 @@ class FixedInputOutputBufferType(InputOnlyType):
|
|||
|
||||
def declareSize(self, name):
|
||||
Output("%s %s__len__;", self.sizetype, name)
|
||||
Output("int %s__in_len__;", name)
|
||||
|
||||
def getargsFormat(self):
|
||||
# XXX This only works if the size is int-sized!!!
|
||||
return "s#"
|
||||
|
||||
def getargsArgs(self, name):
|
||||
return "&%s__in__, &%s__len__" % (name, name)
|
||||
return "&%s__in__, &%s__in_len__" % (name, name)
|
||||
|
||||
def getargsCheck(self, name):
|
||||
Output("if (%s__len__ != %s)", name, self.size)
|
||||
Output("if (%s__in_len__ != %s)", name, self.size)
|
||||
OutLbrace()
|
||||
Output('PyErr_SetString(PyExc_TypeError, "buffer length should be %s");',
|
||||
self.size)
|
||||
Output("goto %s__error__;", name)
|
||||
OutRbrace()
|
||||
Output("%s__len__ = %s__in_len__;", name, name)
|
||||
|
||||
def passOutput(self, name):
|
||||
return "%s__in__, %s__out__" % (name, name)
|
||||
|
@ -76,7 +77,7 @@ class FixedInputOutputBufferType(InputOnlyType):
|
|||
return "s#"
|
||||
|
||||
def mkvalueArgs(self, name):
|
||||
return "%s__out__, %s" % (name, self.size)
|
||||
return "%s__out__, (int)%s" % (name, self.size)
|
||||
|
||||
def cleanup(self, name):
|
||||
DedentLevel()
|
||||
|
@ -138,7 +139,7 @@ class VarInputBufferType(FixedInputBufferType):
|
|||
FixedInputBufferType.__init__(self, "0", datatype, sizetype, sizeformat)
|
||||
|
||||
def getargsCheck(self, name):
|
||||
pass
|
||||
Output("%s__len__ = %s__in_len__;", name, name)
|
||||
|
||||
def passInput(self, name):
|
||||
return "%s__in__, %s__len__" % (name, name)
|
||||
|
@ -161,11 +162,14 @@ class StructInputOutputBufferType(FixedInputOutputBufferType):
|
|||
def declareInputBuffer(self, name):
|
||||
Output("%s *%s__in__;", self.type, name)
|
||||
|
||||
def declareSize(self, name):
|
||||
Output("int %s__in_len__;", name)
|
||||
|
||||
def declareOutputBuffer(self, name):
|
||||
Output("%s %s__out__;", self.type, name)
|
||||
|
||||
def getargsArgs(self, name):
|
||||
return "(char **)&%s__in__, &%s__len__" % (name, name)
|
||||
return "(char **)&%s__in__, &%s__in_len__" % (name, name)
|
||||
|
||||
def passInput(self, name):
|
||||
return "%s__in__" % name
|
||||
|
@ -174,7 +178,7 @@ class StructInputOutputBufferType(FixedInputOutputBufferType):
|
|||
return "%s__in__, &%s__out__" % (name, name)
|
||||
|
||||
def mkvalueArgs(self, name):
|
||||
return "(char *)&%s__out__, %s" % (name, self.size)
|
||||
return "(char *)&%s__out__, (int)%s" % (name, self.size)
|
||||
|
||||
|
||||
class StructCombinedInputOutputBufferType(StructInputOutputBufferType):
|
||||
|
@ -211,6 +215,9 @@ class StructOutputBufferType(OutputOnlyBufferMixIn, StructInputOutputBufferType)
|
|||
|
||||
Instantiate with the struct type as parameter.
|
||||
"""
|
||||
|
||||
def declareSize(self, name):
|
||||
pass
|
||||
|
||||
def passOutput(self, name):
|
||||
return "&%s__out__" % name
|
||||
|
@ -222,6 +229,9 @@ class ArrayOutputBufferType(OutputOnlyBufferMixIn, StructInputOutputBufferType):
|
|||
|
||||
Instantiate with the struct type as parameter.
|
||||
"""
|
||||
|
||||
def declareSize(self, name):
|
||||
pass
|
||||
|
||||
def passOutput(self, name):
|
||||
return "%s__out__" % name
|
||||
|
|
|
@ -20,17 +20,19 @@ class HeapInputOutputBufferType(FixedInputOutputBufferType):
|
|||
Output("%s *%s__out__;", self.datatype, name)
|
||||
|
||||
def getargsCheck(self, name):
|
||||
Output("if ((%s__out__ = malloc(%s__len__)) == NULL)", name, name)
|
||||
Output("if ((%s__out__ = malloc(%s__in_len__)) == NULL)", name, name)
|
||||
OutLbrace()
|
||||
Output('PyErr_NoMemory();')
|
||||
Output("goto %s__error__;", name)
|
||||
OutRbrace()
|
||||
Output("%s__len__ = %s__in_len__;", name, name)
|
||||
|
||||
def passOutput(self, name):
|
||||
return "%s__in__, %s__out__, %s__len__" % (name, name, name)
|
||||
return "%s__in__, %s__out__, (%s)%s__len__" % \
|
||||
(name, name, self.sizetype, name)
|
||||
|
||||
def mkvalueArgs(self, name):
|
||||
return "%s__out__, %s__len__" % (name, name)
|
||||
return "%s__out__, (int)%s__len__" % (name, name)
|
||||
|
||||
def cleanup(self, name):
|
||||
Output("free(%s__out__);", name)
|
||||
|
@ -75,10 +77,10 @@ class HeapOutputBufferType(OutputOnlyMixIn, HeapInputOutputBufferType):
|
|||
pass
|
||||
|
||||
def getargsFormat(self):
|
||||
return self.sizeformat
|
||||
return "i"
|
||||
|
||||
def getargsArgs(self, name):
|
||||
return "&%s__len__" % name
|
||||
return "&%s__in_len__" % name
|
||||
|
||||
def passOutput(self, name):
|
||||
return "%s__out__, %s__len__" % (name, name)
|
||||
|
|
|
@ -29,7 +29,7 @@ class VarStackOutputBufferType(StackOutputBufferType):
|
|||
return "%s__out__, &%s__len__" % (name, name)
|
||||
|
||||
def mkvalueArgs(self, name):
|
||||
return "%s__out__, %s__len__" % (name, name)
|
||||
return "%s__out__, (int)%s__len__" % (name, name)
|
||||
|
||||
|
||||
class VarVarStackOutputBufferType(VarStackOutputBufferType):
|
||||
|
@ -56,4 +56,4 @@ class ReturnVarStackOutputBufferType(VarStackOutputBufferType):
|
|||
return "%s__out__, %s__len__" % (name, name)
|
||||
|
||||
def mkvalueArgs(self, name):
|
||||
return "%s__out__, _rv" % name
|
||||
return "%s__out__, (int)_rv" % name
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue