add create functions

This commit is contained in:
2023-02-27 00:07:13 +00:00
parent f0620354c0
commit 1b3a4c44d9
23 changed files with 580 additions and 125 deletions

View File

@@ -2,17 +2,44 @@ package main
// returns (number|string|nil), error
func runVal(line any, stack stack) (any, ArErr) {
if len(stack) > 500 {
return nil, ArErr{
TYPE: "Stack overflow",
message: "the stack has exceeded 500 levels",
EXISTS: true,
}
}
switch x := line.(type) {
case translateNumber:
return (x.number), ArErr{}
case translateString:
return (x.str), ArErr{}
case number:
return x, ArErr{}
case string:
return x, ArErr{}
case call:
return runCall(x, stack)
case accessVariable:
return readVariable(x, stack)
case ArMapGet:
return mapGet(x, stack)
case ArClass:
return x.MAP, ArErr{}
case setVariable:
return setVariableValue(x, stack)
case negative:
resp, err := runVal(x.VAL, stack)
if err.EXISTS {
return nil, err
}
switch y := resp.(type) {
case number:
return newNumber().Neg(y), ArErr{}
}
return nil, ArErr{
TYPE: "TypeError",
message: "cannot negate a non-number",
EXISTS: true,
}
case brackets:
return runVal(x.VAL, stack)
}
panic("unreachable")
}