summaryrefslogtreecommitdiff
path: root/internal/interpreter/interpreter.ha
diff options
context:
space:
mode:
authorJulian Hurst <ark@mansus.space>2026-03-29 23:45:16 +0200
committerJulian Hurst <ark@mansus.space>2026-03-29 23:45:16 +0200
commit4088afafe7599772703c8df25ad8ed55f7197fd7 (patch)
tree5d3bcc892c1a00f32c77ac4d0290fe1fced394cc /internal/interpreter/interpreter.ha
parent678a38d41ba21c260ee74e1dbc516c6f5fe7222d (diff)
downloadrabbitscript-4088afafe7599772703c8df25ad8ed55f7197fd7.tar.gz
Support string literal variables (with string interpolation)mistress
Diffstat (limited to 'internal/interpreter/interpreter.ha')
-rw-r--r--internal/interpreter/interpreter.ha16
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))?;
+ };
+};