summaryrefslogtreecommitdiffstats
path: root/Tools/bgen
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>2000-06-28 20:53:33 (GMT)
committerGuido van Rossum <guido@python.org>2000-06-28 20:53:33 (GMT)
commitb7c298f80646a19fe69928bc8f663af34c9d95e9 (patch)
treecac0bbfdcd8b714205fea467ef53c7c8ef13274f /Tools/bgen
parent35c09f2e518af8dd09250b780bbca27039c0f951 (diff)
downloadcpython-b7c298f80646a19fe69928bc8f663af34c9d95e9.zip
cpython-b7c298f80646a19fe69928bc8f663af34c9d95e9.tar.gz
cpython-b7c298f80646a19fe69928bc8f663af34c9d95e9.tar.bz2
Jack Jansen: Support for conditional inclusion of methods and functions
Diffstat (limited to 'Tools/bgen')
-rw-r--r--Tools/bgen/bgen/bgenGenerator.py21
-rw-r--r--Tools/bgen/bgen/bgenlocations.py6
-rw-r--r--Tools/bgen/bgen/scantools.py14
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)