]> granicus.if.org Git - python/commitdiff
Factored out the code that creates argument lists and formats for PyArg_Parse
authorJack Jansen <jack.jansen@cwi.nl>
Sun, 3 Jul 2005 20:58:08 +0000 (20:58 +0000)
committerJack Jansen <jack.jansen@cwi.nl>
Sun, 3 Jul 2005 20:58:08 +0000 (20:58 +0000)
and Py_BuildValue.

Tools/bgen/bgen/bgenGenerator.py

index d77da31700fe3e207a93cb3462a033e96bb6fb2c..7311ddc1f878d49d871c95643e2a0c628c80c866 100644 (file)
@@ -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):