diff options
| author | Jan Tuomi <jans.tuomi@gmail.com> | 2023-04-10 21:10:16 +0300 |
|---|---|---|
| committer | Jan Tuomi <jans.tuomi@gmail.com> | 2023-04-10 23:55:17 +0300 |
| commit | 9a6001ad380e83a545188b58145387593b117b48 (patch) | |
| tree | a991cea5e5163b18c0666de89a7eccd55308b227 /src/assembler_eval.py | |
| parent | 56fd37c60eb0d58ed4762340ddc85b74347bcd71 (diff) | |
Refactor into multipass compiler
Diffstat (limited to 'src/assembler_eval.py')
| -rw-r--r-- | src/assembler_eval.py | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/src/assembler_eval.py b/src/assembler_eval.py index 07f22e7..7cfe336 100644 --- a/src/assembler_eval.py +++ b/src/assembler_eval.py @@ -24,13 +24,13 @@ constants: dict[str, str] = { "f_sign": "3", } -labels: dict[str, int] = {} +Labels = dict[str, int] def check_size(bits: int, val: int) -> None: if val >= 2 ** bits: raise Exception(f"Value does not fit in {bits} bits: {val}") -def eval_symbol(c: str) -> str: +def eval_symbol(labels: Labels, c: str) -> str: if c in labels: return str(labels[c]) @@ -39,8 +39,9 @@ def eval_symbol(c: str) -> str: return c -def eval_expr(expr: str, bits: int = 16) -> int: - expr = eval_symbol(expr) +def eval_expr(labels: Labels, expr: str, bits: int = 16) -> int: + expr = expr.lower() + expr = eval_symbol(labels, expr) ret = eval(expr, labels.copy()) # eval as Python expr check_size(bits, ret) return ret |
