|
@ -1,5 +1,5 @@ |
|
|
/*
|
|
|
/*
|
|
|
** $Id: lgc.c,v 1.5 1997/10/23 16:26:37 roberto Exp roberto $ |
|
|
** $Id: lgc.c,v 1.6 1997/10/24 17:17:24 roberto Exp roberto $ |
|
|
** Garbage Collector |
|
|
** Garbage Collector |
|
|
** See Copyright Notice in lua.h |
|
|
** See Copyright Notice in lua.h |
|
|
*/ |
|
|
*/ |
|
@ -66,9 +66,8 @@ void lua_unref (int ref) |
|
|
|
|
|
|
|
|
TObject* luaC_getref (int ref) |
|
|
TObject* luaC_getref (int ref) |
|
|
{ |
|
|
{ |
|
|
static TObject nul = {LUA_T_NIL, {0}}; |
|
|
|
|
|
if (ref == -1) |
|
|
if (ref == -1) |
|
|
return &nul; |
|
|
return &luaO_nilobject; |
|
|
if (ref >= 0 && ref < refSize && |
|
|
if (ref >= 0 && ref < refSize && |
|
|
(refArray[ref].status == LOCK || refArray[ref].status == HOLD)) |
|
|
(refArray[ref].status == LOCK || refArray[ref].status == HOLD)) |
|
|
return &refArray[ref].o; |
|
|
return &refArray[ref].o; |
|
@ -240,14 +239,6 @@ static int markobject (TObject *o) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static void call_nilIM (void) |
|
|
|
|
|
{ /* signals end of garbage collection */ |
|
|
|
|
|
TObject t; |
|
|
|
|
|
ttype(&t) = LUA_T_NIL; |
|
|
|
|
|
luaD_gcIM(&t); /* end of list */ |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#define GARBAGE_BLOCK 150 |
|
|
#define GARBAGE_BLOCK 150 |
|
|
|
|
|
|
|
@ -279,7 +270,7 @@ long lua_collectgarbage (long limit) |
|
|
luaC_threshold *= 4; /* to avoid GC during GC */ |
|
|
luaC_threshold *= 4; /* to avoid GC during GC */ |
|
|
hashcallIM(freetable); /* GC tag methods for tables */ |
|
|
hashcallIM(freetable); /* GC tag methods for tables */ |
|
|
strcallIM(freestr); /* GC tag methods for userdata */ |
|
|
strcallIM(freestr); /* GC tag methods for userdata */ |
|
|
call_nilIM(); /* GC tag method for nil (signal end of GC) */ |
|
|
luaD_gcIM(&luaO_nilobject); /* GC tag method for nil (signal end of GC) */ |
|
|
luaH_free(freetable); |
|
|
luaH_free(freetable); |
|
|
luaS_free(freestr); |
|
|
luaS_free(freestr); |
|
|
luaF_freeproto(freefunc); |
|
|
luaF_freeproto(freefunc); |
|
|