aboutsummaryrefslogtreecommitdiff
path: root/lgc.c
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2005-02-18 10:40:02 -0200
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2005-02-18 10:40:02 -0200
commit7d45a5f48ff32a4e09a1734de23823943d6a6b28 (patch)
treede7bef1faf37d9b639928e5269e89d7112b5b6fa /lgc.c
parent73d764024451c24bc43b8e5102fe90974a86b7f4 (diff)
downloadlua-7d45a5f48ff32a4e09a1734de23823943d6a6b28.tar.gz
lua-7d45a5f48ff32a4e09a1734de23823943d6a6b28.tar.bz2
lua-7d45a5f48ff32a4e09a1734de23823943d6a6b28.zip
C functions and userdata also have environments
Diffstat (limited to 'lgc.c')
-rw-r--r--lgc.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/lgc.c b/lgc.c
index 127260c9..da03498a 100644
--- a/lgc.c
+++ b/lgc.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lgc.c,v 2.24 2005/02/11 20:03:35 roberto Exp roberto $ 2** $Id: lgc.c,v 2.25 2005/02/14 13:19:50 roberto Exp roberto $
3** Garbage Collector 3** Garbage Collector
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -79,6 +79,7 @@ static void reallymarkobject (global_State *g, GCObject *o) {
79 Table *mt = gco2u(o)->metatable; 79 Table *mt = gco2u(o)->metatable;
80 gray2black(o); /* udata are never gray */ 80 gray2black(o); /* udata are never gray */
81 if (mt) markobject(g, mt); 81 if (mt) markobject(g, mt);
82 markobject(g, gco2u(o)->env);
82 return; 83 return;
83 } 84 }
84 case LUA_TUPVAL: { 85 case LUA_TUPVAL: {
@@ -223,6 +224,7 @@ static void traverseproto (global_State *g, Proto *f) {
223 224
224 225
225static void traverseclosure (global_State *g, Closure *cl) { 226static void traverseclosure (global_State *g, Closure *cl) {
227 markobject(g, cl->c.env);
226 if (cl->c.isC) { 228 if (cl->c.isC) {
227 int i; 229 int i;
228 for (i=0; i<cl->c.nupvalues; i++) /* mark its upvalues */ 230 for (i=0; i<cl->c.nupvalues; i++) /* mark its upvalues */
@@ -231,7 +233,6 @@ static void traverseclosure (global_State *g, Closure *cl) {
231 else { 233 else {
232 int i; 234 int i;
233 lua_assert(cl->l.nupvalues == cl->l.p->nups); 235 lua_assert(cl->l.nupvalues == cl->l.p->nups);
234 markobject(g, hvalue(&cl->l.g));
235 markobject(g, cl->l.p); 236 markobject(g, cl->l.p);
236 for (i=0; i<cl->l.nupvalues; i++) /* mark its upvalues */ 237 for (i=0; i<cl->l.nupvalues; i++) /* mark its upvalues */
237 markobject(g, cl->l.upvals[i]); 238 markobject(g, cl->l.upvals[i]);