summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lobject.c7
-rw-r--r--lobject.h25
-rw-r--r--ltm.c59
3 files changed, 31 insertions, 60 deletions
diff --git a/lobject.c b/lobject.c
index e06e89e5..f8e942b8 100644
--- a/lobject.c
+++ b/lobject.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lobject.c,v 1.1 1997/09/16 19:25:59 roberto Exp roberto $ 2** $Id: lobject.c,v 1.2 1997/09/26 16:46:20 roberto Exp roberto $
3** Some generic functions over Lua objects 3** Some generic functions over Lua objects
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -12,9 +12,8 @@
12 12
13 13
14char *luaO_typenames[] = { /* ORDER LUA_T */ 14char *luaO_typenames[] = { /* ORDER LUA_T */
15 "userdata", "line", "cmark", "mark", "function", "function", 15 "userdata", "number", "string", "table", "function", "function",
16 "prototype", "table", "string", "number", "nil", 16 "nil", "prototype", "mark", "cmark", "line", NULL
17 NULL
18}; 17};
19 18
20 19
diff --git a/lobject.h b/lobject.h
index 132108d3..d07436ad 100644
--- a/lobject.h
+++ b/lobject.h
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lobject.h,v 1.3 1997/09/26 16:46:20 roberto Exp roberto $ 2** $Id: lobject.h,v 1.4 1997/10/16 10:59:34 roberto Exp roberto $
3** Type definitions for Lua objects 3** Type definitions for Lua objects
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -35,20 +35,21 @@ typedef unsigned int IntPoint; /* unsigned with same size as a pointer (for hash
35** grep "ORDER LUA_T" 35** grep "ORDER LUA_T"
36*/ 36*/
37typedef enum { 37typedef enum {
38 LUA_T_NIL = -10, 38 LUA_T_USERDATA = 0, /* tag default for userdata */
39 LUA_T_NUMBER = -9, 39 LUA_T_NUMBER = -1, /* fixed tag for numbers */
40 LUA_T_STRING = -8, 40 LUA_T_STRING = -2, /* fixed tag for strings */
41 LUA_T_ARRAY = -7, /* array==table */ 41 LUA_T_ARRAY = -3, /* tag default for tables (or arrays) */
42 LUA_T_PROTO = -6, 42 LUA_T_FUNCTION = -4, /* fixed tag for functions */
43 LUA_T_FUNCTION = -5, 43 LUA_T_CFUNCTION= -5, /* fixed tag for Cfunctions */
44 LUA_T_CFUNCTION= -4, 44 LUA_T_NIL = -6, /* last "pre-defined" tag */
45 LUA_T_MARK = -3, 45 LUA_T_PROTO = -7,
46 LUA_T_CMARK = -2, 46 LUA_T_MARK = -8,
47 LUA_T_LINE = -1, 47 LUA_T_CMARK = -9,
48 LUA_T_USERDATA = 0 48 LUA_T_LINE = -10
49} lua_Type; 49} lua_Type;
50 50
51#define NUM_TYPES 11 51#define NUM_TYPES 11
52#define NUM_TAGS 7
52 53
53 54
54typedef union { 55typedef union {
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 }