]> granicus.if.org Git - python/commitdiff
Revamped type declaration so the basic routines return a list of strings.
authorJack Jansen <jack.jansen@cwi.nl>
Wed, 22 Jun 2005 20:35:23 +0000 (20:35 +0000)
committerJack Jansen <jack.jansen@cwi.nl>
Wed, 22 Jun 2005 20:35:23 +0000 (20:35 +0000)
This allows variables to be declared as formal arguments. The bgenType.declare
method now simply outputs all declarations on separate lines ending
in semicolons.

Tools/bgen/bgen/bgenBuffer.py
Tools/bgen/bgen/bgenHeapBuffer.py
Tools/bgen/bgen/bgenStackBuffer.py
Tools/bgen/bgen/bgenStringBuffer.py
Tools/bgen/bgen/bgenType.py
Tools/bgen/bgen/bgenVariable.py

index ca7e0263410aff1879e51ba71eba019f57f9aac8..f8953158fdafdde418c0afb2905de4d86aab8639 100644 (file)
@@ -38,23 +38,25 @@ class FixedInputOutputBufferType(InputOnlyType):
         self.sizeformat = sizeformat or type2format[sizetype]
         self.label_needed = 0
 
-    def declare(self, name):
-        self.declareBuffer(name)
-        self.declareSize(name)
+    def getDeclarations(self, name, reference=False):
+        if reference:
+            raise RuntimeError, "Cannot pass buffer types by reference"
+        return self.getBufferDeclarations(name) + self.getSizeDeclarations(name)
 
-    def declareBuffer(self, name):
-        self.declareInputBuffer(name)
-        self.declareOutputBuffer(name)
+    def getBufferDeclarations(self, name):
+        return self.getInputBufferDeclarations(name) + self.getOutputBufferDeclarations(name)
 
-    def declareInputBuffer(self, name):
-        Output("%s *%s__in__;", self.datatype, name)
+    def getInputBufferDeclarations(self, name):
+        return ["%s *%s__in__" % (self.datatype, name)]
 
-    def declareOutputBuffer(self, name):
-        Output("%s %s__out__[%s];", self.datatype, name, self.size)
+    def getOutputBufferDeclarations(self, name):
+        return ["%s %s__out__[%s]" % (self.datatype, name, self.size)]
 
-    def declareSize(self, name):
-        Output("%s %s__len__;", self.sizetype, name)
-        Output("int %s__in_len__;", name)
+    def getSizeDeclarations(self, name):
+        return [
+            "%s %s__len__" %(self.sizetype, name),
+            "int %s__in_len__" %(name)
+            ]
 
     def getargsFormat(self):
         return "s#"
@@ -102,14 +104,14 @@ class FixedCombinedInputOutputBufferType(FixedInputOutputBufferType):
 
 class InputOnlyBufferMixIn(InputOnlyMixIn):
 
-    def declareOutputBuffer(self, name):
-        pass
+    def getOutputBufferDeclarations(self, name):
+        return []
 
 
 class OutputOnlyBufferMixIn(OutputOnlyMixIn):
 
-    def declareInputBuffer(self, name):
-        pass
+    def getInputBufferDeclarations(self, name):
+        return []
 
 class OptionalInputBufferMixIn:
 
@@ -183,14 +185,14 @@ class StructInputOutputBufferType(FixedInputOutputBufferType):
         FixedInputOutputBufferType.__init__(self, "sizeof(%s)" % type)
         self.typeName = self.type = type
 
-    def declareInputBuffer(self, name):
-        Output("%s *%s__in__;", self.type, name)
+    def getInputBufferDeclarations(self, name):
+        return ["%s *%s__in__" % (self.type, name)]
 
-    def declareSize(self, name):
-        Output("int %s__in_len__;", name)
+    def getSizeDeclarations(self, name):
+        return ["int %s__in_len__" % (name)]
 
-    def declareOutputBuffer(self, name):
-        Output("%s %s__out__;", self.type, name)
+    def getOutputBufferDeclarations(self, name):
+        return ["%s %s__out__" % (self.type, name)]
 
     def getargsArgs(self, name):
         return "(char **)&%s__in__, &%s__in_len__" % (name, name)
@@ -243,8 +245,8 @@ class StructOutputBufferType(OutputOnlyBufferMixIn, StructInputOutputBufferType)
     Instantiate with the struct type as parameter.
     """
 
-    def declareSize(self, name):
-        pass
+    def getSizeDeclarations(self, name):
+        return []
 
     def passOutput(self, name):
         return "&%s__out__" % name
@@ -257,8 +259,8 @@ class ArrayOutputBufferType(OutputOnlyBufferMixIn, StructInputOutputBufferType):
     Instantiate with the struct type as parameter.
     """
 
-    def declareSize(self, name):
-        pass
+    def getSizeDeclarations(self, name):
+        return []
 
     def passOutput(self, name):
         return "%s__out__" % name
index 64cf2a4f8684b6f70602dc217cfbc9edcf417bc0..f9b3daf6bfd12f3459ca8cfcce0a4b56b7fe8503 100644 (file)
@@ -16,8 +16,8 @@ class HeapInputOutputBufferType(FixedInputOutputBufferType):
     def __init__(self, datatype = 'char', sizetype = 'int', sizeformat = None):
         FixedInputOutputBufferType.__init__(self, "0", datatype, sizetype, sizeformat)
 
-    def declareOutputBuffer(self, name):
-        Output("%s *%s__out__;", self.datatype, name)
+    def getOutputBufferDeclarations(self, name):
+        return ["%s *%s__out__" % (self.datatype, name)]
 
     def getargsCheck(self, name):
         Output("if ((%s__out__ = malloc(%s__in_len__)) == NULL)", name, name)
@@ -74,8 +74,8 @@ class HeapOutputBufferType(OutputOnlyMixIn, HeapInputOutputBufferType):
     Call from Python with buffer size.
     """
 
-    def declareInputBuffer(self, name):
-        pass
+    def getInputBufferDeclarations(self, name):
+        return []
 
     def getargsFormat(self):
         return "i"
index 96696078c25fd9e46589f6e55224b726aa7d64bf..32f97f9412ebd05908406ba778e6deb0d4da5642 100644 (file)
@@ -22,8 +22,8 @@ class VarStackOutputBufferType(StackOutputBufferType):
     Instantiate with the buffer size as parameter.
     """
 
-    def declareSize(self, name):
-        Output("int %s__len__ = %s;", name, self.size)
+    def getSizeDeclarations(self, name):
+        return ["int %s__len__ = %s" % (name, self.size)]
 
     def passOutput(self, name):
         return "%s__out__, &%s__len__" % (name, name)
index 683bc0fa46bc869c4a3e296cfb4f241b95437db3..01155b3c1294192ad31e3b7ebd7d4b112c150e94 100644 (file)
@@ -23,8 +23,8 @@ class StringBufferMixIn:
     less common.  I'll write the classes when there is demand.)
     """
 
-    def declareSize(self, name):
-        pass
+    def getSizeDeclarations(self, name):
+        return []
 
     def getargsFormat(self):
         return "s"
index 2f0bc57350d16c8696fa293f4d9dc2901fc80ceb..3277c5a9a8930efe7848d6cfa05068c28b40dd2a 100644 (file)
@@ -24,15 +24,16 @@ class Type:
 
         Example: int.declare('spam') prints "int spam;"
         """
-        Output("%s;", self.getDeclaration(name, reference))
+        for decl in self.getDeclarations(name, reference):
+            Output("%s;", decl)
 
-    def getDeclaration(self, name, reference=False):
+    def getDeclarations(self, name, reference=False):
         """Return a string declaring a variable or argument, without
         any syntactic adornment"""
         if reference:
-            return "%s& %s" % (self.typeName, name)
+            return ["%s& %s" % (self.typeName, name)]
         else:
-            return "%s %s" % (self.typeName, name)
+            return ["%s %s" % (self.typeName, name)]
             
     def getargs(self):
         return self.getargsFormat(), self.getargsArgs()
@@ -185,9 +186,9 @@ class FakeType(InputOnlyType):
     def __init__(self, substitute):
         self.substitute = substitute
         self.typeName = None    # Don't show this argument in __doc__ string
-
-    def declare(self, name, reference=False):
-        pass
+        
+    def getDeclarations(self, name, reference=False):
+        return []
 
     def getargsFormat(self):
         return ""
index 01cab568b97121aab6f3d3283bc241ed58b28102..f44340d9f4144deb034996480cb7233837dbc9be 100644 (file)
@@ -45,11 +45,11 @@ class Variable:
         elif self.flags != SelfMode:
             self.type.declare(self.name)
             
-    def getDeclaration(self):
+    def getDeclarations(self):
         """Return the unadorned declaration of the variable,
         suitable for use in a formal parameter list."""
         refmode = (self.flags & RefMode)
-        return self.type.getDeclaration(self.name, reference=refmode)
+        return self.type.getDeclarations(self.name, reference=refmode)
 
     def getargsFormat(self):
         """Call the type's getargsFormatmethod."""