code redistribution
This commit is contained in:
13
ldo.c
13
ldo.c
@@ -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
3
ldo.h
@@ -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
17
lgc.c
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user