diff options
author | Jack Jansen <jack.jansen@cwi.nl> | 2000-12-12 22:21:11 (GMT) |
---|---|---|
committer | Jack Jansen <jack.jansen@cwi.nl> | 2000-12-12 22:21:11 (GMT) |
commit | b8c68634b38fcc37b0f59b033a7aee8e40dd08ff (patch) | |
tree | ab785e1ef6a516bce589b673956409e9928f42bc /Tools/bgen | |
parent | 5f884c05d16af063f32f9a0be6ef0585f9c1eb67 (diff) | |
download | cpython-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.py | 23 |
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) |