diff options
| author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1997-06-09 14:28:14 -0300 |
|---|---|---|
| committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1997-06-09 14:28:14 -0300 |
| commit | dd22ea4da550c3a158e0f11b928c349336184f85 (patch) | |
| tree | b73e2ae0498c4efa30dee04f710fb1a349f164ed /table.c | |
| parent | 5fdcfeb353d726a9bcd6d4db5dd0b62b9b8e4b02 (diff) | |
| download | lua-dd22ea4da550c3a158e0f11b928c349336184f85.tar.gz lua-dd22ea4da550c3a158e0f11b928c349336184f85.tar.bz2 lua-dd22ea4da550c3a158e0f11b928c349336184f85.zip | |
new implementation for udata (again they are just void *);
new implementation for the API: most operations now do not disturb
structures lua2C and C2lua.
Diffstat (limited to 'table.c')
| -rw-r--r-- | table.c | 17 |
1 files changed, 9 insertions, 8 deletions
| @@ -3,7 +3,7 @@ | |||
| 3 | ** Module to control static tables | 3 | ** Module to control static tables |
| 4 | */ | 4 | */ |
| 5 | 5 | ||
| 6 | char *rcs_table="$Id: table.c,v 2.69 1997/05/14 18:38:29 roberto Exp roberto $"; | 6 | char *rcs_table="$Id: table.c,v 2.70 1997/05/26 14:42:51 roberto Exp roberto $"; |
| 7 | 7 | ||
| 8 | #include "luamem.h" | 8 | #include "luamem.h" |
| 9 | #include "auxlib.h" | 9 | #include "auxlib.h" |
| @@ -59,17 +59,17 @@ void luaI_initconstant (void) | |||
| 59 | */ | 59 | */ |
| 60 | Word luaI_findsymbol (TaggedString *t) | 60 | Word luaI_findsymbol (TaggedString *t) |
| 61 | { | 61 | { |
| 62 | if (t->varindex == NOT_USED) | 62 | if (t->u.s.varindex == NOT_USED) |
| 63 | { | 63 | { |
| 64 | if (lua_ntable == lua_maxsymbol) | 64 | if (lua_ntable == lua_maxsymbol) |
| 65 | lua_maxsymbol = growvector(&lua_table, lua_maxsymbol, Symbol, | 65 | lua_maxsymbol = growvector(&lua_table, lua_maxsymbol, Symbol, |
| 66 | symbolEM, MAX_WORD); | 66 | symbolEM, MAX_WORD); |
| 67 | t->varindex = lua_ntable; | 67 | t->u.s.varindex = lua_ntable; |
| 68 | lua_table[lua_ntable].varname = t; | 68 | lua_table[lua_ntable].varname = t; |
| 69 | s_ttype(lua_ntable) = LUA_T_NIL; | 69 | s_ttype(lua_ntable) = LUA_T_NIL; |
| 70 | lua_ntable++; | 70 | lua_ntable++; |
| 71 | } | 71 | } |
| 72 | return t->varindex; | 72 | return t->u.s.varindex; |
| 73 | } | 73 | } |
| 74 | 74 | ||
| 75 | 75 | ||
| @@ -85,16 +85,16 @@ Word luaI_findsymbolbyname (char *name) | |||
| 85 | */ | 85 | */ |
| 86 | Word luaI_findconstant (TaggedString *t) | 86 | Word luaI_findconstant (TaggedString *t) |
| 87 | { | 87 | { |
| 88 | if (t->constindex == NOT_USED) | 88 | if (t->u.s.constindex == NOT_USED) |
| 89 | { | 89 | { |
| 90 | if (lua_nconstant == lua_maxconstant) | 90 | if (lua_nconstant == lua_maxconstant) |
| 91 | lua_maxconstant = growvector(&lua_constant, lua_maxconstant, TaggedString *, | 91 | lua_maxconstant = growvector(&lua_constant, lua_maxconstant, TaggedString *, |
| 92 | constantEM, MAX_WORD); | 92 | constantEM, MAX_WORD); |
| 93 | t->constindex = lua_nconstant; | 93 | t->u.s.constindex = lua_nconstant; |
| 94 | lua_constant[lua_nconstant] = t; | 94 | lua_constant[lua_nconstant] = t; |
| 95 | lua_nconstant++; | 95 | lua_nconstant++; |
| 96 | } | 96 | } |
| 97 | return t->constindex; | 97 | return t->u.s.constindex; |
| 98 | } | 98 | } |
| 99 | 99 | ||
| 100 | 100 | ||
| @@ -154,7 +154,7 @@ int luaI_ismarked (TObject *o) | |||
| 154 | { | 154 | { |
| 155 | switch (o->ttype) | 155 | switch (o->ttype) |
| 156 | { | 156 | { |
| 157 | case LUA_T_STRING: | 157 | case LUA_T_STRING: case LUA_T_USERDATA: |
| 158 | return o->value.ts->marked; | 158 | return o->value.ts->marked; |
| 159 | case LUA_T_FUNCTION: | 159 | case LUA_T_FUNCTION: |
| 160 | return o->value.tf->marked; | 160 | return o->value.tf->marked; |
| @@ -196,6 +196,7 @@ long lua_collectgarbage (long limit) | |||
| 196 | TaggedString *freestr; | 196 | TaggedString *freestr; |
| 197 | TFunc *freefunc; | 197 | TFunc *freefunc; |
| 198 | markall(); | 198 | markall(); |
| 199 | luaI_invalidaterefs(); | ||
| 199 | freetable = luaI_hashcollector(&recovered); | 200 | freetable = luaI_hashcollector(&recovered); |
| 200 | freestr = luaI_strcollector(&recovered); | 201 | freestr = luaI_strcollector(&recovered); |
| 201 | freefunc = luaI_funccollector(&recovered); | 202 | freefunc = luaI_funccollector(&recovered); |
