commit 102a1be6159b34190813bfd7a7ed6c04633c6200
parent 4c031966976a0ae5d24b709fe94e90dc3fbac9ef
Author: Roberto Ierusalimschy <roberto@inf.puc-rio.br>
Date: Mon, 27 Mar 2000 17:07:40 -0300
no more support for gc TM for tables
Diffstat:
3 files changed, 16 insertions(+), 39 deletions(-)
diff --git a/lbuiltin.c b/lbuiltin.c
@@ -1,5 +1,5 @@
/*
-** $Id: lbuiltin.c,v 1.96 2000/03/10 18:37:44 roberto Exp roberto $
+** $Id: lbuiltin.c,v 1.97 2000/03/24 17:26:08 roberto Exp roberto $
** Built-in functions
** See Copyright Notice in lua.h
*/
@@ -239,10 +239,8 @@ void luaB_settagmethod (lua_State *L) {
lua_Object nf = luaL_nonnullarg(L, 3);
luaL_arg_check(L, lua_isnil(L, nf) || lua_isfunction(L, nf), 3,
"function or nil expected");
-#ifndef LUA_COMPAT_GC
if (strcmp(event, "gc") == 0 && tag != TAG_NIL)
- lua_error(L, "cannot set this `gc' tag method from Lua");
-#endif
+ lua_error(L, "deprecated use: cannot set the `gc' tag method from Lua");
lua_pushobject(L, nf);
lua_pushobject(L, lua_settagmethod(L, tag, event));
}
diff --git a/lgc.c b/lgc.c
@@ -1,5 +1,5 @@
/*
-** $Id: lgc.c,v 1.41 2000/01/28 16:53:00 roberto Exp roberto $
+** $Id: lgc.c,v 1.42 2000/03/10 18:37:44 roberto Exp roberto $
** Garbage Collector
** See Copyright Notice in lua.h
*/
@@ -216,24 +216,6 @@ static void collectstring (lua_State *L, int limit) {
}
-#ifdef LUA_COMPAT_GC
-static void tableTM (lua_State *L) {
- Hash *p;
- TObject o;
- ttype(&o) = TAG_ARRAY;
- for (p = L->roottable; p; p = p->next) {
- if (!p->marked) {
- avalue(&o) = p;
- luaD_gcIM(L, &o);
- }
- }
-}
-#else
-#define tableTM(L) /* do nothing */
-#endif
-
-
-
static void markall (lua_State *L) {
travstack(L); /* mark stack objects */
travglobal(L); /* mark global variable values and names */
@@ -246,7 +228,6 @@ void luaC_collect (lua_State *L, int all) {
int oldah = L->allowhooks;
L->allowhooks = 0; /* stop debug hooks during GC */
L->GCthreshold *= 4; /* to avoid GC during GC */
- tableTM(L); /* call TM for tables (if LUA_COMPAT_GC) */
collecttable(L);
collectstring(L, all?MAX_INT:1);
collectproto(L);
diff --git a/ltm.c b/ltm.c
@@ -1,5 +1,5 @@
/*
-** $Id: ltm.c,v 1.34 2000/03/10 18:37:44 roberto Exp roberto $
+** $Id: ltm.c,v 1.35 2000/03/20 19:14:54 roberto Exp roberto $
** Tag methods
** See Copyright Notice in lua.h
*/
@@ -25,10 +25,12 @@ const char *const luaT_eventname[] = { /* ORDER IM */
};
-static int luaI_checkevent (lua_State *L, const char *name) {
+static int luaI_checkevent (lua_State *L, const char *name, int t) {
int e = luaL_findstring(name, luaT_eventname);
if (e >= IM_N)
luaL_verror(L, "event `%.50s' is deprecated", name);
+ if (e == IM_GC && t == TAG_ARRAY)
+ luaL_verror(L, "event `gc' for tables is deprecated");
if (e < 0)
luaL_verror(L, "`%.50s' is not a valid event name", name);
return e;
@@ -41,20 +43,16 @@ static int luaI_checkevent (lua_State *L, const char *name) {
*/
/* ORDER LUA_T, ORDER IM */
static const char luaT_validevents[NUM_TAGS][IM_N] = {
-{1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1}, /* TAG_USERDATA */
-{1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1}, /* TAG_NUMBER */
-{1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, /* TAG_STRING */
-{0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1}, /* TAG_ARRAY */
-{1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0}, /* TAG_LPROTO */
-{1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0}, /* TAG_CPROTO */
-{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1} /* TAG_NIL */
+ {1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1}, /* TAG_USERDATA */
+ {1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1}, /* TAG_NUMBER */
+ {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, /* TAG_STRING */
+ {0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1}, /* TAG_ARRAY */
+ {1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0}, /* TAG_LPROTO */
+ {1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0}, /* TAG_CPROTO */
+ {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1} /* TAG_NIL */
};
static int luaT_validevent (int t, int e) { /* ORDER LUA_T */
-#ifdef LUA_COMPAT_GC
- if (t == TAG_ARRAY && e == IM_GC)
- return 1; /* old versions allowed gc tag method for tables */
-#endif
return (t > TAG_NIL) ? 1 : luaT_validevents[t][e];
}
@@ -126,7 +124,7 @@ int luaT_effectivetag (lua_State *L, const TObject *o) {
const TObject *luaT_gettagmethod (lua_State *L, int t, const char *event) {
int e;
- e = luaI_checkevent(L, event);
+ e = luaI_checkevent(L, event, t);
checktag(L, t);
if (luaT_validevent(t, e))
return luaT_getim(L, t,e);
@@ -138,7 +136,7 @@ const TObject *luaT_gettagmethod (lua_State *L, int t, const char *event) {
void luaT_settagmethod (lua_State *L, int t, const char *event, TObject *func) {
TObject temp;
int e;
- e = luaI_checkevent(L, event);
+ e = luaI_checkevent(L, event, t);
checktag(L, t);
if (!luaT_validevent(t, e))
luaL_verror(L, "cannot change `%.20s' tag method for type `%.20s'%.20s",