mirror of
https://github.com/Open-Argon/argon-v3.git
synced 2025-12-06 08:56:07 +00:00
add create functions
This commit is contained in:
35
src/run.go
35
src/run.go
@@ -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")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user