]> granicus.if.org Git - python/commitdiff
Jack Jansen: Support for conditional inclusion of methods and functions
authorGuido van Rossum <guido@python.org>
Wed, 28 Jun 2000 20:53:33 +0000 (20:53 +0000)
committerGuido van Rossum <guido@python.org>
Wed, 28 Jun 2000 20:53:33 +0000 (20:53 +0000)
Tools/bgen/bgen/bgenGenerator.py
Tools/bgen/bgen/bgenlocations.py
Tools/bgen/bgen/scantools.py

index b5bd2c6be9546ca904401e219553de59770e0fce..2c0a399e2293ce050c2d7ff2bef7004eef559cc9 100644 (file)
@@ -14,20 +14,26 @@ INOUT = IN_OUT = "in-out"
 
 class BaseFunctionGenerator:
 
-       def __init__(self, name):
+       def __init__(self, name, condition=None):
                print "<--", name
                self.name = name
                self.prefix = name
                self.objecttype = "PyObject" # Type of _self argument to function
+               self.condition = condition
 
        def setprefix(self, prefix):
                self.prefix = prefix
 
        def generate(self):
                print "-->", self.name
+               if self.condition:
+                       Output()
+                       Output(self.condition)
                self.functionheader()
                self.functionbody()
                self.functiontrailer()
+               if self.condition:
+                       Output("#endif")
 
        def functionheader(self):
                Output()
@@ -50,8 +56,13 @@ class BaseFunctionGenerator:
                if name is None:
                        name = self.name
                docstring = self.docstring()
+               if self.condition:
+                       Output()
+                       Output(self.condition)          
                Output("{\"%s\", (PyCFunction)%s_%s, 1,", name, self.prefix, self.name)
                Output(" %s},", stringify(docstring))
+               if self.condition:
+                       Output("#endif")
 
        def docstring(self):
                return None
@@ -73,8 +84,8 @@ def stringify(str):
 
 class ManualGenerator(BaseFunctionGenerator):
 
-       def __init__(self, name, body):
-               BaseFunctionGenerator.__init__(self, name)
+       def __init__(self, name, body, condition=None):
+               BaseFunctionGenerator.__init__(self, name, condition=condition)
                self.body = body
 
        def functionbody(self):
@@ -87,8 +98,8 @@ class ManualGenerator(BaseFunctionGenerator):
 
 class FunctionGenerator(BaseFunctionGenerator):
 
-       def __init__(self, returntype, name, *argumentList):
-               BaseFunctionGenerator.__init__(self, name)
+       def __init__(self, returntype, name, *argumentList, **conditionlist):
+               BaseFunctionGenerator.__init__(self, name, **conditionlist)
                self.returntype = returntype
                self.argumentList = []
                self.setreturnvar()
index 56d9e6ec11373a51fc30d4c906cf784acfd10fb4..4a2bd3b3a20a2032e68dfeaab8765f5abce0c158 100644 (file)
@@ -3,11 +3,11 @@
 #
 
 # Where to find the Universal Header include files:
-MWERKSDIR="flap:Metrowerks:Metrowerks CodeWarrior:"
-INCLUDEDIR=MWERKSDIR + "MacOS Support:Headers:Universal Headers:"
+MWERKSDIR="Macintosh HD:SWDev:Codewarrior Pro 5:Metrowerks CodeWarrior:"
+INCLUDEDIR=MWERKSDIR + "MacOS Support:Universal:Interfaces:CIncludes:"
 
 # Where to put the python definitions file:
-TOOLBOXDIR="flap:Jack:Python:Mac:Lib:lib-toolbox:"
+TOOLBOXDIR="Macintosh HD:SWDev:Jack:Python:Mac:Lib:lib-toolbox:"
 
 # Creator for C files:
 CREATOR="CWIE"
index f31996d954f7f0485ce00f47f6604a313fa10b91..29c90c18d07a6919087a2596ea969f53e58d9f2e 100644 (file)
@@ -99,12 +99,23 @@ if missing: raise "Missing Types"
        def initblacklists(self):
                self.blacklistnames = self.makeblacklistnames()
                self.blacklisttypes = ["unknown", "-"] + self.makeblacklisttypes()
+               self.greydictnames = self.greylist2dict(self.makegreylist())
+               
+       def greylist2dict(self, list):
+               rv = {}
+               for define, namelist in list:
+                       for name in namelist:
+                               rv[name] = define
+               return rv
 
        def makeblacklistnames(self):
                return []
 
        def makeblacklisttypes(self):
                return []
+               
+       def makegreylist(self):
+               return []
 
        def initrepairinstructions(self):
                self.repairinstructions = self.makerepairinstructions()
@@ -395,6 +406,7 @@ if missing: raise "Missing Types"
                        self.defsfile.write("%s = %s\n" % (name, defn))
                else:
                        self.defsfile.write("# %s = %s\n" % (name, defn))
+               # XXXX No way to handle greylisted names
 
        def dofuncspec(self):
                raw = self.line
@@ -519,6 +531,8 @@ if missing: raise "Missing Types"
                        self.typeused(atype, amode)
                        self.specfile.write("    (%s, %s, %s),\n" %
                                            (atype, `aname`, amode))
+               if self.greydictnames.has_key(name):
+                       self.specfile.write("    condition=%s,\n"%`self.greydictnames[name]`)
                self.specfile.write(")\n")
                self.specfile.write("%s.append(f)\n\n" % listname)