diff options
Diffstat (limited to 'ltm.c')
-rw-r--r-- | ltm.c | 83 |
1 files changed, 20 insertions, 63 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: ltm.c,v 1.4 1997/10/24 17:17:24 roberto Exp roberto $ | 2 | ** $Id: ltm.c,v 1.5 1997/11/03 20:45:23 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,53 +14,6 @@ | |||
14 | #include "lobject.h" | 14 | #include "lobject.h" |
15 | #include "ltm.h" | 15 | #include "ltm.h" |
16 | 16 | ||
17 | static 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}}, | ||
43 | {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}}, | ||
45 | {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, | ||
46 | {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, | ||
47 | {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}}}, | ||
48 | {{{LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, | ||
49 | {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, | ||
50 | {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, | ||
51 | {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, | ||
52 | {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, | ||
53 | {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}}}, | ||
54 | {{{LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, | ||
55 | {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, | ||
56 | {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, | ||
57 | {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, | ||
58 | {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, | ||
59 | {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}, {LUA_T_NIL, {NULL}}}} | ||
60 | }; | ||
61 | |||
62 | |||
63 | |||
64 | 17 | ||
65 | char *luaT_eventname[] = { /* ORDER IM */ | 18 | char *luaT_eventname[] = { /* ORDER IM */ |
66 | "gettable", "settable", "index", "getglobal", "setglobal", "add", | 19 | "gettable", "settable", "index", "getglobal", "setglobal", "add", |
@@ -78,11 +31,9 @@ static int luaI_checkevent (char *name, char *list[]) | |||
78 | } | 31 | } |
79 | 32 | ||
80 | 33 | ||
81 | struct IM *luaT_IMtable = init_IM; | 34 | struct IM *luaT_IMtable; |
82 | 35 | static int IMtable_size; | |
83 | static int IMtable_size = NUM_TAGS; | 36 | static int last_tag; |
84 | |||
85 | static int last_tag = -(NUM_TAGS-1); | ||
86 | 37 | ||
87 | 38 | ||
88 | /* events in LUA_T_NIL are all allowed, since this is used as a | 39 | /* events in LUA_T_NIL are all allowed, since this is used as a |
@@ -98,6 +49,7 @@ static char validevents[NUM_TAGS][IM_N] = { /* ORDER LUA_T, ORDER IM */ | |||
98 | {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1} /* LUA_T_NIL */ | 49 | {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1} /* LUA_T_NIL */ |
99 | }; | 50 | }; |
100 | 51 | ||
52 | |||
101 | static int validevent (lua_Type t, int e) | 53 | static int validevent (lua_Type t, int e) |
102 | { /* ORDER LUA_T */ | 54 | { /* ORDER LUA_T */ |
103 | return (t < LUA_T_NIL) ? 1 : validevents[-t][e]; | 55 | return (t < LUA_T_NIL) ? 1 : validevents[-t][e]; |
@@ -111,19 +63,24 @@ static void init_entry (int tag) | |||
111 | ttype(luaT_getim(tag, i)) = LUA_T_NIL; | 63 | ttype(luaT_getim(tag, i)) = LUA_T_NIL; |
112 | } | 64 | } |
113 | 65 | ||
66 | |||
67 | void luaT_init (void) | ||
68 | { | ||
69 | int t; | ||
70 | IMtable_size = NUM_TAGS; | ||
71 | last_tag = -(NUM_TAGS-1); | ||
72 | luaT_IMtable = luaM_newvector(IMtable_size, struct IM); | ||
73 | for (t=last_tag; t<=0; t++) | ||
74 | init_entry(t); | ||
75 | } | ||
76 | |||
77 | |||
114 | int lua_newtag (void) | 78 | int lua_newtag (void) |
115 | { | 79 | { |
116 | --last_tag; | 80 | --last_tag; |
117 | if ((-last_tag) >= IMtable_size) { | 81 | if ((-last_tag) >= IMtable_size) |
118 | if (luaT_IMtable == init_IM) { /* fist time? */ | 82 | IMtable_size = luaM_growvector(&luaT_IMtable, IMtable_size, |
119 | IMtable_size *= 2; | 83 | struct IM, memEM, MAX_INT); |
120 | luaT_IMtable = luaM_newvector(IMtable_size, struct IM); | ||
121 | memcpy(luaT_IMtable, init_IM, sizeof(init_IM)); | ||
122 | } | ||
123 | else | ||
124 | IMtable_size = luaM_growvector(&luaT_IMtable, IMtable_size, | ||
125 | struct IM, memEM, MAX_INT); | ||
126 | } | ||
127 | init_entry(last_tag); | 84 | init_entry(last_tag); |
128 | return last_tag; | 85 | return last_tag; |
129 | } | 86 | } |