21
21
arg_parser .add_argument ("-q" , "--quiet" , action = "store_true" )
22
22
23
23
24
- def eopen (filename : str , mode : str = "r" ) -> TextIO :
25
- if filename == "-" :
26
- if "r" in mode :
27
- return sys .stdin
28
- else :
29
- return sys .stdout
30
- return cast (TextIO , open (filename , mode ))
31
-
32
-
33
24
def parse_cases (
34
25
src : str , filename : str | None = None
35
26
) -> tuple [list [InstDef ], list [parser .Super ], list [parser .Family ]]:
36
27
psr = parser .Parser (src , filename = filename )
28
+ # Skip until BEGIN marker
29
+ while tkn := psr .next (raw = True ):
30
+ if tkn .text == "// BEGIN BYTECODES //" :
31
+ break
32
+ else :
33
+ raise psr .make_syntax_error (f"Couldn't find { text !r} in { psr .filename } " )
37
34
instrs : list [InstDef ] = []
38
35
supers : list [parser .Super ] = []
39
36
families : list [parser .Family ] = []
40
- while not psr .eof ():
37
+ # Parse until END marker
38
+ while not psr .eof () and psr .peek (raw = True ).text != "// END BYTECODES //" :
41
39
if inst := psr .inst_def ():
42
40
instrs .append (inst )
43
41
elif sup := psr .super_def ():
@@ -197,11 +195,8 @@ def write_cases(
197
195
198
196
def main ():
199
197
args = arg_parser .parse_args ()
200
- with eopen (args .input ) as f :
201
- srclines = f .read ().splitlines ()
202
- begin = srclines .index ("// BEGIN BYTECODES //" )
203
- end = srclines .index ("// END BYTECODES //" )
204
- src = "\n " .join (srclines [begin + 1 : end ])
198
+ with open (args .input ) as f :
199
+ src = f .read ()
205
200
instrs , supers , families = parse_cases (src , filename = args .input )
206
201
ninstrs = nsupers = nfamilies = 0
207
202
if not args .quiet :
@@ -213,7 +208,7 @@ def main():
213
208
f"and { nfamilies } families from { args .input } " ,
214
209
file = sys .stderr ,
215
210
)
216
- with eopen (args .output , "w" ) as f :
211
+ with open (args .output , "w" ) as f :
217
212
effects_table = write_cases (f , instrs , supers , families )
218
213
if not args .quiet :
219
214
print (
0 commit comments