code redistribution

This commit is contained in:
Roberto Ierusalimschy
2000-04-14 15:12:35 -03:00
parent c845ec777a
commit 870f61d299
3 changed files with 16 additions and 17 deletions

13
ldo.c
View File

@@ -1,5 +1,5 @@
/* /*
** $Id: ldo.c,v 1.71 2000/03/30 17:19:48 roberto Exp roberto $ ** $Id: ldo.c,v 1.72 2000/03/30 20:55:50 roberto Exp roberto $
** Stack and Call structure of Lua ** Stack and Call structure of Lua
** See Copyright Notice in lua.h ** See Copyright Notice in lua.h
*/ */
@@ -326,17 +326,6 @@ static int do_main (lua_State *L, ZIO *z, int bin) {
} }
void luaD_gcIM (lua_State *L, const TObject *o) {
const TObject *im = luaT_getimbyObj(L, o, IM_GC);
if (ttype(im) != TAG_NIL) {
luaD_checkstack(L, 2);
*(L->top++) = *im;
*(L->top++) = *o;
luaD_call(L, L->top-2, 0);
}
}
#define MAXFILENAME 260 /* maximum part of a file name kept */ #define MAXFILENAME 260 /* maximum part of a file name kept */
int lua_dofile (lua_State *L, const char *filename) { int lua_dofile (lua_State *L, const char *filename) {

3
ldo.h
View File

@@ -1,5 +1,5 @@
/* /*
** $Id: ldo.h,v 1.18 2000/03/24 17:26:08 roberto Exp roberto $ ** $Id: ldo.h,v 1.19 2000/03/29 20:19:20 roberto Exp roberto $
** Stack and Call structure of Lua ** Stack and Call structure of Lua
** See Copyright Notice in lua.h ** See Copyright Notice in lua.h
*/ */
@@ -26,7 +26,6 @@ void luaD_lineHook (lua_State *L, StkId func, int line);
void luaD_call (lua_State *L, StkId func, int nResults); void luaD_call (lua_State *L, StkId func, int nResults);
void luaD_callTM (lua_State *L, const TObject *f, int nParams, int nResults); void luaD_callTM (lua_State *L, const TObject *f, int nParams, int nResults);
int luaD_protectedrun (lua_State *L); int luaD_protectedrun (lua_State *L);
void luaD_gcIM (lua_State *L, const TObject *o);
void luaD_checkstack (lua_State *L, int n); void luaD_checkstack (lua_State *L, int n);

17
lgc.c
View File

@@ -1,5 +1,5 @@
/* /*
** $Id: lgc.c,v 1.45 2000/03/29 20:19:20 roberto Exp roberto $ ** $Id: lgc.c,v 1.46 2000/03/30 20:55:50 roberto Exp roberto $
** Garbage Collector ** Garbage Collector
** See Copyright Notice in lua.h ** See Copyright Notice in lua.h
*/ */
@@ -20,6 +20,17 @@
static void luaD_gcTM (lua_State *L, const TObject *o) {
const TObject *im = luaT_getimbyObj(L, o, IM_GC);
if (ttype(im) != TAG_NIL) {
luaD_checkstack(L, 2);
*(L->top++) = *im;
*(L->top++) = *o;
luaD_call(L, L->top-2, 0);
}
}
static int markobject (lua_State *L, TObject *o); static int markobject (lua_State *L, TObject *o);
@@ -201,7 +212,7 @@ static void collectstring (lua_State *L, int limit) {
else { /* collect */ else { /* collect */
if (next->constindex == -1) { /* is userdata? */ if (next->constindex == -1) { /* is userdata? */
tsvalue(&o) = next; tsvalue(&o) = next;
luaD_gcIM(L, &o); luaD_gcTM(L, &o);
} }
*p = next->nexthash; *p = next->nexthash;
luaS_free(L, next); luaS_free(L, next);
@@ -240,13 +251,13 @@ long lua_collectgarbage (lua_State *L, long limit) {
markall(L); markall(L);
luaR_invalidaterefs(L); luaR_invalidaterefs(L);
luaC_collect(L, 0); luaC_collect(L, 0);
luaD_gcIM(L, &luaO_nilobject); /* GC tag method for nil (signal end of GC) */
recovered = recovered - L->nblocks; recovered = recovered - L->nblocks;
L->GCthreshold = (limit == 0) ? 2*L->nblocks : L->nblocks+limit; L->GCthreshold = (limit == 0) ? 2*L->nblocks : L->nblocks+limit;
if (L->Mbuffsize > L->Mbuffnext*4) { /* is buffer too big? */ if (L->Mbuffsize > L->Mbuffnext*4) { /* is buffer too big? */
L->Mbuffsize /= 2; /* still larger than Mbuffnext*2 */ L->Mbuffsize /= 2; /* still larger than Mbuffnext*2 */
luaM_reallocvector(L, L->Mbuffer, L->Mbuffsize, char); luaM_reallocvector(L, L->Mbuffer, L->Mbuffsize, char);
} }
luaD_gcTM(L, &luaO_nilobject);
return recovered; return recovered;
} }