@@ -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