diff options
| author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1997-11-04 13:27:53 -0200 |
|---|---|---|
| committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1997-11-04 13:27:53 -0200 |
| commit | 45cad43c3fedb13a5e424429fe94dc78ba01a118 (patch) | |
| tree | e5dae021aa66accc06b6941add38bf2d495c6440 /ltm.c | |
| parent | dad5a01fb07e8a654f195ec3a9ca271cd5ee32e3 (diff) | |
| download | lua-45cad43c3fedb13a5e424429fe94dc78ba01a118.tar.gz lua-45cad43c3fedb13a5e424429fe94dc78ba01a118.tar.bz2 lua-45cad43c3fedb13a5e424429fe94dc78ba01a118.zip | |
"lua_open": now lua has an explicit open operation.
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 | } |
