| 219 | |
| 220 | |
| 221 | void luaD_shrinkstack (lua_State *L) { |
| 222 | int inuse = stackinuse(L); |
| 223 | int goodsize = inuse + (inuse / 8) + 2*EXTRA_STACK; |
| 224 | if (goodsize > LUAI_MAXSTACK) |
| 225 | goodsize = LUAI_MAXSTACK; /* respect stack limit */ |
| 226 | if (L->stacksize > LUAI_MAXSTACK) /* had been handling stack overflow? */ |
| 227 | luaE_freeCI(L); /* free all CIs (list grew because of an error) */ |
| 228 | else |
| 229 | luaE_shrinkCI(L); /* shrink list */ |
| 230 | /* if thread is currently not handling a stack overflow and its |
| 231 | good size is smaller than current size, shrink its stack */ |
| 232 | if (inuse <= (LUAI_MAXSTACK - EXTRA_STACK) && |
| 233 | goodsize < L->stacksize) |
| 234 | luaD_reallocstack(L, goodsize); |
| 235 | else /* don't change stack */ |
| 236 | condmovestack(L,{},{}); /* (change only for debugging) */ |
| 237 | } |
| 238 | |
| 239 | |
| 240 | void luaD_inctop (lua_State *L) { |
no test coverage detected