From 2f69a9ac8c2de9d37248baa5c774c2813f070ba0 Mon Sep 17 00:00:00 2001 From: Jan Tuomi Date: Sun, 14 Apr 2024 16:00:48 +0300 Subject: Optimize override_mode in assembler, add more test cases --- atk16_asm/asm_pass3.py | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) (limited to 'atk16_asm/asm_pass3.py') diff --git a/atk16_asm/asm_pass3.py b/atk16_asm/asm_pass3.py index a3f9537..7156518 100644 --- a/atk16_asm/asm_pass3.py +++ b/atk16_asm/asm_pass3.py @@ -77,20 +77,26 @@ def pass_3(result2: Result2) -> Result3: symbols[args[0]] = eval_expr(symbols, args[1]) continue case _: - if override_mode: - # TODO this is a bit inefficient, but works - result_lines = list(filter(lambda l: l.address != address, result_lines)) - dbg_original_text = " ".join(line.original_parts) dbg_expanded_text = " ".join(line.parts) - save_dbg_source(address, line.src_file, line.line_num, dbg_expanded_text, dbg_original_text) - result_lines.append(Result3Line( + + res_line = Result3Line( line_num=line.line_num, src_file=line.src_file, parts=line.parts, address=address, original_parts=line.original_parts, - )) + ) + + if override_mode: + for i in range(len(result_lines)): + if result_lines[i].address == address: + result_lines[i] = res_line # overwrite the existing line + break + else: + result_lines.append(res_line) + + save_dbg_source(address, line.src_file, line.line_num, dbg_expanded_text, dbg_original_text) address += 1 result_lines.sort(key=lambda l: l.address) -- cgit v1.3