diff options
| author | Julian Hurst <ark@mansus.space> | 2026-03-29 23:45:16 +0200 |
|---|---|---|
| committer | Julian Hurst <ark@mansus.space> | 2026-03-29 23:45:16 +0200 |
| commit | 4088afafe7599772703c8df25ad8ed55f7197fd7 (patch) | |
| tree | 5d3bcc892c1a00f32c77ac4d0290fe1fced394cc /internal/interpreter/interpreter.ha | |
| parent | 678a38d41ba21c260ee74e1dbc516c6f5fe7222d (diff) | |
| download | rabbitscript-mistress.tar.gz | |
Support string literal variables (with string interpolation)mistress
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))?; + }; +}; |
