From fd22ccd6d020bca1039626ee0c7de42b237a5686 Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy <roberto@inf.puc-rio.br> Date: Fri, 20 Jan 2012 20:05:50 -0200 Subject: object tag keeps variant bits too -> no need for 'isC' field in Closures + more strick typing for closure variants --- ltests.c | 41 +++++++++++++++++++++++------------------ 1 file changed, 23 insertions(+), 18 deletions(-) (limited to 'ltests.c') diff --git a/ltests.c b/ltests.c index 33266f38..7b4c0e17 100644 --- a/ltests.c +++ b/ltests.c @@ -1,5 +1,5 @@ /* -** $Id: ltests.c,v 2.123 2011/09/24 21:11:29 roberto Exp roberto $ +** $Id: ltests.c,v 2.124 2011/11/09 19:08:07 roberto Exp roberto $ ** Internal Module for Debugging of the Lua Implementation ** See Copyright Notice in lua.h */ @@ -267,22 +267,23 @@ static void checkproto (global_State *g, Proto *f) { -static void checkclosure (global_State *g, Closure *cl) { +static void checkCclosure (global_State *g, CClosure *cl) { GCObject *clgc = obj2gco(cl); - if (cl->c.isC) { - int i; - for (i=0; i<cl->c.nupvalues; i++) - checkvalref(g, clgc, &cl->c.upvalue[i]); - } - else { - int i; - lua_assert(cl->l.nupvalues == cl->l.p->sizeupvalues); - checkobjref(g, clgc, cl->l.p); - for (i=0; i<cl->l.nupvalues; i++) { - if (cl->l.upvals[i]) { - lua_assert(cl->l.upvals[i]->tt == LUA_TUPVAL); - checkobjref(g, clgc, cl->l.upvals[i]); - } + int i; + for (i = 0; i < cl->nupvalues; i++) + checkvalref(g, clgc, &cl->upvalue[i]); +} + + +static void checkLclosure (global_State *g, LClosure *cl) { + GCObject *clgc = obj2gco(cl); + int i; + lua_assert(cl->nupvalues == cl->p->sizeupvalues); + checkobjref(g, clgc, cl->p); + for (i=0; i<cl->nupvalues; i++) { + if (cl->upvals[i]) { + lua_assert(cl->upvals[i]->tt == LUA_TUPVAL); + checkobjref(g, clgc, cl->upvals[i]); } } } @@ -347,8 +348,12 @@ static void checkobject (global_State *g, GCObject *o) { checkstack(g, gco2th(o)); break; } - case LUA_TFUNCTION: { - checkclosure(g, gco2cl(o)); + case LUA_TLCL: { + checkLclosure(g, gco2lcl(o)); + break; + } + case LUA_TCCL: { + checkCclosure(g, gco2ccl(o)); break; } case LUA_TPROTO: { -- cgit v1.2.3-55-g6feb