mirror of
https://github.com/Open-Argon/argon-v3.git
synced 2025-12-06 08:56:07 +00:00
28 lines
597 B
Go
28 lines
597 B
Go
package main
|
|
|
|
// returns (number|string|nil), error
|
|
func runVal(line any, stack []map[string]variableValue) (any, ArErr) {
|
|
switch x := line.(type) {
|
|
case translateNumber:
|
|
return (x.number), ArErr{}
|
|
case translateString:
|
|
return (x.str), ArErr{}
|
|
case call:
|
|
return runCall(x, stack)
|
|
case accessVariable:
|
|
return readVariable(x, stack)
|
|
}
|
|
panic("unreachable")
|
|
}
|
|
|
|
// returns error
|
|
func run(translated []any, stack []map[string]variableValue) (any, ArErr) {
|
|
for _, val := range translated {
|
|
_, err := runVal(val, stack)
|
|
if err.EXISTS {
|
|
return nil, err
|
|
}
|
|
}
|
|
return nil, ArErr{}
|
|
}
|