From dd22ea4da550c3a158e0f11b928c349336184f85 Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy <roberto@inf.puc-rio.br> Date: Mon, 9 Jun 1997 14:28:14 -0300 Subject: new implementation for udata (again they are just void *); new implementation for the API: most operations now do not disturb structures lua2C and C2lua. --- fallback.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) (limited to 'fallback.c') diff --git a/fallback.c b/fallback.c index 834e2dcd..4aed4690 100644 --- a/fallback.c +++ b/fallback.c @@ -3,7 +3,7 @@ ** TecCGraf - PUC-Rio */ -char *rcs_fallback="$Id: fallback.c,v 2.4 1997/04/07 14:48:53 roberto Exp roberto $"; +char *rcs_fallback="$Id: fallback.c,v 2.5 1997/04/24 22:59:57 roberto Exp roberto $"; #include <stdio.h> #include <string.h> @@ -116,16 +116,20 @@ struct IM *luaI_IMtable = NULL; static int IMtable_size = 0; static int last_tag = LUA_T_NIL; /* ORDER LUA_T */ + +/* events in LUA_T_LINE are all allowed, since this is used as a +* 'placeholder' for "default" fallbacks +*/ static char validevents[NUM_TYPES][IM_N] = { /* ORDER LUA_T, ORDER IM */ -{1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, /* LUA_T_USERDATA */ -{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* LUA_T_LINE */ +{1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1}, /* LUA_T_USERDATA */ +{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, /* LUA_T_LINE */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* LUA_T_CMARK */ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* LUA_T_MARK */ {1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0}, /* LUA_T_CFUNCTION */ {1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0}, /* LUA_T_FUNCTION */ {0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, /* LUA_T_ARRAY */ {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, /* LUA_T_STRING */ -{1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1}, /* LUA_T_NUMBER */ +{1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1}, /* LUA_T_NUMBER */ {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0} /* LUA_T_NIL */ }; @@ -186,6 +190,9 @@ void luaI_settag (int tag, TObject *o) case LUA_T_ARRAY: o->value.a->htag = tag; break; + case LUA_T_USERDATA: + o->value.ts->tag = tag; + break; default: luaL_verror("cannot change the tag of a %s", luaI_typenames[-ttype(o)]); } @@ -318,7 +325,7 @@ void luaI_setfallback (void) break; case 2: { /* old arith fallback */ int i; - oldfunc = *luaI_getim(LUA_T_USERDATA, IM_POW); + oldfunc = *luaI_getim(LUA_T_NUMBER, IM_POW); for (i=IM_ADD; i<=IM_UNM; i++) /* ORDER IM */ fillvalids(i, luaI_Address(func)); replace = typeFB; @@ -326,7 +333,7 @@ void luaI_setfallback (void) } case 3: { /* old order fallback */ int i; - oldfunc = *luaI_getim(LUA_T_USERDATA, IM_LT); + oldfunc = *luaI_getim(LUA_T_LINE, IM_LT); for (i=IM_LT; i<=IM_GE; i++) /* ORDER IM */ fillvalids(i, luaI_Address(func)); replace = typeFB; @@ -335,7 +342,7 @@ void luaI_setfallback (void) default: { int e; if ((e = luaI_findstring(name, luaI_eventname)) >= 0) { - oldfunc = *luaI_getim(LUA_T_USERDATA, e); + oldfunc = *luaI_getim(LUA_T_LINE, e); fillvalids(e, luaI_Address(func)); replace = (e == IM_GC || e == IM_INDEX) ? nilFB : typeFB; } -- cgit v1.2.3-55-g6feb