Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def edit(self) -> None:
# Save the subroutines' disassembly in a temporary file.
original_tokens: List[List[List[Token]]] = []
line_n = 1
with NamedTemporaryFile(mode="w", suffix=".asm", delete=False) as f:
for disassembly in self.disassemblies:
f.write(self.HEADER)
line_n += 1
disassembly.base_line_n = line_n
sub_n_lines, text, tokens = disassembly._get_text()
original_tokens.append(tokens)
f.write(text)
line_n += sub_n_lines
f.write("\n\n\n")
line_n += 3
filename = f.name
def add_line(*args) -> None:
add(*args)
tokens.append(Token(T.NEWLINE))
def add(self, *args):
self.tokens[-1].append(Token(*args))
def __init__(self, text: str, base_line_n: int):
self.lines = text.splitlines()
self.line_idx = 0
self.base_line_n = base_line_n
self.tokens: List[List[Token]] = []
def add(*args) -> None:
tokens.append(Token(*args))
label = self.log.get_label(instr.pc, instr.subroutine_pc)
if label:
if instr.pc in self.log.jump_table_targets:
add_line(T.JUMP_TABLE_LABEL, label)
else:
add_line(T.LABEL, label)
# Stack manipulation.
if verbose and instr.stack_manipulation != StackManipulation.NONE:
if instr.stack_manipulation == StackManipulation.CAUSES_UNKNOWN_STATE:
add_line(T.FATAL_STACK_MANIPULATION_HEADER)
else:
add_line(T.STACK_MANIPULATION_HEADER)
# Operation + Operand.
tokens.append(Token(T.OPERATION, instr.name))
if instr.argument_alias:
if instr.argument_alias in hw_registers:
add(T.HW_REGISTER, instr.argument_alias)
elif instr.argument_alias in self.preview_excluded_labels:
add(T.HIGHLIGHTED_OPERAND_LABEL, instr.argument_alias)
elif instr.pc in self.log.jump_table_targets:
add(T.JUMP_TABLE_OPERAND_LABEL, instr.argument_alias)
else:
add(T.OPERAND_LABEL, instr.argument_alias)
else:
add(T.OPERAND, instr.argument_string)
# PC + Comment.
add(T.PC, "${:06X}".format(instr.pc))
comment = self.log.comments.get(instr.pc, self._get_default_comment(instr))
add_line(T.COMMENT, comment)