From a048cc9676f3572ebf5d6cc061f87cba85f5a249 Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Fri, 25 Jan 2002 19:55:41 -0200 Subject: [PATCH] nil is a `valid' eventtable --- lapi.c | 8 +++++--- lbaselib.c | 3 ++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/lapi.c b/lapi.c index 65781254..94511e3d 100644 --- 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 index b06cc2b3..87e417aa 100644 --- 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;