commit a048cc9676f3572ebf5d6cc061f87cba85f5a249
parent eb262bc61754670d45fb030432932c599cdef2d6
Author: Roberto Ierusalimschy <roberto@inf.puc-rio.br>
Date: Fri, 25 Jan 2002 19:55:19 -0200
nil is a `valid' eventtable
Diffstat:
2 files changed, 7 insertions(+), 4 deletions(-)
diff --git a/lapi.c b/lapi.c
@@ -35,7 +35,7 @@ const char lua_ident[] =
#define api_checknelems(L, n) api_check(L, (n) <= (L->top - L->ci->base))
-#define api_incr_top(L) incr_top
+#define api_incr_top(L) incr_top(L)
@@ -81,7 +81,7 @@ static TObject *luaA_indexAcceptable (lua_State *L, int index) {
void luaA_pushobject (lua_State *L, const TObject *o) {
setobj(L->top, o);
- incr_top;
+ incr_top(L);
}
LUA_API int lua_stackspace (lua_State *L) {
@@ -335,7 +335,7 @@ LUA_API void lua_pushcclosure (lua_State *L, lua_CFunction fn, int n) {
while (n--)
setobj(&cl->c.upvalue[n], L->top+n);
setclvalue(L->top, cl);
- incr_top;
+ api_incr_top(L);
lua_unlock(L);
}
@@ -494,6 +494,8 @@ LUA_API void lua_seteventtable (lua_State *L, int objindex) {
api_checknelems(L, 1);
obj = luaA_indexAcceptable(L, objindex);
et = --L->top;
+ if (ttype(et) == LUA_TNIL)
+ et = defaultet(L);
api_check(L, ttype(et) == LUA_TTABLE);
switch (ttype(obj)) {
case LUA_TTABLE:
diff --git a/lbaselib.c b/lbaselib.c
@@ -140,8 +140,9 @@ static int luaB_eventtable (lua_State *L) {
if (lua_isnone(L, 2))
lua_geteventtable(L, 1);
else {
+ int t = lua_type(L, 2);
+ luaL_arg_check(L, t == LUA_TNIL || t == LUA_TTABLE, 2, "nil/table expected");
lua_settop(L, 2);
- luaL_check_type(L, 2, LUA_TTABLE);
lua_seteventtable(L, 1);
}
return 1;