package builtins import "monkey/object" // Bool ... func Bool(args ...object.Object) object.Object { if len(args) != 1 { return newError("wrong number of arguments. got=%d, want=1", len(args)) } switch arg := args[0].(type) { case *object.Null: return &object.Boolean{Value: false} case *object.Boolean: return arg case *object.Integer: if arg.Value == 0 { return &object.Boolean{Value: false} } return &object.Boolean{Value: true} case *object.String: if len(arg.Value) > 0 { return &object.Boolean{Value: true} } return &object.Boolean{Value: false} case *object.Array: if len(arg.Elements) > 0 { return &object.Boolean{Value: true} } return &object.Boolean{Value: false} case *object.Hash: if len(arg.Pairs) > 0 { return &object.Boolean{Value: true} } return &object.Boolean{Value: false} default: return newError("argument to `bool` not supported, got=%s", args[0].Type()) } }