further improvements
Some checks failed
Build / build (push) Successful in 10m40s
Publish Image / publish (push) Failing after 34s
Test / build (push) Has been cancelled

This commit is contained in:
2024-04-01 17:02:44 -04:00
parent aebbe43999
commit f9e6e164b0
26 changed files with 168 additions and 138 deletions

View File

@@ -126,7 +126,7 @@ func Eval(node ast.Node, env *object.Environment) object.Object {
case *ast.FunctionLiteral:
params := node.Parameters
body := node.Body
return &object.Function{Parameters: params, Env: env, Body: body}
return object.Function{Parameters: params, Env: env, Body: body}
// Expressions
case *ast.IntegerLiteral:
@@ -560,12 +560,12 @@ func evalExpressions(exps []ast.Expression, env *object.Environment) []object.Ob
func applyFunction(fn object.Object, args []object.Object) object.Object {
switch fn := fn.(type) {
case *object.Function:
case object.Function:
extendedEnv := extendFunctionEnv(fn, args)
evaluated := Eval(fn.Body, extendedEnv)
return unwrapReturnValue(evaluated)
case *object.Builtin:
case object.Builtin:
if result := fn.Fn(args...); result != nil {
return result
}
@@ -577,7 +577,7 @@ func applyFunction(fn object.Object, args []object.Object) object.Object {
}
}
func extendFunctionEnv(fn *object.Function, args []object.Object) *object.Environment {
func extendFunctionEnv(fn object.Function, args []object.Object) *object.Environment {
env := object.NewEnclosedEnvironment(fn.Env)
for paramIdx, param := range fn.Parameters {

View File

@@ -354,7 +354,7 @@ func TestFunctionObject(t *testing.T) {
input := "fn(x) { x + 2; };"
evaluated := testEval(input)
fn, ok := evaluated.(*object.Function)
fn, ok := evaluated.(object.Function)
if !ok {
t.Fatalf("object is not Function. got=%T (%+v)", evaluated, evaluated)
}