diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2021-01-19 10:03:13 -0300 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2021-01-19 10:03:13 -0300 |
commit | 6ccd24eff58340c00db2877c4558a63c6b859442 (patch) | |
tree | 4c8f51657d8d1f4921846a23ba4b475db49fd837 /ldo.c | |
parent | d0f34d91373fa265d4445e456e4a10ce206c1559 (diff) | |
download | lua-6ccd24eff58340c00db2877c4558a63c6b859442.tar.gz lua-6ccd24eff58340c00db2877c4558a63c6b859442.tar.bz2 lua-6ccd24eff58340c00db2877c4558a63c6b859442.zip |
Simpler handling of errors when creating tbc variables
New field 'lua_State.ptbc' keeps to-be-closed variable until its
upvalue is created, so that it can be closed in case of a
memory-allocation error.
Diffstat (limited to 'ldo.c')
-rw-r--r-- | ldo.c | 1 |
1 files changed, 1 insertions, 0 deletions
@@ -163,6 +163,7 @@ static void correctstack (lua_State *L, StkId oldstack, StkId newstack) { | |||
163 | if (oldstack == newstack) | 163 | if (oldstack == newstack) |
164 | return; /* stack address did not change */ | 164 | return; /* stack address did not change */ |
165 | L->top = (L->top - oldstack) + newstack; | 165 | L->top = (L->top - oldstack) + newstack; |
166 | lua_assert(L->ptbc == NULL); | ||
166 | for (up = L->openupval; up != NULL; up = up->u.open.next) | 167 | for (up = L->openupval; up != NULL; up = up->u.open.next) |
167 | up->v = s2v((uplevel(up) - oldstack) + newstack); | 168 | up->v = s2v((uplevel(up) - oldstack) + newstack); |
168 | for (ci = L->ci; ci != NULL; ci = ci->previous) { | 169 | for (ci = L->ci; ci != NULL; ci = ci->previous) { |