summaryrefslogtreecommitdiff
path: root/Tools
diff options
context:
space:
mode:
authorJack Jansen <jack.jansen@cwi.nl>2005-07-03 20:58:08 +0000
committerJack Jansen <jack.jansen@cwi.nl>2005-07-03 20:58:08 +0000
commitcc0df97327f1cd20225b8dc1ca0336b765d96587 (patch)
treecc7de0e2b784232d76d42e2f79ea5aa97a2f91cb /Tools
parent01e898b3ca80ac469820a0045fa2255b3963cf6d (diff)
downloadcpython-cc0df97327f1cd20225b8dc1ca0336b765d96587.tar.gz
Factored out the code that creates argument lists and formats for PyArg_Parse
and Py_BuildValue.
Diffstat (limited to 'Tools')
-rw-r--r--Tools/bgen/bgen/bgenGenerator.py45
1 files changed, 26 insertions, 19 deletions
diff --git a/Tools/bgen/bgen/bgenGenerator.py b/Tools/bgen/bgen/bgenGenerator.py
index d77da31700..7311ddc1f8 100644
--- a/Tools/bgen/bgen/bgenGenerator.py
+++ b/Tools/bgen/bgen/bgenGenerator.py
@@ -187,9 +187,21 @@ class FunctionGenerator(BaseFunctionGenerator):
arg.declare()
def getargs(self):
+ sep = ",\n" + ' '*len("if (!PyArg_ParseTuple(")
+ fmt, lst = self.getargsFormatArgs(sep)
+ Output("if (!PyArg_ParseTuple(_args, \"%s\"%s))", fmt, lst)
+ IndentLevel()
+ Output("return NULL;")
+ DedentLevel()
+ for arg in self.argumentList:
+ if arg.flags == SelfMode:
+ continue
+ if arg.mode in (InMode, InOutMode):
+ arg.getargsCheck()
+
+ def getargsFormatArgs(self, sep):
fmt = ""
lst = ""
- sep = ",\n" + ' '*len("if (!PyArg_ParseTuple(")
for arg in self.argumentList:
if arg.flags == SelfMode:
continue
@@ -199,15 +211,7 @@ class FunctionGenerator(BaseFunctionGenerator):
args = arg.getargsArgs()
if args:
lst = lst + sep + args
- Output("if (!PyArg_ParseTuple(_args, \"%s\"%s))", fmt, lst)
- IndentLevel()
- Output("return NULL;")
- DedentLevel()
- for arg in self.argumentList:
- if arg.flags == SelfMode:
- continue
- if arg.mode in (InMode, InOutMode):
- arg.getargsCheck()
+ return fmt, lst
def precheck(self):
pass
@@ -236,16 +240,8 @@ class FunctionGenerator(BaseFunctionGenerator):
arg.errorCheck()
def returnvalue(self):
- fmt = ""
- lst = ""
sep = ",\n" + ' '*len("return Py_BuildValue(")
- for arg in self.argumentList:
- if not arg: continue
- if arg.flags == ErrorMode: continue
- if arg.mode in (OutMode, InOutMode):
- arg.mkvaluePreCheck()
- fmt = fmt + arg.mkvalueFormat()
- lst = lst + sep + arg.mkvalueArgs()
+ fmt, lst = self.mkvalueFormatArgs(sep)
if fmt == "":
Output("Py_INCREF(Py_None);")
Output("_res = Py_None;");
@@ -258,6 +254,17 @@ class FunctionGenerator(BaseFunctionGenerator):
arg.cleanup()
Output("return _res;")
+ def mkvalueFormatArgs(self, sep):
+ fmt = ""
+ lst = ""
+ for arg in self.argumentList:
+ if not arg: continue
+ if arg.flags == ErrorMode: continue
+ if arg.mode in (OutMode, InOutMode):
+ arg.mkvaluePreCheck()
+ fmt = fmt + arg.mkvalueFormat()
+ lst = lst + sep + arg.mkvalueArgs()
+ return fmt, lst
class MethodGenerator(FunctionGenerator):