Extra Features
Some checks failed
Build / build (push) Failing after 1m40s
Test / build (push) Failing after 11m47s

This commit is contained in:
Chuck Smith
2024-03-14 21:25:47 -04:00
parent 36f04713bd
commit 997f0865f4
20 changed files with 757 additions and 128 deletions

View File

@@ -35,6 +35,9 @@ func Eval(node ast.Node, env *object.Environment) object.Object {
case *ast.IfExpression:
return evalIfExpression(node, env)
case *ast.WhileExpression:
return evalWhileExpression(node, env)
case *ast.ReturnStatement:
val := Eval(node.ReturnValue, env)
if isError(val) {
@@ -123,6 +126,29 @@ func Eval(node ast.Node, env *object.Environment) object.Object {
return nil
}
func evalWhileExpression(we *ast.WhileExpression, env *object.Environment) object.Object {
var result object.Object
for {
condition := Eval(we.Condition, env)
if isError(condition) {
return condition
}
if isTruthy(condition) {
result = Eval(we.Consequence, env)
} else {
break
}
}
if result != nil {
return result
} else {
return NULL
}
}
func evalProgram(program *ast.Program, env *object.Environment) object.Object {
var result object.Object