diff options
| author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1997-03-24 14:13:22 -0300 |
|---|---|---|
| committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1997-03-24 14:13:22 -0300 |
| commit | 03d917f229107d788df93c940d87b5908194248a (patch) | |
| tree | 6662f817a9314b0b7668687c7a721cbf7c62a81d | |
| parent | c3488f51152ea2705ef6a256de7756cbeaf044f6 (diff) | |
| download | lua-03d917f229107d788df93c940d87b5908194248a.tar.gz lua-03d917f229107d788df93c940d87b5908194248a.tar.bz2 lua-03d917f229107d788df93c940d87b5908194248a.zip | |
some corrections, improvements;
| -rw-r--r-- | fallback.c | 38 | ||||
| -rw-r--r-- | fallback.h | 4 |
2 files changed, 22 insertions, 20 deletions
| @@ -3,7 +3,7 @@ | |||
| 3 | ** TecCGraf - PUC-Rio | 3 | ** TecCGraf - PUC-Rio |
| 4 | */ | 4 | */ |
| 5 | 5 | ||
| 6 | char *rcs_fallback="$Id: fallback.c,v 1.31 1997/03/20 20:36:19 roberto Exp roberto $"; | 6 | char *rcs_fallback="$Id: fallback.c,v 1.32 1997/03/21 18:37:28 roberto Exp roberto $"; |
| 7 | 7 | ||
| 8 | #include <stdio.h> | 8 | #include <stdio.h> |
| 9 | #include <string.h> | 9 | #include <string.h> |
| @@ -28,6 +28,7 @@ static char *typenames[] = { /* ORDER LUA_T */ | |||
| 28 | void luaI_type (void) | 28 | void luaI_type (void) |
| 29 | { | 29 | { |
| 30 | lua_Object o = lua_getparam(1); | 30 | lua_Object o = lua_getparam(1); |
| 31 | luaL_arg_check(o != LUA_NOOBJECT, "type", 1, "no argument"); | ||
| 31 | lua_pushstring(typenames[-ttype(luaI_Address(o))]); | 32 | lua_pushstring(typenames[-ttype(luaI_Address(o))]); |
| 32 | lua_pushnumber(lua_tag(o)); | 33 | lua_pushnumber(lua_tag(o)); |
| 33 | } | 34 | } |
| @@ -125,15 +126,14 @@ static int findstring (char *name, char *list[]) | |||
| 125 | for (i=0; list[i]; i++) | 126 | for (i=0; list[i]; i++) |
| 126 | if (strcmp(list[i], name) == 0) | 127 | if (strcmp(list[i], name) == 0) |
| 127 | return i; | 128 | return i; |
| 128 | /* name not found */ | 129 | return -1; /* name not found */ |
| 129 | return -1; | ||
| 130 | } | 130 | } |
| 131 | 131 | ||
| 132 | static int luaI_checkevent (char *name, char *list[]) | 132 | static int luaI_checkevent (char *name, char *list[]) |
| 133 | { | 133 | { |
| 134 | int e = findstring(name, list); | 134 | int e = findstring(name, list); |
| 135 | if (e < 0) | 135 | if (e < 0) |
| 136 | lua_error("invalid event name"); | 136 | luaL_verror("invalid event name `%s'", name); |
| 137 | return e; | 137 | return e; |
| 138 | } | 138 | } |
| 139 | 139 | ||
| @@ -144,7 +144,7 @@ static struct IM { | |||
| 144 | } *luaI_IMtable = NULL; | 144 | } *luaI_IMtable = NULL; |
| 145 | 145 | ||
| 146 | static int IMtable_size = 0; | 146 | static int IMtable_size = 0; |
| 147 | static int last_tag = LUA_T_NIL; | 147 | static int last_tag = LUA_T_NIL; /* ORDER LUA_T */ |
| 148 | 148 | ||
| 149 | static char validevents[NUM_TYPES][IM_N] = { /* ORDER LUA_T, ORDER IM */ | 149 | static char validevents[NUM_TYPES][IM_N] = { /* ORDER LUA_T, ORDER IM */ |
| 150 | {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, /* LUA_T_USERDATA */ | 150 | {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, /* LUA_T_USERDATA */ |
| @@ -204,12 +204,9 @@ int lua_newtag (char *t) | |||
| 204 | } | 204 | } |
| 205 | 205 | ||
| 206 | 206 | ||
| 207 | #define validtag(tag) (last_tag <= (tag) && (tag) <= 0) | ||
| 208 | |||
| 209 | |||
| 210 | static void checktag (int tag) | 207 | static void checktag (int tag) |
| 211 | { | 208 | { |
| 212 | if (!validtag(tag)) | 209 | if (!(last_tag <= (tag) && (tag) <= 0)) |
| 213 | lua_error("invalid tag"); | 210 | lua_error("invalid tag"); |
| 214 | } | 211 | } |
| 215 | 212 | ||
| @@ -232,6 +229,7 @@ void luaI_settag (int tag, Object *o) | |||
| 232 | o->value.ts->tag = tag; | 229 | o->value.ts->tag = tag; |
| 233 | } | 230 | } |
| 234 | 231 | ||
| 232 | |||
| 235 | int luaI_tag (Object *o) | 233 | int luaI_tag (Object *o) |
| 236 | { | 234 | { |
| 237 | lua_Type t = ttype(o); | 235 | lua_Type t = ttype(o); |
| @@ -242,6 +240,7 @@ int luaI_tag (Object *o) | |||
| 242 | else return t; | 240 | else return t; |
| 243 | } | 241 | } |
| 244 | 242 | ||
| 243 | |||
| 245 | Object *luaI_getim (int tag, IMS event) | 244 | Object *luaI_getim (int tag, IMS event) |
| 246 | { | 245 | { |
| 247 | if (tag > LUA_T_USERDATA) | 246 | if (tag > LUA_T_USERDATA) |
| @@ -249,10 +248,6 @@ Object *luaI_getim (int tag, IMS event) | |||
| 249 | return &luaI_IMtable[-tag].int_method[event]; | 248 | return &luaI_IMtable[-tag].int_method[event]; |
| 250 | } | 249 | } |
| 251 | 250 | ||
| 252 | Object *luaI_getimbyObj (Object *o, IMS event) | ||
| 253 | { | ||
| 254 | return luaI_getim(luaI_tag(o), event); | ||
| 255 | } | ||
| 256 | 251 | ||
| 257 | void luaI_setintmethod (void) | 252 | void luaI_setintmethod (void) |
| 258 | { | 253 | { |
| @@ -288,11 +283,18 @@ void luaI_setglobalmethod (void) | |||
| 288 | } | 283 | } |
| 289 | 284 | ||
| 290 | char *luaI_travfallbacks (int (*fn)(Object *)) | 285 | char *luaI_travfallbacks (int (*fn)(Object *)) |
| 291 | { /* ?????????? | 286 | { |
| 292 | int i; | 287 | int e; |
| 293 | for (i=0; i<N_FB; i++) | 288 | for (e=GIM_ERROR; e<=GIM_SETGLOBAL; e++) { /* ORDER GIM */ |
| 294 | if (fn(&luaI_fallBacks[i].function)) | 289 | if (fn(&gmethod[e])) |
| 295 | return luaI_fallBacks[i].kind; */ | 290 | return geventname[e]; |
| 291 | } | ||
| 292 | for (e=IM_GETTABLE; e<=IM_FUNCTION; e++) { /* ORDER IM */ | ||
| 293 | int t; | ||
| 294 | for (t=0; t>=last_tag; t--) | ||
| 295 | if (fn(&luaI_IMtable[-t].int_method[e])) | ||
| 296 | return luaI_eventname[e]; | ||
| 297 | } | ||
| 296 | return NULL; | 298 | return NULL; |
| 297 | } | 299 | } |
| 298 | 300 | ||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: fallback.h,v 1.15 1997/03/19 19:41:10 roberto Exp roberto $ | 2 | ** $Id: fallback.h,v 1.16 1997/03/20 19:20:43 roberto Exp roberto $ |
| 3 | */ | 3 | */ |
| 4 | 4 | ||
| 5 | #ifndef fallback_h | 5 | #ifndef fallback_h |
| @@ -59,8 +59,8 @@ void luaI_type (void); | |||
| 59 | void luaI_settag (int tag, Object *o); | 59 | void luaI_settag (int tag, Object *o); |
| 60 | lua_Type luaI_typetag (int tag); | 60 | lua_Type luaI_typetag (int tag); |
| 61 | Object *luaI_getim (int tag, IMS event); | 61 | Object *luaI_getim (int tag, IMS event); |
| 62 | #define luaI_getimbyObj(o,e) (luaI_getim(luaI_tag(o),(e))) | ||
| 62 | Object *luaI_getgim (IMGS event); | 63 | Object *luaI_getgim (IMGS event); |
| 63 | Object *luaI_getimbyObj (Object *o, IMS event); | ||
| 64 | int luaI_tag (Object *o); | 64 | int luaI_tag (Object *o); |
| 65 | void luaI_setintmethod (void); | 65 | void luaI_setintmethod (void); |
| 66 | void luaI_setglobalmethod (void); | 66 | void luaI_setglobalmethod (void); |
