aboutsummaryrefslogtreecommitdiff
path: root/ldo.c
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2021-01-19 10:03:13 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2021-01-19 10:03:13 -0300
commit6ccd24eff58340c00db2877c4558a63c6b859442 (patch)
tree4c8f51657d8d1f4921846a23ba4b475db49fd837 /ldo.c
parentd0f34d91373fa265d4445e456e4a10ce206c1559 (diff)
downloadlua-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.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/ldo.c b/ldo.c
index 45cfd592..9e3d6955 100644
--- a/ldo.c
+++ b/ldo.c
@@ -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) {