diff options
Diffstat (limited to 'internal/interpreter/interpreter.ha')
| -rw-r--r-- | internal/interpreter/interpreter.ha | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/internal/interpreter/interpreter.ha b/internal/interpreter/interpreter.ha index 947dc8f..24f6f01 100644 --- a/internal/interpreter/interpreter.ha +++ b/internal/interpreter/interpreter.ha @@ -77,10 +77,7 @@ fn replacevars(it: *interpreter, s: str) str = { return sa; }; -fn assign(it: *interpreter, nodes: []parser::ast) (void | error) = { - const varname = nodes[0].value as parser::varname; - const operation = nodes[1].value as parser::operation; - +fn assignop(it: *interpreter, nodes: []parser::ast, varname: parser::varname, operation: parser::operation) (void | error) = { let value = 0; let stack: []int = []; @@ -114,3 +111,14 @@ fn assign(it: *interpreter, nodes: []parser::ast) (void | error) = { let last = len(stack) - 1; append(it.vars, (varname, strings::dup(strconv::itos(stack[last]))?))?; }; + +fn assign(it: *interpreter, nodes: []parser::ast) (void | error) = { + const varname = nodes[0].value as parser::varname; + const operation = match (nodes[1].value) { + case let op: parser::operation => + return assignop(it, nodes, varname, op); + case let s: parser::strlit => + let sa = replacevars(it, s); + append(it.vars, (varname, sa))?; + }; +}; |
