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:
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;
+ }
}