lua

A copy of the Lua development repository
Log | Files | Refs | README

commit bcb2cb59ac235297e6ef8153ffd414836ae38efd
parent 0b062414831e3794fcdb747e53e9662d112473cf
Author: Roberto Ierusalimschy <roberto@inf.puc-rio.br>
Date:   Mon, 30 Aug 2004 12:28:10 -0300

`select' returns all values after given `n'

Diffstat:
Mlbaselib.c | 18++++++++++--------
1 file changed, 10 insertions(+), 8 deletions(-)

diff --git 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; + } }