summaryrefslogtreecommitdiff
path: root/lgc.c
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2001-02-07 16:13:49 -0200
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2001-02-07 16:13:49 -0200
commit7178a5e34aa56c09a01a6664bb7a61c6771700d4 (patch)
tree318a1dd14cd5a0497229183e56e29198b3b2016c /lgc.c
parent322b7b5fc55da0d166efc693cfe674220190b010 (diff)
downloadlua-github-7178a5e34aa56c09a01a6664bb7a61c6771700d4.tar.gz
new way to handle top x L->top
Diffstat (limited to 'lgc.c')
-rw-r--r--lgc.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/lgc.c b/lgc.c
index c8331b69..77927940 100644
--- a/lgc.c
+++ b/lgc.c
@@ -1,5 +1,5 @@
/*
-** $Id: lgc.c,v 1.86 2001/02/02 16:23:20 roberto Exp roberto $
+** $Id: lgc.c,v 1.87 2001/02/02 16:32:00 roberto Exp roberto $
** Garbage Collector
** See Copyright Notice in lua.h
*/
@@ -101,11 +101,14 @@ static void markobject (GCState *st, TObject *o) {
static void markstacks (lua_State *L, GCState *st) {
lua_State *L1 = L;
do { /* for each thread */
- StkId o;
+ StkId o, lim;
marktable(st, L1->gt); /* mark table of globals */
for (o=L1->stack; o<L1->top; o++)
markobject(st, o);
- lua_assert(L->previous->next == L && L->next->previous == L);
+ lim = (L1->stack_last - L1->top > MAXSTACK) ? L1->top+MAXSTACK
+ : L1->stack_last;
+ for (; o<=lim; o++) setnilvalue(o);
+ lua_assert(L1->previous->next == L1 && L1->next->previous == L1);
L1 = L1->next;
} while (L1 != L);
}