`select' returns all values after given `n'

This commit is contained in:
Roberto Ierusalimschy 2004-08-30 12:28:32 -03:00
parent 0b06241483
commit bcb2cb59ac
1 changed files with 10 additions and 8 deletions

View File

@ -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 ** Basic library
** See Copyright Notice in lua.h ** See Copyright Notice in lua.h
*/ */
@ -348,15 +348,17 @@ static int luaB_unpack (lua_State *L) {
static int luaB_select (lua_State *L) { static int luaB_select (lua_State *L) {
int i = luaL_checkint(L, 1);
int n = lua_gettop(L); int n = lua_gettop(L);
if (i < 0 || i >= n) /* index out of range? */ if (lua_type(L, 1) == LUA_TSTRING && *lua_tostring(L, 1) == '#') {
return 0;
if (i == 0)
lua_pushinteger(L, n-1); lua_pushinteger(L, n-1);
else return 1;
lua_pushvalue(L, i+1); }
return 1; else {
int i = luaL_checkint(L, 1);
if (i <= 0) i = 1;
else if (i >= n) i = n;
return n - i;
}
} }