diff options
author | Guido van Rossum <guido@python.org> | 2000-06-28 20:53:33 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 2000-06-28 20:53:33 (GMT) |
commit | b7c298f80646a19fe69928bc8f663af34c9d95e9 (patch) | |
tree | cac0bbfdcd8b714205fea467ef53c7c8ef13274f /Tools | |
parent | 35c09f2e518af8dd09250b780bbca27039c0f951 (diff) | |
download | cpython-b7c298f80646a19fe69928bc8f663af34c9d95e9.zip cpython-b7c298f80646a19fe69928bc8f663af34c9d95e9.tar.gz cpython-b7c298f80646a19fe69928bc8f663af34c9d95e9.tar.bz2 |
Jack Jansen: Support for conditional inclusion of methods and functions
Diffstat (limited to 'Tools')
-rw-r--r-- | Tools/bgen/bgen/bgenGenerator.py | 21 | ||||
-rw-r--r-- | Tools/bgen/bgen/bgenlocations.py | 6 | ||||
-rw-r--r-- | Tools/bgen/bgen/scantools.py | 14 |
3 files changed, 33 insertions, 8 deletions
diff --git a/Tools/bgen/bgen/bgenGenerator.py b/Tools/bgen/bgen/bgenGenerator.py index b5bd2c6..2c0a399 100644 --- a/Tools/bgen/bgen/bgenGenerator.py +++ b/Tools/bgen/bgen/bgenGenerator.py @@ -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() diff --git a/Tools/bgen/bgen/bgenlocations.py b/Tools/bgen/bgen/bgenlocations.py index 56d9e6e..4a2bd3b 100644 --- a/Tools/bgen/bgen/bgenlocations.py +++ b/Tools/bgen/bgen/bgenlocations.py @@ -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" diff --git a/Tools/bgen/bgen/scantools.py b/Tools/bgen/bgen/scantools.py index f31996d..29c90c1 100644 --- a/Tools/bgen/bgen/scantools.py +++ b/Tools/bgen/bgen/scantools.py @@ -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) |