aboutsummaryrefslogtreecommitdiff
path: root/table.c
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>1995-10-04 14:13:02 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>1995-10-04 14:13:02 -0300
commit68f337dfa617732646a4a974eb33b25daf45a1e2 (patch)
tree81e72eaf0ada8a2246c6cf1af2d96ddaef41d117 /table.c
parentf132ac03bcaf0163f1f86b5114c93a753e17f28b (diff)
downloadlua-68f337dfa617732646a4a974eb33b25daf45a1e2.tar.gz
lua-68f337dfa617732646a4a974eb33b25daf45a1e2.tar.bz2
lua-68f337dfa617732646a4a974eb33b25daf45a1e2.zip
Garbage collection of functions + header structure for functions
Diffstat (limited to 'table.c')
-rw-r--r--table.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/table.c b/table.c
index be93d833..05f92c15 100644
--- a/table.c
+++ b/table.c
@@ -3,7 +3,7 @@
3** Module to control static tables 3** Module to control static tables
4*/ 4*/
5 5
6char *rcs_table="$Id: table.c,v 2.31 1995/05/16 19:23:55 celes Exp roberto $"; 6char *rcs_table="$Id: table.c,v 2.32 1995/09/15 20:47:53 roberto Exp $";
7 7
8#include <string.h> 8#include <string.h>
9 9
@@ -166,6 +166,8 @@ void lua_markobject (Object *o)
166 tsvalue(o)->marked = 1; 166 tsvalue(o)->marked = 1;
167 else if (tag(o) == LUA_T_ARRAY) 167 else if (tag(o) == LUA_T_ARRAY)
168 lua_hashmark (avalue(o)); 168 lua_hashmark (avalue(o));
169 else if (o->tag == LUA_T_FUNCTION && !o->value.tf->marked)
170 o->value.tf->marked = 1;
169} 171}
170 172
171 173
@@ -182,8 +184,10 @@ void lua_pack (void)
182 lua_travstack(lua_markobject); /* mark stack objects */ 184 lua_travstack(lua_markobject); /* mark stack objects */
183 lua_travsymbol(lua_markobject); /* mark symbol table objects */ 185 lua_travsymbol(lua_markobject); /* mark symbol table objects */
184 luaI_travlock(lua_markobject); /* mark locked objects */ 186 luaI_travlock(lua_markobject); /* mark locked objects */
187 luaI_travfallbacks(lua_markobject); /* mark fallbacks */
185 recovered += lua_strcollector(); 188 recovered += lua_strcollector();
186 recovered += lua_hashcollector(); 189 recovered += lua_hashcollector();
190 recovered += luaI_funccollector();
187 nentity = 0; /* reset counter */ 191 nentity = 0; /* reset counter */
188 block=(16*block-7*recovered)/12; /* adapt block size */ 192 block=(16*block-7*recovered)/12; /* adapt block size */
189 if (block < MIN_GARBAGE_BLOCK) block = MIN_GARBAGE_BLOCK; 193 if (block < MIN_GARBAGE_BLOCK) block = MIN_GARBAGE_BLOCK;