summaryrefslogtreecommitdiff
path: root/ltm.c
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>1997-10-16 18:07:40 -0200
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>1997-10-16 18:07:40 -0200
commit52d5e8032ce375601a52c0e6fa9b6b72c5327c79 (patch)
treef84ea58ff29a7dac18125e87a4f6a4185682ce42 /ltm.c
parent19c178fa14b7b641637c7be480394ab511a16a13 (diff)
downloadlua-52d5e8032ce375601a52c0e6fa9b6b72c5327c79.tar.gz
lua-52d5e8032ce375601a52c0e6fa9b6b72c5327c79.tar.bz2
lua-52d5e8032ce375601a52c0e6fa9b6b72c5327c79.zip
better identification of types which are tags
Diffstat (limited to 'ltm.c')
-rw-r--r--ltm.c59
1 files changed, 15 insertions, 44 deletions
diff --git a/ltm.c b/ltm.c
index 7e787902..913c4b7d 100644
--- a/ltm.c
+++ b/ltm.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: ltm.c,v 1.1 1997/09/16 19:25:59 roberto Exp roberto $ 2** $Id: ltm.c,v 1.2 1997/09/26 15:02:26 roberto Exp roberto $
3** Tag methods 3** Tag methods
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -14,31 +14,7 @@
14#include "lobject.h" 14#include "lobject.h"
15#include "ltm.h" 15#include "ltm.h"
16 16
17static struct IM init_IM[NUM_TYPES] = { 17static struct IM init_IM[NUM_TAGS] = {
18{{{LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}},
19 {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}},
20 {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}},
21 {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}},
22 {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}},
23 {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}}},
24{{{LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}},
25 {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}},
26 {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}},
27 {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}},
28 {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}},
29 {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}}},
30{{{LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}},
31 {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}},
32 {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}},
33 {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}},
34 {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}},
35 {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}}},
36{{{LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}},
37 {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}},
38 {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}},
39 {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}},
40 {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}},
41 {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}}},
42{{{LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, 18{{{LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}},
43 {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, 19 {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}},
44 {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, 20 {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}},
@@ -89,8 +65,7 @@ static struct IM init_IM[NUM_TYPES] = {
89char *luaT_eventname[] = { /* ORDER IM */ 65char *luaT_eventname[] = { /* ORDER IM */
90 "gettable", "settable", "index", "getglobal", "setglobal", "add", 66 "gettable", "settable", "index", "getglobal", "setglobal", "add",
91 "sub", "mul", "div", "pow", "unm", "lt", "le", "gt", "ge", 67 "sub", "mul", "div", "pow", "unm", "lt", "le", "gt", "ge",
92 "concat", "gc", "function", 68 "concat", "gc", "function", NULL
93 NULL
94}; 69};
95 70
96 71
@@ -105,26 +80,22 @@ static int luaI_checkevent (char *name, char *list[])
105 80
106struct IM *luaT_IMtable = init_IM; 81struct IM *luaT_IMtable = init_IM;
107 82
108static int IMtable_size = NUM_TYPES; 83static int IMtable_size = NUM_TAGS;
109 84
110static int last_tag = -(NUM_TYPES-1); 85static int last_tag = -(NUM_TAGS-1);
111 86
112 87
113/* events in LUA_T_LINE are all allowed, since this is used as a 88/* events in LUA_T_NIL are all allowed, since this is used as a
114* 'placeholder' for "default" fallbacks 89* 'placeholder' for "default" fallbacks
115*/ 90*/
116static char validevents[NUM_TYPES][IM_N] = { /* ORDER LUA_T, ORDER IM */ 91static char validevents[NUM_TAGS][IM_N] = { /* ORDER LUA_T, ORDER IM */
117{1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1}, /* LUA_T_USERDATA */ 92{1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1}, /* LUA_T_USERDATA */
118{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, /* LUA_T_LINE */
119{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* LUA_T_CMARK */
120{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* LUA_T_MARK */
121{1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0}, /* LUA_T_CFUNCTION */
122{1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0}, /* LUA_T_FUNCTION */
123{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* LUA_T_PROTO */
124{0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, /* LUA_T_ARRAY */
125{1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, /* LUA_T_STRING */
126{1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, /* LUA_T_NUMBER */ 93{1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, /* LUA_T_NUMBER */
127{1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1} /* LUA_T_NIL */ 94{1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, /* LUA_T_STRING */
95{0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, /* LUA_T_ARRAY */
96{1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0}, /* LUA_T_FUNCTION */
97{1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0}, /* LUA_T_CFUNCTION */
98{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1} /* LUA_T_NIL */
128}; 99};
129 100
130static int validevent (lua_Type t, int e) 101static int validevent (lua_Type t, int e)
@@ -159,7 +130,7 @@ int lua_newtag (void)
159 130
160 131
161static void checktag (int tag) 132static void checktag (int tag)
162{ /* ORDER LUA_T */ 133{
163 if (!(last_tag <= tag && tag <= 0)) 134 if (!(last_tag <= tag && tag <= 0))
164 luaL_verror("%d is not a valid tag", tag); 135 luaL_verror("%d is not a valid tag", tag);
165} 136}
@@ -289,7 +260,7 @@ void luaT_setfallback (void)
289 } 260 }
290 case 3: { /* old order fallback */ 261 case 3: { /* old order fallback */
291 int i; 262 int i;
292 oldfunc = *luaT_getim(LUA_T_LINE, IM_LT); 263 oldfunc = *luaT_getim(LUA_T_NIL, IM_LT);
293 for (i=IM_LT; i<=IM_GE; i++) /* ORDER IM */ 264 for (i=IM_LT; i<=IM_GE; i++) /* ORDER IM */
294 fillvalids(i, luaA_Address(func)); 265 fillvalids(i, luaA_Address(func));
295 replace = typeFB; 266 replace = typeFB;
@@ -298,7 +269,7 @@ void luaT_setfallback (void)
298 default: { 269 default: {
299 int e; 270 int e;
300 if ((e = luaO_findstring(name, luaT_eventname)) >= 0) { 271 if ((e = luaO_findstring(name, luaT_eventname)) >= 0) {
301 oldfunc = *luaT_getim(LUA_T_LINE, e); 272 oldfunc = *luaT_getim(LUA_T_NIL, e);
302 fillvalids(e, luaA_Address(func)); 273 fillvalids(e, luaA_Address(func));
303 replace = (e == IM_GC || e == IM_INDEX) ? nilFB : typeFB; 274 replace = (e == IM_GC || e == IM_INDEX) ? nilFB : typeFB;
304 } 275 }