| 179 | |
| 180 | |
| 181 | void luaD_callhook (lua_State *L, int event, int line) { |
| 182 | lua_Hook hook = L->hook; |
| 183 | if (hook && L->allowhook) { |
| 184 | ptrdiff_t top = savestack(L, L->top); |
| 185 | ptrdiff_t ci_top = savestack(L, L->ci->top); |
| 186 | lua_Debug ar; |
| 187 | ar.event = event; |
| 188 | ar.currentline = line; |
| 189 | if (event == LUA_HOOKTAILRET) |
| 190 | ar.i_ci = 0; /* tail call; no debug information about it */ |
| 191 | else |
| 192 | ar.i_ci = cast_int(L->ci - L->base_ci); |
| 193 | luaD_checkstack(L, LUA_MINSTACK); /* ensure minimum stack size */ |
| 194 | L->ci->top = L->top + LUA_MINSTACK; |
| 195 | lua_assert(L->ci->top <= L->stack_last); |
| 196 | L->allowhook = 0; /* cannot call hooks inside a hook */ |
| 197 | lua_unlock(L); |
| 198 | (*hook)(L, &ar); |
| 199 | lua_lock(L); |
| 200 | lua_assert(!L->allowhook); |
| 201 | L->allowhook = 1; |
| 202 | L->ci->top = restorestack(L, ci_top); |
| 203 | L->top = restorestack(L, top); |
| 204 | } |
| 205 | } |
| 206 | |
| 207 | |
| 208 | static StkId adjust_varargs (lua_State *L, Proto *p, int actual) { |
no outgoing calls
no test coverage detected