aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2000-04-14 15:12:35 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2000-04-14 15:12:35 -0300
commit870f61d2998cc9a998b9599997ae8975879d9314 (patch)
treee87398ff6bcf367357d7e6813332568247136a9c
parentc845ec777a29e434da6ceee50de9d5a6dfa40ea7 (diff)
downloadlua-870f61d2998cc9a998b9599997ae8975879d9314.tar.gz
lua-870f61d2998cc9a998b9599997ae8975879d9314.tar.bz2
lua-870f61d2998cc9a998b9599997ae8975879d9314.zip
code redistribution
-rw-r--r--ldo.c13
-rw-r--r--ldo.h3
-rw-r--r--lgc.c17
3 files changed, 16 insertions, 17 deletions
diff --git a/ldo.c b/ldo.c
index 08245fba..9791c7f5 100644
--- a/ldo.c
+++ b/ldo.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: ldo.c,v 1.71 2000/03/30 17:19:48 roberto Exp roberto $ 2** $Id: ldo.c,v 1.72 2000/03/30 20:55:50 roberto Exp roberto $
3** Stack and Call structure of Lua 3** Stack and Call structure of Lua
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -326,17 +326,6 @@ static int do_main (lua_State *L, ZIO *z, int bin) {
326} 326}
327 327
328 328
329void luaD_gcIM (lua_State *L, const TObject *o) {
330 const TObject *im = luaT_getimbyObj(L, o, IM_GC);
331 if (ttype(im) != TAG_NIL) {
332 luaD_checkstack(L, 2);
333 *(L->top++) = *im;
334 *(L->top++) = *o;
335 luaD_call(L, L->top-2, 0);
336 }
337}
338
339
340#define MAXFILENAME 260 /* maximum part of a file name kept */ 329#define MAXFILENAME 260 /* maximum part of a file name kept */
341 330
342int lua_dofile (lua_State *L, const char *filename) { 331int lua_dofile (lua_State *L, const char *filename) {
diff --git a/ldo.h b/ldo.h
index f2e6ce5f..a137699e 100644
--- a/ldo.h
+++ b/ldo.h
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: ldo.h,v 1.18 2000/03/24 17:26:08 roberto Exp roberto $ 2** $Id: ldo.h,v 1.19 2000/03/29 20:19:20 roberto Exp roberto $
3** Stack and Call structure of Lua 3** Stack and Call structure of Lua
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -26,7 +26,6 @@ void luaD_lineHook (lua_State *L, StkId func, int line);
26void luaD_call (lua_State *L, StkId func, int nResults); 26void luaD_call (lua_State *L, StkId func, int nResults);
27void luaD_callTM (lua_State *L, const TObject *f, int nParams, int nResults); 27void luaD_callTM (lua_State *L, const TObject *f, int nParams, int nResults);
28int luaD_protectedrun (lua_State *L); 28int luaD_protectedrun (lua_State *L);
29void luaD_gcIM (lua_State *L, const TObject *o);
30void luaD_checkstack (lua_State *L, int n); 29void luaD_checkstack (lua_State *L, int n);
31 30
32 31
diff --git a/lgc.c b/lgc.c
index e1885570..ac213df2 100644
--- a/lgc.c
+++ b/lgc.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lgc.c,v 1.45 2000/03/29 20:19:20 roberto Exp roberto $ 2** $Id: lgc.c,v 1.46 2000/03/30 20:55: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*/
@@ -20,6 +20,17 @@
20 20
21 21
22 22
23static void luaD_gcTM (lua_State *L, const TObject *o) {
24 const TObject *im = luaT_getimbyObj(L, o, IM_GC);
25 if (ttype(im) != TAG_NIL) {
26 luaD_checkstack(L, 2);
27 *(L->top++) = *im;
28 *(L->top++) = *o;
29 luaD_call(L, L->top-2, 0);
30 }
31}
32
33
23static int markobject (lua_State *L, TObject *o); 34static int markobject (lua_State *L, TObject *o);
24 35
25 36
@@ -201,7 +212,7 @@ static void collectstring (lua_State *L, int limit) {
201 else { /* collect */ 212 else { /* collect */
202 if (next->constindex == -1) { /* is userdata? */ 213 if (next->constindex == -1) { /* is userdata? */
203 tsvalue(&o) = next; 214 tsvalue(&o) = next;
204 luaD_gcIM(L, &o); 215 luaD_gcTM(L, &o);
205 } 216 }
206 *p = next->nexthash; 217 *p = next->nexthash;
207 luaS_free(L, next); 218 luaS_free(L, next);
@@ -240,13 +251,13 @@ long lua_collectgarbage (lua_State *L, long limit) {
240 markall(L); 251 markall(L);
241 luaR_invalidaterefs(L); 252 luaR_invalidaterefs(L);
242 luaC_collect(L, 0); 253 luaC_collect(L, 0);
243 luaD_gcIM(L, &luaO_nilobject); /* GC tag method for nil (signal end of GC) */
244 recovered = recovered - L->nblocks; 254 recovered = recovered - L->nblocks;
245 L->GCthreshold = (limit == 0) ? 2*L->nblocks : L->nblocks+limit; 255 L->GCthreshold = (limit == 0) ? 2*L->nblocks : L->nblocks+limit;
246 if (L->Mbuffsize > L->Mbuffnext*4) { /* is buffer too big? */ 256 if (L->Mbuffsize > L->Mbuffnext*4) { /* is buffer too big? */
247 L->Mbuffsize /= 2; /* still larger than Mbuffnext*2 */ 257 L->Mbuffsize /= 2; /* still larger than Mbuffnext*2 */
248 luaM_reallocvector(L, L->Mbuffer, L->Mbuffsize, char); 258 luaM_reallocvector(L, L->Mbuffer, L->Mbuffsize, char);
249 } 259 }
260 luaD_gcTM(L, &luaO_nilobject);
250 return recovered; 261 return recovered;
251} 262}
252 263