aboutsummaryrefslogtreecommitdiffstats
path: root/src/assembler_eval.py
diff options
context:
space:
mode:
authorJan Tuomi <jans.tuomi@gmail.com>2023-04-10 21:10:16 +0300
committerJan Tuomi <jans.tuomi@gmail.com>2023-04-10 23:55:17 +0300
commit9a6001ad380e83a545188b58145387593b117b48 (patch)
treea991cea5e5163b18c0666de89a7eccd55308b227 /src/assembler_eval.py
parent56fd37c60eb0d58ed4762340ddc85b74347bcd71 (diff)
Refactor into multipass compiler
Diffstat (limited to 'src/assembler_eval.py')
-rw-r--r--src/assembler_eval.py9
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