Skip to content

Commit 5d25485

Browse files
committed
Fix parameterised asm arguments
1 parent 5804a43 commit 5d25485

File tree

1 file changed

+15
-5
lines changed

1 file changed

+15
-5
lines changed

compiler/compiler.py

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ class I2:
5858
Ret = namedtuple('Ret', '')
5959
Print = namedtuple('Print', 'args')
6060
Sync = namedtuple('Sync', '')
61-
Asm = namedtuple('Asm', 'asm')
61+
Asm = namedtuple('Asm', 'fragments')
6262
Test = namedtuple('Test', 'cmd')
6363
Exec = namedtuple('Exec', 'type func args')
6464

@@ -295,7 +295,17 @@ def handle_sync(self, insn):
295295
self.writer.write_instruction('SYNC')
296296

297297
def handle_asm(self, insn):
298-
self.writer.write_raw_asm(insn.asm)
298+
parts = []
299+
old_writer = self.writer
300+
# Temporary switch to string writer
301+
self.writer = AsmWriter('string')
302+
for frag in insn.fragments:
303+
if type(frag) != str:
304+
parts.append(self.ref(frag))
305+
else:
306+
parts.append(frag)
307+
self.writer = old_writer
308+
self.writer.write_raw_asm(''.join(parts))
299309

300310
def handle_test(self, insn):
301311
self.writer.write_instruction('TEST', self.RAW(insn.cmd))
@@ -459,12 +469,12 @@ def handle_test(self, insn):
459469
self.emit_relative_move(I2.Lit(1), None, base, off)
460470

461471
def handle_asm(self, insn):
462-
asm = ''
472+
asm = []
463473
put_back = []
464474
for (val, write_only, is_dest) in insn.args:
465475
if write_only is None or is_dest is None:
466476
# This is a raw string component, just append
467-
asm += val
477+
asm.append(val)
468478
else:
469479
base = None
470480
if write_only:
@@ -480,7 +490,7 @@ def handle_asm(self, insn):
480490
if is_dest:
481491
put_back.append((vbase, base, off))
482492
base = vbase
483-
asm += base
493+
asm.append(base)
484494

485495
self.emit(I2.Asm(asm))
486496

0 commit comments

Comments
 (0)