summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2004-06-04 12:30:53 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2004-06-04 12:30:53 -0300
commit345379b5ff7ce6f5a732a6954bfb5e83bce12036 (patch)
tree2d55667999fe8e4d5986ab8cc13eaeb837657642
parent118e471fa0fd9db1c3a4b966a4312f65d4aa33a7 (diff)
downloadlua-345379b5ff7ce6f5a732a6954bfb5e83bce12036.tar.gz
lua-345379b5ff7ce6f5a732a6954bfb5e83bce12036.tar.bz2
lua-345379b5ff7ce6f5a732a6954bfb5e83bce12036.zip
option for garbage-collector `step'
-rw-r--r--lapi.c11
-rw-r--r--lbaselib.c21
-rw-r--r--lua.h3
3 files changed, 17 insertions, 18 deletions
diff --git a/lapi.c b/lapi.c
index ab0278b4..f5b080fa 100644
--- a/lapi.c
+++ b/lapi.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lapi.c,v 2.9 2004/05/14 19:25:09 roberto Exp roberto $ 2** $Id: lapi.c,v 2.10 2004/05/31 19:41:52 roberto Exp roberto $
3** Lua API 3** Lua API
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -833,6 +833,15 @@ LUA_API int lua_gc (lua_State *L, int what, int data) {
833 /* GC values are expressed in Kbytes: #bytes/2^10 */ 833 /* GC values are expressed in Kbytes: #bytes/2^10 */
834 return cast(int, g->nblocks >> 10); 834 return cast(int, g->nblocks >> 10);
835 } 835 }
836 case LUA_GCSTEP: {
837 lu_mem a = (cast(lu_mem, data) << 10);
838 if (a <= g->nblocks)
839 g->GCthreshold = g->nblocks - a;
840 else
841 g->GCthreshold = 0;
842 luaC_step(L);
843 return 0;
844 }
836 default: return -1; /* invalid option */ 845 default: return -1; /* invalid option */
837 } 846 }
838} 847}
diff --git a/lbaselib.c b/lbaselib.c
index a4c3db6f..aa9a6f1e 100644
--- a/lbaselib.c
+++ b/lbaselib.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lbaselib.c,v 1.144 2004/05/31 18:50:30 roberto Exp roberto $ 2** $Id: lbaselib.c,v 1.145 2004/06/02 14:20:08 roberto Exp roberto $
3** Basic library 3** Basic library
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -180,22 +180,11 @@ static int luaB_gcinfo (lua_State *L) {
180 180
181static int luaB_collectgarbage (lua_State *L) { 181static int luaB_collectgarbage (lua_State *L) {
182 static const char *const opts[] = {"stop", "restart", "collect", "count", 182 static const char *const opts[] = {"stop", "restart", "collect", "count",
183 NULL}; 183 "step", NULL};
184 static const int optsnum[] = {LUA_GCSTOP, LUA_GCRESTART, 184 static const int optsnum[] = {LUA_GCSTOP, LUA_GCRESTART,
185 LUA_GCCOLLECT, LUA_GCCOUNT}; 185 LUA_GCCOLLECT, LUA_GCCOUNT, LUA_GCSTEP};
186 int o; 186 int o = luaL_findstring(luaL_optstring(L, 1, "collect"), opts);
187 int ex; 187 int ex = luaL_optint(L, 2, 0);
188#if 1
189 if (lua_isnumber(L, 1)) {
190 int v = lua_tointeger(L, 1);
191 lua_settop(L, 0);
192 if (v == 0) lua_pushstring(L, "collect");
193 else if (v >= 10000) lua_pushstring(L, "stop");
194 else lua_pushstring(L, "restart");
195 }
196#endif
197 o = luaL_findstring(luaL_optstring(L, 1, "collect"), opts);
198 ex = luaL_optint(L, 2, 0);
199 luaL_argcheck(L, o >= 0, 1, "invalid option"); 188 luaL_argcheck(L, o >= 0, 1, "invalid option");
200 lua_pushinteger(L, lua_gc(L, optsnum[o], ex)); 189 lua_pushinteger(L, lua_gc(L, optsnum[o], ex));
201 return 1; 190 return 1;
diff --git a/lua.h b/lua.h
index 94d4166e..0b5347d6 100644
--- a/lua.h
+++ b/lua.h
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lua.h,v 1.190 2004/05/31 19:41:52 roberto Exp roberto $ 2** $Id: lua.h,v 1.191 2004/06/02 17:37:03 roberto Exp roberto $
3** Lua - An Extensible Extension Language 3** Lua - An Extensible Extension Language
4** Tecgraf: Computer Graphics Technology Group, PUC-Rio, Brazil 4** Tecgraf: Computer Graphics Technology Group, PUC-Rio, Brazil
5** http://www.lua.org mailto:info@lua.org 5** http://www.lua.org mailto:info@lua.org
@@ -217,6 +217,7 @@ LUA_API int lua_resume (lua_State *L, int narg);
217#define LUA_GCRESTART 1 217#define LUA_GCRESTART 1
218#define LUA_GCCOLLECT 2 218#define LUA_GCCOLLECT 2
219#define LUA_GCCOUNT 3 219#define LUA_GCCOUNT 3
220#define LUA_GCSTEP 4
220 221
221LUA_API int lua_gc (lua_State *L, int what, int data); 222LUA_API int lua_gc (lua_State *L, int what, int data);
222 223