浏览代码

nil is a `valid' eventtable

Roberto Ierusalimschy 23 年之前
父节点
当前提交
a048cc9676
共有 2 个文件被更改,包括 7 次插入4 次删除
  1. 5 3
      lapi.c
  2. 2 1
      lbaselib.c

+ 5 - 3
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:

+ 2 - 1
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;