package builtins import ( "monkey/internal/object" "monkey/internal/typing" "syscall" ) // Seek ... func Seek(args ...object.Object) object.Object { if err := typing.Check( "seek", args, typing.RangeOfArgs(1, 3), typing.WithTypes(object.IntegerType, object.IntegerType, object.IntegerType), ); err != nil { return newError(err.Error()) } var ( fd int whence = 0 ) fd = int(args[0].(*object.Integer).Value) offset := args[1].(*object.Integer).Value if len(args) == 3 { whence = int(args[2].(*object.Integer).Value) } offset, err := syscall.Seek(syscall.Handle(fd), offset, whence) if err != nil { return newError("IOError: %s", err) } return &object.Integer{Value: offset} }