lua

A copy of the Lua development repository
Log | Files | Refs | README

commit 0969a971cd41921bd5ee72c1da880455bcca3bb4
parent be6d215f674f3d148d3f80a0553e8b2aa6da51d7
Author: Roberto Ierusalimschy <roberto@inf.puc-rio.br>
Date:   Mon,  9 Mar 1998 18:49:31 -0300

better use of "ASSERT".

Diffstat:
Mlapi.c | 4++--
Mlbuiltin.c | 6+++---
Mlgc.c | 8+++++---
Mlmem.c | 6+++---
Mlobject.c | 4++--
Mlobject.h | 13++++++++++++-
Mltm.c | 4++--
Mlua.stx | 4+++-
Mlvm.c | 4++--
9 files changed, 34 insertions(+), 19 deletions(-)

diff --git a/lapi.c b/lapi.c @@ -1,5 +1,5 @@ /* -** $Id: lapi.c,v 1.22 1998/03/06 16:54:42 roberto Exp roberto $ +** $Id: lapi.c,v 1.23 1998/03/06 18:47:42 roberto Exp roberto $ ** Lua API ** See Copyright Notice in lua.h */ @@ -404,7 +404,7 @@ int lua_tag (lua_Object lo) return o->value.cl->consts[0].ttype; #ifdef DEBUG case LUA_T_LINE: - lua_error("internal error"); + LUA_INTERNALERROR("invalid type"); #endif default: return t; diff --git a/lbuiltin.c b/lbuiltin.c @@ -1,5 +1,5 @@ /* -** $Id: lbuiltin.c,v 1.25 1998/02/12 19:27:10 roberto Exp roberto $ +** $Id: lbuiltin.c,v 1.26 1998/03/06 16:54:42 roberto Exp roberto $ ** Built-in functions ** See Copyright Notice in lua.h */ @@ -160,8 +160,8 @@ static char *to_string (lua_Object obj) } case LUA_T_NIL: return "nil"; - default: - lua_error("internal error"); + default: + LUA_INTERNALERROR("invalid type"); return NULL; /* to avoid warnings */ } } diff --git a/lgc.c b/lgc.c @@ -1,5 +1,5 @@ /* -** $Id: lgc.c,v 1.16 1998/01/19 19:49:22 roberto Exp roberto $ +** $Id: lgc.c,v 1.17 1998/03/06 16:54:42 roberto Exp roberto $ ** Garbage Collector ** See Copyright Notice in lua.h */ @@ -96,7 +96,7 @@ static int ismarked (TObject *o) #ifdef DEBUG case LUA_T_LINE: case LUA_T_CLMARK: case LUA_T_CMARK: case LUA_T_PMARK: - lua_error("internal error"); + LUA_INTERNALERROR("invalid type"); #endif default: /* nil, number or cproto */ return 1; @@ -212,11 +212,13 @@ static void hashmark (Hash *h) static void globalmark (void) { TaggedString *g; - for (g=(TaggedString *)L->rootglobal.next; g; g=(TaggedString *)g->head.next) + for (g=(TaggedString *)L->rootglobal.next; g; g=(TaggedString *)g->head.next){ + LUA_ASSERT(g->constindex >= 0, "userdata in global list"); if (g->u.s.globalval.ttype != LUA_T_NIL) { markobject(&g->u.s.globalval); strmark(g); /* cannot collect non nil global variables */ } + } } diff --git a/lmem.c b/lmem.c @@ -1,5 +1,5 @@ /* -** $Id: lmem.c,v 1.3 1997/12/01 20:30:44 roberto Exp roberto $ +** $Id: lmem.c,v 1.4 1997/12/17 20:48:58 roberto Exp roberto $ ** Interface to Memory Manager ** See Copyright Notice in lua.h */ @@ -57,7 +57,6 @@ void *luaM_realloc (void *block, unsigned long size) #else /* DEBUG */ -#include <assert.h> #include <string.h> @@ -71,7 +70,8 @@ static void *checkblock (void *block) { unsigned long *b = (unsigned long *)block - 1; unsigned long size = *b; - assert(*(((char *)b)+size+sizeof(unsigned long)) == MARK); + LUA_ASSERT(*(((char *)b)+size+sizeof(unsigned long)) == MARK, + "corrupted block"); numblocks--; totalmem -= size; return b; diff --git a/lobject.c b/lobject.c @@ -1,5 +1,5 @@ /* -** $Id: lobject.c,v 1.9 1997/12/26 18:38:16 roberto Exp roberto $ +** $Id: lobject.c,v 1.10 1998/01/09 14:44:55 roberto Exp roberto $ ** Some generic functions over Lua objects ** See Copyright Notice in lua.h */ @@ -52,7 +52,7 @@ int luaO_equalObj (TObject *t1, TObject *t2) case LUA_T_CPROTO: return fvalue(t1) == fvalue(t2); case LUA_T_CLOSURE: return t1->value.cl == t2->value.cl; default: - lua_error("internal error in `lua_equalObj'"); + LUA_INTERNALERROR("invalid type"); return 0; /* UNREACHEABLE */ } } diff --git a/lobject.h b/lobject.h @@ -1,5 +1,5 @@ /* -** $Id: lobject.h,v 1.16 1998/01/19 19:49:22 roberto Exp roberto $ +** $Id: lobject.h,v 1.17 1998/03/06 16:54:42 roberto Exp $ ** Type definitions for Lua objects ** See Copyright Notice in lua.h */ @@ -13,6 +13,17 @@ #include "lua.h" +#ifdef DEBUG +#include "lauxlib.h" +#define LUA_INTERNALERROR(s) \ + luaL_verror("INTERNAL ERROR - %s [%s:%d]",(s),__FILE__,__LINE__) +#define LUA_ASSERT(c,s) { if (!(c)) LUA_INTERNALERROR(s); } +#else +#define LUA_INTERNALERROR(s) /* empty */ +#define LUA_ASSERT(c,s) /* empty */ +#endif + + /* ** "real" is the type "number" of Lua ** GREP LUA_NUMBER to change that diff --git a/ltm.c b/ltm.c @@ -1,5 +1,5 @@ /* -** $Id: ltm.c,v 1.12 1997/12/15 16:17:20 roberto Exp roberto $ +** $Id: ltm.c,v 1.13 1998/01/02 17:46:32 roberto Exp roberto $ ** Tag methods ** See Copyright Notice in lua.h */ @@ -123,7 +123,7 @@ int luaT_efectivetag (TObject *o) #ifdef DEBUG case LUA_T_PMARK: case LUA_T_CMARK: case LUA_T_CLMARK: case LUA_T_LINE: - lua_error("internal error"); + LUA_INTERNALERROR("invalid type"); #endif default: return t; diff --git a/lua.stx b/lua.stx @@ -1,6 +1,6 @@ %{ /* -** $Id: lua.stx,v 1.33 1998/01/12 13:35:37 roberto Exp roberto $ +** $Id: lua.stx,v 1.34 1998/02/11 20:56:46 roberto Exp roberto $ ** Syntax analizer and code generator ** See Copyright Notice in lua.h */ @@ -679,6 +679,8 @@ chunk : statlist ret ; statlist : /* empty */ | statlist stat sc + { LUA_ASSERT(L->currState->stacksize == L->currState->nlocalvar, + "stack size != # local vars"); } ; sc : /* empty */ | ';' ; diff --git a/lvm.c b/lvm.c @@ -1,5 +1,5 @@ /* -** $Id: lvm.c,v 1.23 1998/01/14 13:49:15 roberto Exp roberto $ +** $Id: lvm.c,v 1.24 1998/03/06 16:54:42 roberto Exp roberto $ ** Lua virtual machine ** See Copyright Notice in lua.h */ @@ -728,7 +728,7 @@ StkId luaV_execute (Closure *cl, TProtoFunc *tf, StkId base) #ifdef DEBUG default: - lua_error("internal error - opcode doesn't match"); + LUA_INTERNALERROR("opcode doesn't match"); #endif } }