Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit a6af76c

Browse files
committed
Factored out the code that creates argument lists and formats for PyArg_Parse
and Py_BuildValue.
1 parent 7b8f0a1 commit a6af76c

1 file changed

Lines changed: 26 additions & 19 deletions

File tree

Tools/bgen/bgen/bgenGenerator.py

Lines changed: 26 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -187,9 +187,21 @@ def declarations(self):
187187
arg.declare()
188188

189189
def getargs(self):
190+
sep = ",\n" + ' '*len("if (!PyArg_ParseTuple(")
191+
fmt, lst = self.getargsFormatArgs(sep)
192+
Output("if (!PyArg_ParseTuple(_args, \"%s\"%s))", fmt, lst)
193+
IndentLevel()
194+
Output("return NULL;")
195+
DedentLevel()
196+
for arg in self.argumentList:
197+
if arg.flags == SelfMode:
198+
continue
199+
if arg.mode in (InMode, InOutMode):
200+
arg.getargsCheck()
201+
202+
def getargsFormatArgs(self, sep):
190203
fmt = ""
191204
lst = ""
192-
sep = ",\n" + ' '*len("if (!PyArg_ParseTuple(")
193205
for arg in self.argumentList:
194206
if arg.flags == SelfMode:
195207
continue
@@ -199,15 +211,7 @@ def getargs(self):
199211
args = arg.getargsArgs()
200212
if args:
201213
lst = lst + sep + args
202-
Output("if (!PyArg_ParseTuple(_args, \"%s\"%s))", fmt, lst)
203-
IndentLevel()
204-
Output("return NULL;")
205-
DedentLevel()
206-
for arg in self.argumentList:
207-
if arg.flags == SelfMode:
208-
continue
209-
if arg.mode in (InMode, InOutMode):
210-
arg.getargsCheck()
214+
return fmt, lst
211215

212216
def precheck(self):
213217
pass
@@ -236,16 +240,8 @@ def checkit(self):
236240
arg.errorCheck()
237241

238242
def returnvalue(self):
239-
fmt = ""
240-
lst = ""
241243
sep = ",\n" + ' '*len("return Py_BuildValue(")
242-
for arg in self.argumentList:
243-
if not arg: continue
244-
if arg.flags == ErrorMode: continue
245-
if arg.mode in (OutMode, InOutMode):
246-
arg.mkvaluePreCheck()
247-
fmt = fmt + arg.mkvalueFormat()
248-
lst = lst + sep + arg.mkvalueArgs()
244+
fmt, lst = self.mkvalueFormatArgs(sep)
249245
if fmt == "":
250246
Output("Py_INCREF(Py_None);")
251247
Output("_res = Py_None;");
@@ -258,6 +254,17 @@ def returnvalue(self):
258254
arg.cleanup()
259255
Output("return _res;")
260256

257+
def mkvalueFormatArgs(self, sep):
258+
fmt = ""
259+
lst = ""
260+
for arg in self.argumentList:
261+
if not arg: continue
262+
if arg.flags == ErrorMode: continue
263+
if arg.mode in (OutMode, InOutMode):
264+
arg.mkvaluePreCheck()
265+
fmt = fmt + arg.mkvalueFormat()
266+
lst = lst + sep + arg.mkvalueArgs()
267+
return fmt, lst
261268

262269
class MethodGenerator(FunctionGenerator):
263270

0 commit comments

Comments
 (0)