summaryrefslogtreecommitdiffstats
path: root/Tools/bgen
diff options
context:
space:
mode:
authorJack Jansen <jack.jansen@cwi.nl>2000-12-12 22:21:11 (GMT)
committerJack Jansen <jack.jansen@cwi.nl>2000-12-12 22:21:11 (GMT)
commitb8c68634b38fcc37b0f59b033a7aee8e40dd08ff (patch)
treeab785e1ef6a516bce589b673956409e9928f42bc /Tools/bgen
parent5f884c05d16af063f32f9a0be6ef0585f9c1eb67 (diff)
downloadcpython-b8c68634b38fcc37b0f59b033a7aee8e40dd08ff.zip
cpython-b8c68634b38fcc37b0f59b033a7aee8e40dd08ff.tar.gz
cpython-b8c68634b38fcc37b0f59b033a7aee8e40dd08ff.tar.bz2
Added support for generating a single module from multiple .h files.
Allow /* */ comments within function prototypes.
Diffstat (limited to 'Tools/bgen')
-rw-r--r--Tools/bgen/bgen/scantools.py23
1 files changed, 20 insertions, 3 deletions
diff --git a/Tools/bgen/bgen/scantools.py b/Tools/bgen/bgen/scantools.py
index e51c21a..4dce73c 100644
--- a/Tools/bgen/bgen/scantools.py
+++ b/Tools/bgen/bgen/scantools.py
@@ -251,7 +251,7 @@ if missing: raise "Missing Types"
self.asplit_pat = "^\(<type>.*[^a-zA-Z0-9_]\)\(<name>[a-zA-Z0-9_]+\)$"
self.comment1_pat = "\(<rest>.*\)//.*"
# note that the next pattern only removes comments that are wholly within one line
- self.comment2_pat = "\(<rest>.*\)/\*.*\*/"
+ self.comment2_pat = "\(<rest1>.*\)/\*.*\*/\(<rest2>.*\)"
def compilepatterns(self):
for name in dir(self):
@@ -328,6 +328,16 @@ if missing: raise "Missing Types"
return file
def setinput(self, scan = sys.stdin):
+ if not type(scan) in (TupleType, ListType):
+ scan = [scan]
+ self.allscaninputs = scan
+ self._nextinput()
+
+ def _nextinput(self):
+ if not self.allscaninputs:
+ return 0
+ scan = self.allscaninputs[0]
+ self.allscaninputs = self.allscaninputs[1:]
self.closescan()
if scan:
if type(scan) == StringType:
@@ -339,6 +349,7 @@ if missing: raise "Missing Types"
self.scanfile = file
self.scanmine = mine
self.lineno = 0
+ return 1
def openinput(self, filename):
if not os.path.isabs(filename):
@@ -360,6 +371,8 @@ if missing: raise "Missing Types"
raise Error, "input file not set"
self.line = self.scanfile.readline()
if not self.line:
+ if self._nextinput():
+ return self.getline()
raise EOFError
self.lineno = self.lineno + 1
return self.line
@@ -388,8 +401,8 @@ if missing: raise "Missing Types"
except EOFError: break
if self.comment1.match(line) >= 0:
line = self.comment1.group('rest')
- if self.comment2.match(line) >= 0:
- line = self.comment2.group('rest')
+ while self.comment2.match(line) >= 0:
+ line = self.comment2.group('rest1')+self.comment2.group('rest2')
if self.defsfile and self.sym.match(line) >= 0:
self.dosymdef()
continue
@@ -412,6 +425,10 @@ if missing: raise "Missing Types"
raw = self.line
while self.tail.search(raw) < 0:
line = self.getline()
+ if self.comment1.match(line) >= 0:
+ line = self.comment1.group('rest')
+ while self.comment2.match(line) >= 0:
+ line = self.comment2.group('rest1')+self.comment2.group('rest2')
raw = raw + line
self.processrawspec(raw)