aboutsummaryrefslogtreecommitdiff
path: root/lstate.c
diff options
context:
space:
mode:
Diffstat (limited to 'lstate.c')
-rw-r--r--lstate.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/lstate.c b/lstate.c
index 70a11aae..7d341991 100644
--- a/lstate.c
+++ b/lstate.c
@@ -68,14 +68,19 @@ void luaE_setdebt (global_State *g, l_mem debt) {
68} 68}
69 69
70 70
71CallInfo *luaE_extendCI (lua_State *L) { 71CallInfo *luaE_extendCI (lua_State *L, int err) {
72 CallInfo *ci; 72 CallInfo *ci;
73 lua_assert(L->ci->next == NULL); 73 ci = luaM_reallocvector(L, NULL, 0, 1, CallInfo);
74 ci = luaM_new(L, CallInfo); 74 if (l_unlikely(ci == NULL)) { /* allocation failed? */
75 lua_assert(L->ci->next == NULL); 75 if (err)
76 L->ci->next = ci; 76 luaM_error(L); /* raise the error */
77 return NULL; /* else only report it */
78 }
79 ci->next = L->ci->next;
77 ci->previous = L->ci; 80 ci->previous = L->ci;
78 ci->next = NULL; 81 L->ci->next = ci;
82 if (ci->next)
83 ci->next->previous = ci;
79 ci->u.l.trap = 0; 84 ci->u.l.trap = 0;
80 L->nci++; 85 L->nci++;
81 return ci; 86 return ci;