File tree 3 files changed +24
-1
lines changed
3 files changed +24
-1
lines changed Original file line number Diff line number Diff line change @@ -129,9 +129,13 @@ def parse_line(self, line):
129
129
opcode , args = opcode_args [0 ], ()
130
130
return label , opcode , args
131
131
132
+ def split_statements (self , lines ):
133
+ for line in lines :
134
+ for statement in line .split (';' ):
135
+ yield statement .rstrip ()
132
136
133
137
def parse (self , lines ):
134
- parsed = [self .parse_line (line ) for line in lines ]
138
+ parsed = [self .parse_line (line ) for line in self . split_statements ( lines ) ]
135
139
return [p for p in parsed if p is not None ]
136
140
137
141
Original file line number Diff line number Diff line change @@ -244,6 +244,21 @@ def test_symbols():
244
244
assert st .resolve_absolute ('const' ) == 123
245
245
246
246
247
+ def test_support_multiple_statements_per_line ():
248
+ src = """
249
+ label: nop; nop;
250
+ wait 42
251
+ """
252
+
253
+ lines = Assembler ().parse (src .splitlines ())
254
+
255
+ assert lines == [
256
+ ('label' , 'nop' , ()),
257
+ (None , 'nop' , ()),
258
+ (None , 'wait' , ('42' ,))
259
+ ]
260
+
261
+
247
262
test_parse_line ()
248
263
test_parse ()
249
264
test_assemble ()
@@ -254,4 +269,5 @@ def test_symbols():
254
269
test_assemble_evalulate_expressions ()
255
270
test_assemble_optional_comment_removal ()
256
271
test_assemble_test_regressions_from_evaluation ()
272
+ test_support_multiple_statements_per_line ()
257
273
test_symbols ()
Original file line number Diff line number Diff line change 25
25
reg_rd 12 , 7 , 0
26
26
reg_rd 0x3ff48000 , 7 , 0
27
27
28
+ # interpret ; as statement separator - this results in 2 NOP machine instructions
29
+ nop ; nop ;
30
+
28
31
halt
You can’t perform that action at this time.
0 commit comments