From a6af76cbe4e5b188ccdba0b628f9d75771c623c1 Mon Sep 17 00:00:00 2001 From: Jack Jansen Date: Sun, 3 Jul 2005 20:58:08 +0000 Subject: [PATCH] Factored out the code that creates argument lists and formats for PyArg_Parse and Py_BuildValue. --- Tools/bgen/bgen/bgenGenerator.py | 47 ++++++++++++++++++-------------- 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/Tools/bgen/bgen/bgenGenerator.py b/Tools/bgen/bgen/bgenGenerator.py index d77da31700f..7311ddc1f87 100644 --- a/Tools/bgen/bgen/bgenGenerator.py +++ b/Tools/bgen/bgen/bgenGenerator.py @@ -187,18 +187,8 @@ class FunctionGenerator(BaseFunctionGenerator): arg.declare() def getargs(self): - fmt = "" - lst = "" sep = ",\n" + ' '*len("if (!PyArg_ParseTuple(") - for arg in self.argumentList: - if arg.flags == SelfMode: - continue - if arg.mode in (InMode, InOutMode): - arg.getargsPreCheck() - fmt = fmt + arg.getargsFormat() - args = arg.getargsArgs() - if args: - lst = lst + sep + args + fmt, lst = self.getargsFormatArgs(sep) Output("if (!PyArg_ParseTuple(_args, \"%s\"%s))", fmt, lst) IndentLevel() Output("return NULL;") @@ -209,6 +199,20 @@ class FunctionGenerator(BaseFunctionGenerator): if arg.mode in (InMode, InOutMode): arg.getargsCheck() + def getargsFormatArgs(self, sep): + fmt = "" + lst = "" + for arg in self.argumentList: + if arg.flags == SelfMode: + continue + if arg.mode in (InMode, InOutMode): + arg.getargsPreCheck() + fmt = fmt + arg.getargsFormat() + args = arg.getargsArgs() + if args: + lst = lst + sep + args + 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):