diff options
Diffstat (limited to 'ltests.c')
| -rw-r--r-- | ltests.c | 12 |
1 files changed, 7 insertions, 5 deletions
| @@ -419,17 +419,19 @@ static void checkstack (global_State *g, lua_State *L1) { | |||
| 419 | CallInfo *ci; | 419 | CallInfo *ci; |
| 420 | UpVal *uv; | 420 | UpVal *uv; |
| 421 | lua_assert(!isdead(g, L1)); | 421 | lua_assert(!isdead(g, L1)); |
| 422 | if (L1->stack == NULL) { /* incomplete thread? */ | ||
| 423 | lua_assert(L1->stacksize == 0 && L1->openupval == NULL && | ||
| 424 | L1->ci == NULL); | ||
| 425 | return; | ||
| 426 | } | ||
| 422 | for (uv = L1->openupval; uv != NULL; uv = uv->u.open.next) | 427 | for (uv = L1->openupval; uv != NULL; uv = uv->u.open.next) |
| 423 | lua_assert(upisopen(uv)); /* must be open */ | 428 | lua_assert(upisopen(uv)); /* must be open */ |
| 424 | for (ci = L1->ci; ci != NULL; ci = ci->previous) { | 429 | for (ci = L1->ci; ci != NULL; ci = ci->previous) { |
| 425 | lua_assert(ci->top <= L1->stack_last); | 430 | lua_assert(ci->top <= L1->stack_last); |
| 426 | lua_assert(lua_checkpc(ci)); | 431 | lua_assert(lua_checkpc(ci)); |
| 427 | } | 432 | } |
| 428 | if (L1->stack) { /* complete thread? */ | 433 | for (o = L1->stack; o < L1->stack_last + EXTRA_STACK; o++) |
| 429 | for (o = L1->stack; o < L1->stack_last + EXTRA_STACK; o++) | 434 | checkliveness(L1, s2v(o)); /* entire stack must have valid values */ |
| 430 | checkliveness(L1, s2v(o)); /* entire stack must have valid values */ | ||
| 431 | } | ||
| 432 | else lua_assert(L1->stacksize == 0); | ||
| 433 | } | 435 | } |
| 434 | 436 | ||
| 435 | 437 | ||
