| 438 | |
| 439 | |
| 440 | static void checkstack (global_State *g, lua_State *L1) { |
| 441 | StkId o; |
| 442 | CallInfo *ci; |
| 443 | UpVal *uv; |
| 444 | assert(!isdead(g, L1)); |
| 445 | if (L1->stack.p == NULL) { /* incomplete thread? */ |
| 446 | assert(L1->openupval == NULL && L1->ci == NULL); |
| 447 | return; |
| 448 | } |
| 449 | for (uv = L1->openupval; uv != NULL; uv = uv->u.open.next) |
| 450 | assert(upisopen(uv)); /* must be open */ |
| 451 | assert(L1->top.p <= L1->stack_last.p); |
| 452 | assert(L1->tbclist.p <= L1->top.p); |
| 453 | for (ci = L1->ci; ci != NULL; ci = ci->previous) { |
| 454 | assert(ci->top.p <= L1->stack_last.p); |
| 455 | assert(lua_checkpc(ci)); |
| 456 | } |
| 457 | for (o = L1->stack.p; o < L1->stack_last.p; o++) |
| 458 | checkliveness(L1, s2v(o)); /* entire stack must have valid values */ |
| 459 | } |
| 460 | |
| 461 | |
| 462 | static void checkrefs (global_State *g, GCObject *o) { |
no test coverage detected