From bcb2cb59ac235297e6ef8153ffd414836ae38efd Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Mon, 30 Aug 2004 12:28:32 -0300 Subject: `select' returns all values after given `n' --- lbaselib.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) (limited to 'lbaselib.c') diff --git a/lbaselib.c b/lbaselib.c index c3a8cb5e..7bed0bb5 100644 --- a/lbaselib.c +++ b/lbaselib.c @@ -1,5 +1,5 @@ /* -** $Id: lbaselib.c,v 1.153 2004/07/09 16:01:38 roberto Exp roberto $ +** $Id: lbaselib.c,v 1.154 2004/07/09 18:23:17 roberto Exp roberto $ ** Basic library ** See Copyright Notice in lua.h */ @@ -348,15 +348,17 @@ static int luaB_unpack (lua_State *L) { static int luaB_select (lua_State *L) { - int i = luaL_checkint(L, 1); int n = lua_gettop(L); - if (i < 0 || i >= n) /* index out of range? */ - return 0; - if (i == 0) + if (lua_type(L, 1) == LUA_TSTRING && *lua_tostring(L, 1) == '#') { lua_pushinteger(L, n-1); - else - lua_pushvalue(L, i+1); - return 1; + return 1; + } + else { + int i = luaL_checkint(L, 1); + if (i <= 0) i = 1; + else if (i >= n) i = n; + return n - i; + } } -- cgit v1.2.3-55-g6feb