diff options
| author | mryouse | 2022-05-10 02:46:42 +0000 |
|---|---|---|
| committer | mryouse | 2022-05-10 02:46:42 +0000 |
| commit | 3e70f2ce47ee954640df9ee3b432964c1111b5ed (patch) | |
| tree | 0ed1155e401b1768adc0fd537721b5a75749e1c0 /runner.py | |
| parent | 7bed8de9b493ca2a2b13d6293db6bd81b73325ce (diff) | |
refactor: std to own file, implement 'exit', multiple sigs
Diffstat (limited to 'runner.py')
| -rw-r--r-- | runner.py | 29 |
1 files changed, 9 insertions, 20 deletions
@@ -1,15 +1,6 @@ from tokens import * +from std import STD -def std_print(arg): - print(arg.value) - #return [] # TODO this should return empty list - return NebLiteral(NebType.BOOL, True) - -std = { - "print": { - "func": NebFunction("print", [NebType.STRING], NebType.BOOL), - "impl": std_print } - } def peek(inp): if len(inp) == 0: @@ -24,19 +15,17 @@ def evaluate(items, pop): pop = nxt.value return evaluate(items[1:], pop) elif isinstance(nxt, NebSymbol): - if not nxt.name in std: + if not nxt.name in STD: raise Exception(f"no such symbol: '{nxt.name}'") - this_func = std[nxt.name] - return evaluate(items[1:], this_func["impl"]) + this_func = STD[nxt.name] + return evaluate(items[1:], this_func[list(this_func.keys())[0]].impl) # TODO show all elif isinstance(nxt, NebExpression): - if not nxt.symbol.name in std: + if not nxt.symbol.name in STD: raise Exception(f"no such symbol: {nxt.symbol.name}") - this_func = std[nxt.symbol.name] - #expected_sig = " ".join(x.type_.name for x in nxt.args) - #if this_func["func"].in_sig() != expected_sig: - if this_func["func"].in_sig() != nxt.maybe_sig(): - raise Exception(f"{nxt.symbol.name} expects '{this_func['func'].in_sig()}', got '{nxt.maybe_sig()}'") - ret = this_func["impl"](*(nxt.args)) + this_func = STD[nxt.symbol.name] + if nxt.maybe_sig() not in this_func: + raise Exception(f"'{nxt.symbol.name}' called with unknown signature: '{nxt.maybe_sig()}'") + ret = this_func[nxt.maybe_sig()].impl(*(nxt.args)) return evaluate(items[1:], ret) else: raise Exception("expected a literal or an expression") |
