package builtins import "monkey/object" import "strconv" // Int ... func Int(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.Boolean: if arg.Value { return &object.Integer{Value: 1} } return &object.Integer{Value: 0} case *object.Integer: return arg case *object.String: n, err := strconv.ParseInt(arg.Value, 10, 64) if err != nil { return newError("could not parse string to int: %s", err) } return &object.Integer{Value: n} default: return newError("argument to `int` not supported, got=%s", args[0].Type()) } }