aboutsummaryrefslogtreecommitdiff
path: root/lgc.c
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>1997-12-15 14:17:20 -0200
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>1997-12-15 14:17:20 -0200
commit45e533599f08d849951b49bcab0be4fd735a966d (patch)
treeb8e3b175989f694391dd3da4191894f5df1e7d75 /lgc.c
parent94144a7821c0fa412d5d228ab5197a8ebaaa3c25 (diff)
downloadlua-45e533599f08d849951b49bcab0be4fd735a966d.tar.gz
lua-45e533599f08d849951b49bcab0be4fd735a966d.tar.bz2
lua-45e533599f08d849951b49bcab0be4fd735a966d.zip
optimization: closures without upvalues don't need to be closures
Diffstat (limited to 'lgc.c')
-rw-r--r--lgc.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/lgc.c b/lgc.c
index 19f8623d..1af3cb85 100644
--- a/lgc.c
+++ b/lgc.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lgc.c,v 1.11 1997/12/09 13:35:19 roberto Exp roberto $ 2** $Id: lgc.c,v 1.12 1997/12/11 14:48:46 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*/
@@ -87,13 +87,15 @@ static int ismarked (TObject *o)
87 switch (o->ttype) { 87 switch (o->ttype) {
88 case LUA_T_STRING: case LUA_T_USERDATA: 88 case LUA_T_STRING: case LUA_T_USERDATA:
89 return o->value.ts->head.marked; 89 return o->value.ts->head.marked;
90 case LUA_T_FUNCTION: 90 case LUA_T_CLOSURE:
91 return o->value.cl->head.marked; 91 return o->value.cl->head.marked;
92 case LUA_T_PROTO:
93 return o->value.tf->head.marked;
92 case LUA_T_ARRAY: 94 case LUA_T_ARRAY:
93 return o->value.a->head.marked; 95 return o->value.a->head.marked;
94#ifdef DEBUG 96#ifdef DEBUG
95 case LUA_T_LINE: case LUA_T_MARK: 97 case LUA_T_LINE: case LUA_T_CLMARK:
96 case LUA_T_PROTO: case LUA_T_CPROTO: 98 case LUA_T_CMARK: case LUA_T_PMARK:
97 lua_error("internal error"); 99 lua_error("internal error");
98#endif 100#endif
99 default: /* nil, number or cproto */ 101 default: /* nil, number or cproto */
@@ -180,7 +182,7 @@ static void protomark (TProtoFunc *f)
180} 182}
181 183
182 184
183static void funcmark (Closure *f) 185static void closuremark (Closure *f)
184{ 186{
185 if (!f->head.marked) { 187 if (!f->head.marked) {
186 int i; 188 int i;
@@ -227,10 +229,10 @@ static int markobject (TObject *o)
227 case LUA_T_ARRAY: 229 case LUA_T_ARRAY:
228 hashmark(avalue(o)); 230 hashmark(avalue(o));
229 break; 231 break;
230 case LUA_T_FUNCTION: case LUA_T_MARK: 232 case LUA_T_CLOSURE: case LUA_T_CLMARK:
231 funcmark(o->value.cl); 233 closuremark(o->value.cl);
232 break; 234 break;
233 case LUA_T_PROTO: 235 case LUA_T_PROTO: case LUA_T_PMARK:
234 protomark(o->value.tf); 236 protomark(o->value.tf);
235 break; 237 break;
236 default: break; /* numbers, cprotos, etc */ 238 default: break; /* numbers, cprotos, etc */