diff options
| author | Jan Tuomi <jans.tuomi@gmail.com> | 2024-02-21 12:07:07 +0200 |
|---|---|---|
| committer | Jan Tuomi <jans.tuomi@gmail.com> | 2024-02-21 12:07:07 +0200 |
| commit | 927c018f12e73c254cec32c0f60e1c01b9fc0319 (patch) | |
| tree | 21fbb975e3567cb0d9ab3fb34519c50325571d6c /atk16_asm/asm_pass1.py | |
| parent | a0b4a1a6107e4dc905b21858d8ac76c47293cfb4 (diff) | |
Refactor names
Diffstat (limited to 'atk16_asm/asm_pass1.py')
| -rw-r--r-- | atk16_asm/asm_pass1.py | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/atk16_asm/asm_pass1.py b/atk16_asm/asm_pass1.py new file mode 100644 index 0000000..0b06738 --- /dev/null +++ b/atk16_asm/asm_pass1.py @@ -0,0 +1,48 @@ +import importlib +import sys +import os.path +from dataclasses import dataclass +from asm_ops import * +from asm_eval import * +from asm_pass0 import * +from tokenizer import tokenize + +@dataclass +class Result1Line: + line_num: int + src_file: str + parts: list[str] + +@dataclass +class Result1: + lines: list[Result1Line] + operations: OpExpansionDict + +def pass_1(result0: Result0) -> Result1: + result_lines: list[Result1Line] = [] + operations: OpExpansionDict = default_expansions.copy() + + for line in result0.lines: + keyword, *args = tokenize(line.line) + match keyword: + case "@use": + module_name, ops = args[0].split(":") + ops_split = ops.split(",") + sys.path.append(os.path.dirname(line.src_file)) + module = importlib.import_module(module_name) + mod_expansions: OpExpansionDict = module.expansions + for op in mod_expansions: + expansion = mod_expansions[op] + if ops == "*" or op in ops_split: + operations[op] = expansion + case _: + result_lines.append(Result1Line( + src_file=line.src_file, + line_num=line.line_num, + parts=[keyword, *args] + )) + + return Result1( + operations=operations, + lines=result_lines + ) |
