diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1997-04-04 19:24:51 -0300 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1997-04-04 19:24:51 -0300 |
commit | 42fa305649199712aad1c96beadb944b01277e3f (patch) | |
tree | d20afcf78aebc8b7fad91ce4e3b9061c2a29b000 | |
parent | 9319735744404831f7153653930d56826a4d2f6a (diff) | |
download | lua-42fa305649199712aad1c96beadb944b01277e3f.tar.gz lua-42fa305649199712aad1c96beadb944b01277e3f.tar.bz2 lua-42fa305649199712aad1c96beadb944b01277e3f.zip |
better error messages;
better names for some API functions.
-rw-r--r-- | fallback.c | 33 | ||||
-rw-r--r-- | fallback.h | 8 | ||||
-rw-r--r-- | inout.c | 47 | ||||
-rw-r--r-- | iolib.c | 12 | ||||
-rw-r--r-- | lua.c | 6 | ||||
-rw-r--r-- | lua.h | 30 | ||||
-rw-r--r-- | mathlib.c | 4 | ||||
-rw-r--r-- | opcode.c | 41 | ||||
-rw-r--r-- | opcode.h | 4 | ||||
-rw-r--r-- | strlib.c | 22 |
10 files changed, 107 insertions, 100 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.38 1997/04/02 23:04:12 roberto Exp roberto $"; | 6 | char *rcs_fallback="$Id: fallback.c,v 2.1 1997/04/03 18:24:23 roberto Exp roberto $"; |
7 | 7 | ||
8 | #include <stdio.h> | 8 | #include <stdio.h> |
9 | #include <string.h> | 9 | #include <string.h> |
@@ -115,7 +115,7 @@ static int luaI_checkevent (char *name, char *list[]) | |||
115 | { | 115 | { |
116 | int e = findstring(name, list); | 116 | int e = findstring(name, list); |
117 | if (e < 0) | 117 | if (e < 0) |
118 | luaL_verror("invalid event name `%s'", name); | 118 | luaL_verror("`%s' is not a valid event name", name); |
119 | return e; | 119 | return e; |
120 | } | 120 | } |
121 | 121 | ||
@@ -180,17 +180,19 @@ int lua_newtag (void) | |||
180 | static void checktag (int tag) | 180 | static void checktag (int tag) |
181 | { | 181 | { |
182 | if (!(last_tag <= tag && tag <= 0)) | 182 | if (!(last_tag <= tag && tag <= 0)) |
183 | lua_error("invalid tag"); | 183 | luaL_verror("%d is not a valid tag", tag); |
184 | } | 184 | } |
185 | 185 | ||
186 | int luaI_userdatatag (int tag) | 186 | void luaI_realtag (int tag) |
187 | { | 187 | { |
188 | return (tag >= 0 || (last_tag <= tag && tag < LUA_T_NIL)); | 188 | if (!(last_tag <= tag && tag < LUA_T_NIL)) |
189 | luaL_verror("tag %d is not result of `newtag'", tag); | ||
189 | } | 190 | } |
190 | 191 | ||
191 | 192 | ||
192 | void luaI_settag (int tag, TObject *o) | 193 | void luaI_settag (int tag, TObject *o) |
193 | { | 194 | { |
195 | luaI_realtag(tag); | ||
194 | switch (ttype(o)) { | 196 | switch (ttype(o)) { |
195 | case LUA_T_ARRAY: | 197 | case LUA_T_ARRAY: |
196 | o->value.a->htag = tag; | 198 | o->value.a->htag = tag; |
@@ -199,7 +201,7 @@ void luaI_settag (int tag, TObject *o) | |||
199 | o->value.ts->tag = tag; | 201 | o->value.ts->tag = tag; |
200 | break; | 202 | break; |
201 | default: | 203 | default: |
202 | lua_error("settag: cannot change tag of given object"); | 204 | luaL_verror("cannot change tag of a %s", luaI_typenames[-ttype(o)]); |
203 | } | 205 | } |
204 | } | 206 | } |
205 | 207 | ||
@@ -223,25 +225,26 @@ TObject *luaI_getim (int tag, IMS event) | |||
223 | } | 225 | } |
224 | 226 | ||
225 | 227 | ||
226 | void luaI_getintmethod (void) | 228 | void luaI_gettagmethod (void) |
227 | { | 229 | { |
228 | int t = (int)luaL_check_number(1, "getintmethod"); | 230 | int t = (int)luaL_check_number(1, "gettagmethod"); |
229 | int e = luaI_checkevent(luaL_check_string(2, "getintmethod"), luaI_eventname); | 231 | int e = luaI_checkevent(luaL_check_string(2, "gettagmethod"), luaI_eventname); |
230 | checktag(t); | 232 | checktag(t); |
231 | if (validevent(t, e)) | 233 | if (validevent(t, e)) |
232 | luaI_pushobject(&luaI_IMtable[-t].int_method[e]); | 234 | luaI_pushobject(&luaI_IMtable[-t].int_method[e]); |
233 | } | 235 | } |
234 | 236 | ||
235 | 237 | ||
236 | void luaI_setintmethod (void) | 238 | void luaI_settagmethod (void) |
237 | { | 239 | { |
238 | int t = (int)luaL_check_number(1, "setintmethod"); | 240 | int t = (int)luaL_check_number(1, "settagmethod"); |
239 | int e = luaI_checkevent(luaL_check_string(2, "setintmethod"), luaI_eventname); | 241 | int e = luaI_checkevent(luaL_check_string(2, "settagmethod"), luaI_eventname); |
240 | lua_Object func = lua_getparam(3); | 242 | lua_Object func = lua_getparam(3); |
241 | checktag(t); | 243 | checktag(t); |
242 | if (!validevent(t, e)) | 244 | if (!validevent(t, e)) |
243 | lua_error("cannot change this internal method"); | 245 | luaL_verror("cannot change internal method `%s' for tag %d", |
244 | luaL_arg_check(lua_isnil(func) || lua_isfunction(func), "setintmethod", | 246 | luaI_eventname[e], t); |
247 | luaL_arg_check(lua_isnil(func) || lua_isfunction(func), "settagmethod", | ||
245 | 3, "function expected"); | 248 | 3, "function expected"); |
246 | luaI_pushobject(&luaI_IMtable[-t].int_method[e]); | 249 | luaI_pushobject(&luaI_IMtable[-t].int_method[e]); |
247 | luaI_IMtable[-t].int_method[e] = *luaI_Address(func); | 250 | luaI_IMtable[-t].int_method[e] = *luaI_Address(func); |
@@ -352,7 +355,7 @@ void luaI_setfallback (void) | |||
352 | replace = typeFB; | 355 | replace = typeFB; |
353 | } | 356 | } |
354 | else { | 357 | else { |
355 | lua_error("invalid fallback name"); | 358 | luaL_verror("`%s' is not a valid fallback name", name); |
356 | replace = NULL; /* to avoid warnings */ | 359 | replace = NULL; /* to avoid warnings */ |
357 | } | 360 | } |
358 | if (oldfunc.ttype != LUA_T_NIL) | 361 | if (oldfunc.ttype != LUA_T_NIL) |
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: fallback.h,v 1.20 1997/04/02 22:52:42 roberto Exp roberto $ | 2 | ** $Id: fallback.h,v 1.21 1997/04/02 23:04:12 roberto Exp roberto $ |
3 | */ | 3 | */ |
4 | 4 | ||
5 | #ifndef fallback_h | 5 | #ifndef fallback_h |
@@ -46,13 +46,13 @@ void luaI_invalidaterefs (void); | |||
46 | char *luaI_travfallbacks (int (*fn)(TObject *)); | 46 | char *luaI_travfallbacks (int (*fn)(TObject *)); |
47 | 47 | ||
48 | void luaI_settag (int tag, TObject *o); | 48 | void luaI_settag (int tag, TObject *o); |
49 | int luaI_userdatatag (int tag); | 49 | void luaI_realtag (int tag); |
50 | TObject *luaI_getim (int tag, IMS event); | 50 | TObject *luaI_getim (int tag, IMS event); |
51 | #define luaI_getimbyObj(o,e) (luaI_getim(luaI_tag(o),(e))) | 51 | #define luaI_getimbyObj(o,e) (luaI_getim(luaI_tag(o),(e))) |
52 | TObject *luaI_geterrorim (void); | 52 | TObject *luaI_geterrorim (void); |
53 | int luaI_tag (TObject *o); | 53 | int luaI_tag (TObject *o); |
54 | void luaI_setintmethod (void); | 54 | void luaI_settagmethod (void); |
55 | void luaI_getintmethod (void); | 55 | void luaI_gettagmethod (void); |
56 | void luaI_seterrormethod (void); | 56 | void luaI_seterrormethod (void); |
57 | void luaI_initfallbacks (void); | 57 | void luaI_initfallbacks (void); |
58 | 58 | ||
@@ -5,7 +5,7 @@ | |||
5 | ** Also provides some predefined lua functions. | 5 | ** Also provides some predefined lua functions. |
6 | */ | 6 | */ |
7 | 7 | ||
8 | char *rcs_inout="$Id: inout.c,v 2.53 1997/04/02 22:53:35 roberto Exp roberto $"; | 8 | char *rcs_inout="$Id: inout.c,v 2.54 1997/04/02 23:04:12 roberto Exp roberto $"; |
9 | 9 | ||
10 | #include <stdio.h> | 10 | #include <stdio.h> |
11 | #include <string.h> | 11 | #include <string.h> |
@@ -28,7 +28,7 @@ Word lua_linenumber; | |||
28 | char *lua_parsedfile; | 28 | char *lua_parsedfile; |
29 | 29 | ||
30 | 30 | ||
31 | static char *typenames[] = { /* ORDER LUA_T */ | 31 | char *luaI_typenames[] = { /* ORDER LUA_T */ |
32 | "userdata", "line", "cmark", "mark", "function", | 32 | "userdata", "line", "cmark", "mark", "function", |
33 | "function", "table", "string", "number", "nil", | 33 | "function", "table", "string", "number", "nil", |
34 | NULL | 34 | NULL |
@@ -95,8 +95,7 @@ void lua_openstring (char *s) | |||
95 | char buff[SIZE_PREF+25]; | 95 | char buff[SIZE_PREF+25]; |
96 | lua_setinput(stringinput); | 96 | lua_setinput(stringinput); |
97 | st = s; | 97 | st = s; |
98 | strcpy(buff, "(dostring) >> "); | 98 | sprintf(buff, "(dostring) >> %.20s", s); |
99 | strncat(buff, s, SIZE_PREF); | ||
100 | if (strlen(s) > SIZE_PREF) strcat(buff, "..."); | 99 | if (strlen(s) > SIZE_PREF) strcat(buff, "..."); |
101 | lua_parsedfile = luaI_createfixedstring(buff)->str; | 100 | lua_parsedfile = luaI_createfixedstring(buff)->str; |
102 | } | 101 | } |
@@ -148,7 +147,7 @@ static char *tostring (lua_Object obj) | |||
148 | return lua_getstring(obj); | 147 | return lua_getstring(obj); |
149 | case LUA_T_ARRAY: case LUA_T_FUNCTION: | 148 | case LUA_T_ARRAY: case LUA_T_FUNCTION: |
150 | case LUA_T_CFUNCTION: case LUA_T_NIL: | 149 | case LUA_T_CFUNCTION: case LUA_T_NIL: |
151 | return typenames[-ttype(o)]; | 150 | return luaI_typenames[-ttype(o)]; |
152 | case LUA_T_USERDATA: { | 151 | case LUA_T_USERDATA: { |
153 | char *buff = luaI_buffer(100); | 152 | char *buff = luaI_buffer(100); |
154 | int size = o->value.ts->size; | 153 | int size = o->value.ts->size; |
@@ -181,7 +180,7 @@ static void luaI_type (void) | |||
181 | { | 180 | { |
182 | lua_Object o = lua_getparam(1); | 181 | lua_Object o = lua_getparam(1); |
183 | luaL_arg_check(o != LUA_NOOBJECT, "type", 1, "no argument"); | 182 | luaL_arg_check(o != LUA_NOOBJECT, "type", 1, "no argument"); |
184 | lua_pushstring(typenames[-ttype(luaI_Address(o))]); | 183 | lua_pushstring(luaI_typenames[-ttype(luaI_Address(o))]); |
185 | lua_pushnumber(lua_tag(o)); | 184 | lua_pushnumber(lua_tag(o)); |
186 | } | 185 | } |
187 | 186 | ||
@@ -219,12 +218,12 @@ static void luaI_setglobal (void) | |||
219 | lua_pushobject(value); /* return given value */ | 218 | lua_pushobject(value); /* return given value */ |
220 | } | 219 | } |
221 | 220 | ||
222 | static void luaI_basicsetglobal (void) | 221 | static void luaI_rawsetglobal (void) |
223 | { | 222 | { |
224 | lua_Object value = lua_getparam(2); | 223 | lua_Object value = lua_getparam(2); |
225 | luaL_arg_check(value != LUA_NOOBJECT, "basicsetglobal", 2, NULL); | 224 | luaL_arg_check(value != LUA_NOOBJECT, "rawsetglobal", 2, NULL); |
226 | lua_pushobject(value); | 225 | lua_pushobject(value); |
227 | lua_basicsetglobal(luaL_check_string(1, "basicsetglobal")); | 226 | lua_rawsetglobal(luaL_check_string(1, "rawsetglobal")); |
228 | lua_pushobject(value); /* return given value */ | 227 | lua_pushobject(value); /* return given value */ |
229 | } | 228 | } |
230 | 229 | ||
@@ -233,9 +232,9 @@ static void luaI_getglobal (void) | |||
233 | lua_pushobject(lua_getglobal(luaL_check_string(1, "getglobal"))); | 232 | lua_pushobject(lua_getglobal(luaL_check_string(1, "getglobal"))); |
234 | } | 233 | } |
235 | 234 | ||
236 | static void luaI_basicgetglobal (void) | 235 | static void luaI_rawgetglobal (void) |
237 | { | 236 | { |
238 | lua_pushobject(lua_basicgetglobal(luaL_check_string(1, "basicgetglobal"))); | 237 | lua_pushobject(lua_rawgetglobal(luaL_check_string(1, "rawgetglobal"))); |
239 | } | 238 | } |
240 | 239 | ||
241 | static void luatag (void) | 240 | static void luatag (void) |
@@ -291,28 +290,28 @@ static void luaIl_newtag (void) | |||
291 | lua_pushnumber(lua_newtag()); | 290 | lua_pushnumber(lua_newtag()); |
292 | } | 291 | } |
293 | 292 | ||
294 | static void basicindex (void) | 293 | static void rawgettable (void) |
295 | { | 294 | { |
296 | lua_Object t = lua_getparam(1); | 295 | lua_Object t = lua_getparam(1); |
297 | lua_Object i = lua_getparam(2); | 296 | lua_Object i = lua_getparam(2); |
298 | luaL_arg_check(t != LUA_NOOBJECT, "basicindex", 1, NULL); | 297 | luaL_arg_check(t != LUA_NOOBJECT, "rawgettable", 1, NULL); |
299 | luaL_arg_check(i != LUA_NOOBJECT, "basicindex", 2, NULL); | 298 | luaL_arg_check(i != LUA_NOOBJECT, "rawgettable", 2, NULL); |
300 | lua_pushobject(t); | 299 | lua_pushobject(t); |
301 | lua_pushobject(i); | 300 | lua_pushobject(i); |
302 | lua_pushobject(lua_basicindex()); | 301 | lua_pushobject(lua_rawgettable()); |
303 | } | 302 | } |
304 | 303 | ||
305 | static void basicstoreindex (void) | 304 | static void rawsettable (void) |
306 | { | 305 | { |
307 | lua_Object t = lua_getparam(1); | 306 | lua_Object t = lua_getparam(1); |
308 | lua_Object i = lua_getparam(2); | 307 | lua_Object i = lua_getparam(2); |
309 | lua_Object v = lua_getparam(3); | 308 | lua_Object v = lua_getparam(3); |
310 | luaL_arg_check(t != LUA_NOOBJECT && i != LUA_NOOBJECT && v != LUA_NOOBJECT, | 309 | luaL_arg_check(t != LUA_NOOBJECT && i != LUA_NOOBJECT && v != LUA_NOOBJECT, |
311 | "basicindex", 0, NULL); | 310 | "rawsettable", 0, NULL); |
312 | lua_pushobject(t); | 311 | lua_pushobject(t); |
313 | lua_pushobject(i); | 312 | lua_pushobject(i); |
314 | lua_pushobject(v); | 313 | lua_pushobject(v); |
315 | lua_basicstoreindex(); | 314 | lua_rawsettable(); |
316 | } | 315 | } |
317 | 316 | ||
318 | 317 | ||
@@ -325,10 +324,6 @@ static struct { | |||
325 | lua_CFunction func; | 324 | lua_CFunction func; |
326 | } int_funcs[] = { | 325 | } int_funcs[] = { |
327 | {"assert", luaI_assert}, | 326 | {"assert", luaI_assert}, |
328 | {"basicgetglobal", luaI_basicgetglobal}, | ||
329 | {"basicindex", basicindex}, | ||
330 | {"basicsetglobal", luaI_basicsetglobal}, | ||
331 | {"basicstoreindex", basicstoreindex}, | ||
332 | {"call", luaI_call}, | 327 | {"call", luaI_call}, |
333 | {"dofile", lua_internaldofile}, | 328 | {"dofile", lua_internaldofile}, |
334 | {"dostring", lua_internaldostring}, | 329 | {"dostring", lua_internaldostring}, |
@@ -338,11 +333,15 @@ static struct { | |||
338 | {"next", lua_next}, | 333 | {"next", lua_next}, |
339 | {"nextvar", luaI_nextvar}, | 334 | {"nextvar", luaI_nextvar}, |
340 | {"print", luaI_print}, | 335 | {"print", luaI_print}, |
336 | {"rawgetglobal", luaI_rawgetglobal}, | ||
337 | {"rawgettable", rawgettable}, | ||
338 | {"rawsetglobal", luaI_rawsetglobal}, | ||
339 | {"rawsettable", rawsettable}, | ||
341 | {"seterrormethod", luaI_seterrormethod}, | 340 | {"seterrormethod", luaI_seterrormethod}, |
342 | {"setfallback", luaI_setfallback}, | 341 | {"setfallback", luaI_setfallback}, |
343 | {"setglobal", luaI_setglobal}, | 342 | {"setglobal", luaI_setglobal}, |
344 | {"setintmethod", luaI_setintmethod}, | 343 | {"settagmethod", luaI_settagmethod}, |
345 | {"getintmethod", luaI_getintmethod}, | 344 | {"gettagmethod", luaI_gettagmethod}, |
346 | {"settag", luaIl_settag}, | 345 | {"settag", luaIl_settag}, |
347 | {"tonumber", lua_obj2number}, | 346 | {"tonumber", lua_obj2number}, |
348 | {"tostring", luaI_tostring}, | 347 | {"tostring", luaI_tostring}, |
@@ -33,7 +33,7 @@ static void pushresult (int i) | |||
33 | #ifndef NOSTRERROR | 33 | #ifndef NOSTRERROR |
34 | lua_pushstring(strerror(errno)); | 34 | lua_pushstring(strerror(errno)); |
35 | #else | 35 | #else |
36 | lua_pushstring("system unable to define the error"); | 36 | lua_pushstring("O.S. unable to define the error"); |
37 | #endif | 37 | #endif |
38 | } | 38 | } |
39 | } | 39 | } |
@@ -124,7 +124,7 @@ static void io_read (void) | |||
124 | } | 124 | } |
125 | else if (*p == '}') { | 125 | else if (*p == '}') { |
126 | if (inskip == 0) | 126 | if (inskip == 0) |
127 | lua_error("unbalanced `{...}' in read pattern"); | 127 | lua_error("unbalanced braces in read pattern"); |
128 | inskip--; | 128 | inskip--; |
129 | p++; | 129 | p++; |
130 | } | 130 | } |
@@ -248,7 +248,7 @@ static void lua_printstack (FILE *f) | |||
248 | fprintf(f, "function %s", name); | 248 | fprintf(f, "function %s", name); |
249 | break; | 249 | break; |
250 | case 'f': | 250 | case 'f': |
251 | fprintf(f, "`%s' fallback", name); | 251 | fprintf(f, "`%s' iternal method", name); |
252 | break; | 252 | break; |
253 | default: { | 253 | default: { |
254 | char *filename; | 254 | char *filename; |
@@ -289,7 +289,7 @@ static void getbyte (void) | |||
289 | else { | 289 | else { |
290 | i--; | 290 | i--; |
291 | if (0 <= i && i < lua_getbindatasize(ud)) | 291 | if (0 <= i && i < lua_getbindatasize(ud)) |
292 | lua_pushnumber(*(((char *)lua_getbinarydata(ud))+i)); | 292 | lua_pushnumber(*(((char *)lua_getbindata(ud))+i)); |
293 | else | 293 | else |
294 | lua_pushnil(); | 294 | lua_pushnil(); |
295 | } | 295 | } |
@@ -307,7 +307,7 @@ static void createuserdata (void) | |||
307 | lua_beginblock(); | 307 | lua_beginblock(); |
308 | lua_pushobject(t); | 308 | lua_pushobject(t); |
309 | lua_pushnumber(i+1); | 309 | lua_pushnumber(i+1); |
310 | o = lua_basicindex(); | 310 | o = lua_rawgettable(); |
311 | if (lua_isnil(o)) { | 311 | if (lua_isnil(o)) { |
312 | lua_endblock(); | 312 | lua_endblock(); |
313 | break; | 313 | break; |
@@ -317,7 +317,7 @@ static void createuserdata (void) | |||
317 | luaI_addchar(lua_getnumber(o)); | 317 | luaI_addchar(lua_getnumber(o)); |
318 | lua_endblock(); | 318 | lua_endblock(); |
319 | } | 319 | } |
320 | lua_pushbinarydata(luaI_addchar(0), i, tag); | 320 | lua_pushbindata(luaI_addchar(0), i, tag); |
321 | } | 321 | } |
322 | 322 | ||
323 | 323 | ||
@@ -3,7 +3,7 @@ | |||
3 | ** Linguagem para Usuarios de Aplicacao | 3 | ** Linguagem para Usuarios de Aplicacao |
4 | */ | 4 | */ |
5 | 5 | ||
6 | char *rcs_lua="$Id: lua.c,v 1.13 1996/07/06 20:20:35 roberto Exp roberto $"; | 6 | char *rcs_lua="$Id: lua.c,v 1.14 1996/09/24 17:30:28 roberto Exp roberto $"; |
7 | 7 | ||
8 | #include <stdio.h> | 8 | #include <stdio.h> |
9 | #include <string.h> | 9 | #include <string.h> |
@@ -59,8 +59,8 @@ int main (int argc, char *argv[]) | |||
59 | result = lua_dofile (argv[i]); | 59 | result = lua_dofile (argv[i]); |
60 | if (result) { | 60 | if (result) { |
61 | if (result == 2) { | 61 | if (result == 2) { |
62 | fprintf(stderr, "lua: cannot execute file `%s' - ", argv[i]); | 62 | fprintf(stderr, "lua: cannot execute file "); |
63 | perror(NULL); | 63 | perror(argv[i]); |
64 | } | 64 | } |
65 | return 1; | 65 | return 1; |
66 | } | 66 | } |
@@ -2,7 +2,7 @@ | |||
2 | ** LUA - An Extensible Extension Language | 2 | ** LUA - An Extensible Extension Language |
3 | ** TeCGraf: Grupo de Tecnologia em Computacao Grafica, PUC-Rio, Brazil | 3 | ** TeCGraf: Grupo de Tecnologia em Computacao Grafica, PUC-Rio, Brazil |
4 | ** e-mail: lua@tecgraf.puc-rio.br | 4 | ** e-mail: lua@tecgraf.puc-rio.br |
5 | ** $Id: lua.h,v 3.42 1997/04/02 23:04:12 roberto Exp roberto $ | 5 | ** $Id: lua.h,v 4.1 1997/04/03 18:26:08 roberto Exp roberto $ |
6 | */ | 6 | */ |
7 | 7 | ||
8 | 8 | ||
@@ -19,9 +19,8 @@ | |||
19 | typedef void (*lua_CFunction) (void); | 19 | typedef void (*lua_CFunction) (void); |
20 | typedef unsigned int lua_Object; | 20 | typedef unsigned int lua_Object; |
21 | 21 | ||
22 | lua_Object lua_setfallback (char *event, lua_CFunction fallback); | 22 | void lua_settagmethod (int tag, char *event, lua_CFunction method); |
23 | void lua_setintmethod (int tag, char *event, lua_CFunction method); | 23 | void lua_gettagmethod (int tag, char *event); /* out: method */ |
24 | void lua_getintmethod (int tag, char *event); /* out: method */ | ||
25 | void lua_seterrormethod (lua_CFunction method); | 24 | void lua_seterrormethod (lua_CFunction method); |
26 | 25 | ||
27 | int lua_newtag (void); | 26 | int lua_newtag (void); |
@@ -53,26 +52,26 @@ int lua_isfunction (lua_Object object); | |||
53 | float lua_getnumber (lua_Object object); | 52 | float lua_getnumber (lua_Object object); |
54 | char *lua_getstring (lua_Object object); | 53 | char *lua_getstring (lua_Object object); |
55 | lua_CFunction lua_getcfunction (lua_Object object); | 54 | lua_CFunction lua_getcfunction (lua_Object object); |
56 | void *lua_getbinarydata (lua_Object object); | 55 | void *lua_getbindata (lua_Object object); |
57 | int lua_getbindatasize (lua_Object object); | 56 | int lua_getbindatasize (lua_Object object); |
58 | 57 | ||
59 | void lua_pushnil (void); | 58 | void lua_pushnil (void); |
60 | void lua_pushnumber (float n); | 59 | void lua_pushnumber (float n); |
61 | void lua_pushstring (char *s); | 60 | void lua_pushstring (char *s); |
62 | void lua_pushcfunction (lua_CFunction fn); | 61 | void lua_pushcfunction (lua_CFunction fn); |
63 | void lua_pushbinarydata (void *buff, int size, int tag); | 62 | void lua_pushbindata (void *buff, int size, int tag); |
64 | void lua_pushusertag (void *u, int tag); | 63 | void lua_pushusertag (void *u, int tag); |
65 | void lua_pushobject (lua_Object object); | 64 | void lua_pushobject (lua_Object object); |
66 | 65 | ||
67 | lua_Object lua_getglobal (char *name); | 66 | lua_Object lua_getglobal (char *name); |
68 | lua_Object lua_basicgetglobal (char *name); | 67 | lua_Object lua_rawgetglobal (char *name); |
69 | void lua_setglobal (char *name); /* In: value */ | 68 | void lua_setglobal (char *name); /* In: value */ |
70 | void lua_basicsetglobal (char *name); /* In: value */ | 69 | void lua_rawsetglobal (char *name); /* In: value */ |
71 | 70 | ||
72 | void lua_storesubscript (void); /* In: table, index, value */ | 71 | void lua_settable (void); /* In: table, index, value */ |
73 | void lua_basicstoreindex (void); /* In: table, index, value */ | 72 | void lua_rawsettable (void); /* In: table, index, value */ |
74 | lua_Object lua_getsubscript (void); /* In: table, index */ | 73 | lua_Object lua_gettable (void); /* In: table, index */ |
75 | lua_Object lua_basicindex (void); /* In: table, index */ | 74 | lua_Object lua_rawgettable (void); /* In: table, index */ |
76 | 75 | ||
77 | int lua_tag (lua_Object object); | 76 | int lua_tag (lua_Object object); |
78 | 77 | ||
@@ -98,6 +97,8 @@ lua_Object lua_createtable (void); | |||
98 | /* =============================================================== */ | 97 | /* =============================================================== */ |
99 | /* for compatibility with old versions. Avoid using these macros/functions */ | 98 | /* for compatibility with old versions. Avoid using these macros/functions */ |
100 | 99 | ||
100 | lua_Object lua_setfallback (char *event, lua_CFunction fallback); | ||
101 | |||
101 | #define lua_storeglobal(n) lua_setglobal(n) | 102 | #define lua_storeglobal(n) lua_setglobal(n) |
102 | #define lua_type(o) (lua_tag(o)) | 103 | #define lua_type(o) (lua_tag(o)) |
103 | 104 | ||
@@ -111,9 +112,10 @@ void *lua_getuserdata (lua_Object object); | |||
111 | 112 | ||
112 | #define lua_pushliteral(o) lua_pushstring(o) | 113 | #define lua_pushliteral(o) lua_pushstring(o) |
113 | 114 | ||
114 | #define lua_getindexed(o,n) (lua_pushobject(o), lua_pushnumber(n), lua_getsubscript()) | 115 | #define lua_getindexed(o,n) (lua_pushobject(o), lua_pushnumber(n), lua_gettable()) |
115 | #define lua_getfield(o,f) (lua_pushobject(o), lua_pushliteral(f), lua_getsubscript()) | 116 | #define lua_getfield(o,f) (lua_pushobject(o), lua_pushliteral(f), lua_gettable()) |
116 | 117 | ||
117 | #define lua_copystring(o) (strdup(lua_getstring(o))) | 118 | #define lua_copystring(o) (strdup(lua_getstring(o))) |
118 | 119 | ||
120 | #define lua_getsubscript lua_gettable | ||
119 | #endif | 121 | #endif |
@@ -3,7 +3,7 @@ | |||
3 | ** Mathematics library to LUA | 3 | ** Mathematics library to LUA |
4 | */ | 4 | */ |
5 | 5 | ||
6 | char *rcs_mathlib="$Id: mathlib.c,v 1.20 1997/03/18 15:30:50 roberto Exp roberto $"; | 6 | char *rcs_mathlib="$Id: mathlib.c,v 1.21 1997/03/21 18:37:28 roberto Exp roberto $"; |
7 | 7 | ||
8 | #include <stdlib.h> | 8 | #include <stdlib.h> |
9 | #include <math.h> | 9 | #include <math.h> |
@@ -210,6 +210,6 @@ static struct luaL_reg mathlib[] = { | |||
210 | void mathlib_open (void) | 210 | void mathlib_open (void) |
211 | { | 211 | { |
212 | luaL_openlib(mathlib, (sizeof(mathlib)/sizeof(mathlib[0]))); | 212 | luaL_openlib(mathlib, (sizeof(mathlib)/sizeof(mathlib[0]))); |
213 | lua_setintmethod(0, "pow", math_pow); | 213 | lua_settagmethod(0, "pow", math_pow); |
214 | } | 214 | } |
215 | 215 | ||
@@ -3,7 +3,7 @@ | |||
3 | ** TecCGraf - PUC-Rio | 3 | ** TecCGraf - PUC-Rio |
4 | */ | 4 | */ |
5 | 5 | ||
6 | char *rcs_opcode="$Id: opcode.c,v 3.93 1997/04/02 23:04:12 roberto Exp roberto $"; | 6 | char *rcs_opcode="$Id: opcode.c,v 4.1 1997/04/03 18:27:06 roberto Exp roberto $"; |
7 | 7 | ||
8 | #include <setjmp.h> | 8 | #include <setjmp.h> |
9 | #include <stdio.h> | 9 | #include <stdio.h> |
@@ -19,6 +19,7 @@ char *rcs_opcode="$Id: opcode.c,v 3.93 1997/04/02 23:04:12 roberto Exp roberto $ | |||
19 | #include "lua.h" | 19 | #include "lua.h" |
20 | #include "fallback.h" | 20 | #include "fallback.h" |
21 | #include "undump.h" | 21 | #include "undump.h" |
22 | #include "auxlib.h" | ||
22 | 23 | ||
23 | #define tonumber(o) ((ttype(o) != LUA_T_NUMBER) && (lua_tonumber(o) != 0)) | 24 | #define tonumber(o) ((ttype(o) != LUA_T_NUMBER) && (lua_tonumber(o) != 0)) |
24 | #define tostring(o) ((ttype(o) != LUA_T_STRING) && (lua_tostring(o) != 0)) | 25 | #define tostring(o) ((ttype(o) != LUA_T_STRING) && (lua_tostring(o) != 0)) |
@@ -340,11 +341,11 @@ static void pushsubscript (void) | |||
340 | } | 341 | } |
341 | 342 | ||
342 | 343 | ||
343 | lua_Object lua_basicindex (void) | 344 | lua_Object lua_rawgettable (void) |
344 | { | 345 | { |
345 | adjustC(2); | 346 | adjustC(2); |
346 | if (ttype(top-2) != LUA_T_ARRAY) | 347 | if (ttype(top-2) != LUA_T_ARRAY) |
347 | lua_error("indexed expression not a table in basic indexing"); | 348 | lua_error("indexed expression not a table in raw gettable"); |
348 | else { | 349 | else { |
349 | TObject *h = lua_hashget(avalue(top-2), top-1); | 350 | TObject *h = lua_hashget(avalue(top-2), top-1); |
350 | --top; | 351 | --top; |
@@ -360,7 +361,7 @@ lua_Object lua_basicindex (void) | |||
360 | 361 | ||
361 | /* | 362 | /* |
362 | ** Function to store indexed based on values at the top | 363 | ** Function to store indexed based on values at the top |
363 | ** mode = 0: basic store (without internal methods) | 364 | ** mode = 0: raw store (without internal methods) |
364 | ** mode = 1: normal store (with internal methods) | 365 | ** mode = 1: normal store (with internal methods) |
365 | ** mode = 2: "deep stack" store (with internal methods) | 366 | ** mode = 2: "deep stack" store (with internal methods) |
366 | */ | 367 | */ |
@@ -656,14 +657,14 @@ lua_Object lua_setfallback (char *name, lua_CFunction fallback) | |||
656 | return (Ref(top-1)); | 657 | return (Ref(top-1)); |
657 | } | 658 | } |
658 | 659 | ||
659 | void lua_getintmethod (int tag, char *event) | 660 | void lua_gettagmethod (int tag, char *event) |
660 | { | 661 | { |
661 | lua_pushnumber(tag); | 662 | lua_pushnumber(tag); |
662 | lua_pushstring(event); | 663 | lua_pushstring(event); |
663 | do_unprotectedrun(luaI_getintmethod, 2, 1); | 664 | do_unprotectedrun(luaI_gettagmethod, 2, 1); |
664 | } | 665 | } |
665 | 666 | ||
666 | void lua_setintmethod (int tag, char *event, lua_CFunction method) | 667 | void lua_settagmethod (int tag, char *event, lua_CFunction method) |
667 | { | 668 | { |
668 | lua_pushnumber(tag); | 669 | lua_pushnumber(tag); |
669 | lua_pushstring(event); | 670 | lua_pushstring(event); |
@@ -671,7 +672,7 @@ void lua_setintmethod (int tag, char *event, lua_CFunction method) | |||
671 | lua_pushcfunction (method); | 672 | lua_pushcfunction (method); |
672 | else | 673 | else |
673 | lua_pushnil(); | 674 | lua_pushnil(); |
674 | do_unprotectedrun(luaI_setintmethod, 3, 1); | 675 | do_unprotectedrun(luaI_settagmethod, 3, 1); |
675 | } | 676 | } |
676 | 677 | ||
677 | void lua_seterrormethod (lua_CFunction method) | 678 | void lua_seterrormethod (lua_CFunction method) |
@@ -685,7 +686,7 @@ void lua_seterrormethod (lua_CFunction method) | |||
685 | ** API: receives on the stack the table and the index. | 686 | ** API: receives on the stack the table and the index. |
686 | ** returns the value. | 687 | ** returns the value. |
687 | */ | 688 | */ |
688 | lua_Object lua_getsubscript (void) | 689 | lua_Object lua_gettable (void) |
689 | { | 690 | { |
690 | adjustC(2); | 691 | adjustC(2); |
691 | pushsubscript(); | 692 | pushsubscript(); |
@@ -729,13 +730,13 @@ void lua_settag (int tag) | |||
729 | /* | 730 | /* |
730 | ** API: receives on the stack the table, the index, and the new value. | 731 | ** API: receives on the stack the table, the index, and the new value. |
731 | */ | 732 | */ |
732 | void lua_storesubscript (void) | 733 | void lua_settable (void) |
733 | { | 734 | { |
734 | adjustC(3); | 735 | adjustC(3); |
735 | storesubscript(top-3, 1); | 736 | storesubscript(top-3, 1); |
736 | } | 737 | } |
737 | 738 | ||
738 | void lua_basicstoreindex (void) | 739 | void lua_rawsettable (void) |
739 | { | 740 | { |
740 | adjustC(3); | 741 | adjustC(3); |
741 | storesubscript(top-3, 0); | 742 | storesubscript(top-3, 0); |
@@ -825,7 +826,7 @@ char *lua_getstring (lua_Object object) | |||
825 | else return (svalue(Address(object))); | 826 | else return (svalue(Address(object))); |
826 | } | 827 | } |
827 | 828 | ||
828 | void *lua_getbinarydata (lua_Object object) | 829 | void *lua_getbindata (lua_Object object) |
829 | { | 830 | { |
830 | if (object == LUA_NOOBJECT || ttype(Address(object)) != LUA_T_USERDATA) | 831 | if (object == LUA_NOOBJECT || ttype(Address(object)) != LUA_T_USERDATA) |
831 | return NULL; | 832 | return NULL; |
@@ -834,7 +835,7 @@ void *lua_getbinarydata (lua_Object object) | |||
834 | 835 | ||
835 | void *lua_getuserdata (lua_Object object) | 836 | void *lua_getuserdata (lua_Object object) |
836 | { | 837 | { |
837 | void *add = lua_getbinarydata(object); | 838 | void *add = lua_getbindata(object); |
838 | if (add == NULL) return NULL; | 839 | if (add == NULL) return NULL; |
839 | else return *(void **)add; | 840 | else return *(void **)add; |
840 | } | 841 | } |
@@ -875,7 +876,7 @@ void lua_pushref (int ref) | |||
875 | { | 876 | { |
876 | TObject *o = luaI_getref(ref); | 877 | TObject *o = luaI_getref(ref); |
877 | if (o == NULL) | 878 | if (o == NULL) |
878 | lua_error("access to invalid (possibly garbage collected) reference"); | 879 | lua_error("access to invalid reference (possibly garbage collected)"); |
879 | luaI_pushobject(o); | 880 | luaI_pushobject(o); |
880 | } | 881 | } |
881 | 882 | ||
@@ -900,7 +901,7 @@ lua_Object lua_getglobal (char *name) | |||
900 | } | 901 | } |
901 | 902 | ||
902 | 903 | ||
903 | lua_Object lua_basicgetglobal (char *name) | 904 | lua_Object lua_rawgetglobal (char *name) |
904 | { | 905 | { |
905 | adjustC(0); | 906 | adjustC(0); |
906 | *top = lua_table[luaI_findsymbolbyname(name)].object; | 907 | *top = lua_table[luaI_findsymbolbyname(name)].object; |
@@ -938,7 +939,7 @@ void lua_setglobal (char *name) | |||
938 | setglobal(luaI_findsymbolbyname(name)); | 939 | setglobal(luaI_findsymbolbyname(name)); |
939 | } | 940 | } |
940 | 941 | ||
941 | void lua_basicsetglobal (char *name) | 942 | void lua_rawsetglobal (char *name) |
942 | { | 943 | { |
943 | Word n = luaI_findsymbolbyname(name); | 944 | Word n = luaI_findsymbolbyname(name); |
944 | adjustC(1); | 945 | adjustC(1); |
@@ -989,13 +990,13 @@ void lua_pushcfunction (lua_CFunction fn) | |||
989 | incr_top; | 990 | incr_top; |
990 | } | 991 | } |
991 | 992 | ||
992 | void lua_pushbinarydata (void *buff, int size, int tag) | 993 | void lua_pushbindata (void *buff, int size, int tag) |
993 | { | 994 | { |
994 | if (buff == NULL) | 995 | if (buff == NULL) |
995 | ttype(top) = LUA_T_NIL; | 996 | ttype(top) = LUA_T_NIL; |
996 | else { | 997 | else { |
997 | if (!luaI_userdatatag(tag)) | 998 | if (tag < 0) |
998 | lua_error("invalid tag for userdata"); | 999 | luaI_realtag(tag); |
999 | tsvalue(top) = luaI_createuserdata(buff, size, tag); | 1000 | tsvalue(top) = luaI_createuserdata(buff, size, tag); |
1000 | ttype(top) = LUA_T_USERDATA; | 1001 | ttype(top) = LUA_T_USERDATA; |
1001 | } | 1002 | } |
@@ -1007,7 +1008,7 @@ void lua_pushbinarydata (void *buff, int size, int tag) | |||
1007 | */ | 1008 | */ |
1008 | void lua_pushusertag (void *u, int tag) | 1009 | void lua_pushusertag (void *u, int tag) |
1009 | { | 1010 | { |
1010 | lua_pushbinarydata(&u, sizeof(void *), tag); | 1011 | lua_pushbindata(&u, sizeof(void *), tag); |
1011 | } | 1012 | } |
1012 | 1013 | ||
1013 | /* | 1014 | /* |
@@ -1,6 +1,6 @@ | |||
1 | /* | 1 | /* |
2 | ** TeCGraf - PUC-Rio | 2 | ** TeCGraf - PUC-Rio |
3 | ** $Id: opcode.h,v 3.30 1997/03/20 19:20:43 roberto Exp roberto $ | 3 | ** $Id: opcode.h,v 3.31 1997/03/31 14:02:58 roberto Exp roberto $ |
4 | */ | 4 | */ |
5 | 5 | ||
6 | #ifndef opcode_h | 6 | #ifndef opcode_h |
@@ -35,6 +35,8 @@ typedef enum | |||
35 | #define NUM_TYPES 10 | 35 | #define NUM_TYPES 10 |
36 | 36 | ||
37 | 37 | ||
38 | extern char *luaI_typenames[]; | ||
39 | |||
38 | typedef enum { | 40 | typedef enum { |
39 | /* name parm before after side effect | 41 | /* name parm before after side effect |
40 | -----------------------------------------------------------------------------*/ | 42 | -----------------------------------------------------------------------------*/ |
@@ -3,7 +3,7 @@ | |||
3 | ** String library to LUA | 3 | ** String library to LUA |
4 | */ | 4 | */ |
5 | 5 | ||
6 | char *rcs_strlib="$Id: strlib.c,v 1.37 1997/03/18 15:30:50 roberto Exp roberto $"; | 6 | char *rcs_strlib="$Id: strlib.c,v 1.38 1997/03/26 22:23:15 roberto Exp roberto $"; |
7 | 7 | ||
8 | #include <string.h> | 8 | #include <string.h> |
9 | #include <stdio.h> | 9 | #include <stdio.h> |
@@ -84,7 +84,7 @@ static void str_tok (void) | |||
84 | lua_pushobject(t); | 84 | lua_pushobject(t); |
85 | lua_pushnumber(i++); | 85 | lua_pushnumber(i++); |
86 | lua_pushstring(s1); | 86 | lua_pushstring(s1); |
87 | lua_storesubscript(); | 87 | lua_settable(); |
88 | s1 = NULL; /* prepare for next strtok */ | 88 | s1 = NULL; /* prepare for next strtok */ |
89 | } | 89 | } |
90 | lua_pushobject(t); | 90 | lua_pushobject(t); |
@@ -121,10 +121,10 @@ static void str_sub (void) | |||
121 | */ | 121 | */ |
122 | static void str_lower (void) | 122 | static void str_lower (void) |
123 | { | 123 | { |
124 | char *s = luaL_check_string(1, "strlower"); | 124 | char *s; |
125 | luaI_emptybuff(); | 125 | luaI_emptybuff(); |
126 | while (*s) | 126 | for (s = luaL_check_string(1, "strlower"); *s; s++) |
127 | luaI_addchar(tolower((unsigned char)*s++)); | 127 | luaI_addchar(tolower((unsigned char)*s)); |
128 | lua_pushstring(luaI_addchar(0)); | 128 | lua_pushstring(luaI_addchar(0)); |
129 | } | 129 | } |
130 | 130 | ||
@@ -133,10 +133,10 @@ static void str_lower (void) | |||
133 | */ | 133 | */ |
134 | static void str_upper (void) | 134 | static void str_upper (void) |
135 | { | 135 | { |
136 | char *s = luaL_check_string(1, "strupper"); | 136 | char *s; |
137 | luaI_emptybuff(); | 137 | luaI_emptybuff(); |
138 | while (*s) | 138 | for (s = luaL_check_string(1, "strupper"); *s; s++) |
139 | luaI_addchar(toupper((unsigned char)*s++)); | 139 | luaI_addchar(toupper((unsigned char)*s)); |
140 | lua_pushstring(luaI_addchar(0)); | 140 | lua_pushstring(luaI_addchar(0)); |
141 | } | 141 | } |
142 | 142 | ||
@@ -177,11 +177,11 @@ char *luaL_item_end (char *p) | |||
177 | switch (*p++) { | 177 | switch (*p++) { |
178 | case '\0': return p-1; | 178 | case '\0': return p-1; |
179 | case ESC: | 179 | case ESC: |
180 | if (*p == 0) lua_error("incorrect pattern"); | 180 | if (*p == 0) luaL_verror("incorrect pattern (ends with `%c')", ESC); |
181 | return p+1; | 181 | return p+1; |
182 | case '[': { | 182 | case '[': { |
183 | char *end = bracket_end(p); | 183 | char *end = bracket_end(p); |
184 | if (end == NULL) lua_error("incorrect pattern"); | 184 | if (end == NULL) lua_error("incorrect pattern (missing `]')"); |
185 | return end+1; | 185 | return end+1; |
186 | } | 186 | } |
187 | default: | 187 | default: |
@@ -492,7 +492,7 @@ static void str_format (void) | |||
492 | char *initf = strfrmt-1; /* -1 to include % */ | 492 | char *initf = strfrmt-1; /* -1 to include % */ |
493 | strfrmt = match(strfrmt, "[-+ #]*(%d*)%.?(%d*)", 0); | 493 | strfrmt = match(strfrmt, "[-+ #]*(%d*)%.?(%d*)", 0); |
494 | if (capture[0].len > 3 || capture[1].len > 3) /* < 1000? */ | 494 | if (capture[0].len > 3 || capture[1].len > 3) /* < 1000? */ |
495 | lua_error("invalid format (width/precision too long)"); | 495 | lua_error("invalid format (width or precision too long)"); |
496 | strncpy(form, initf, strfrmt-initf+1); /* +1 to include convertion */ | 496 | strncpy(form, initf, strfrmt-initf+1); /* +1 to include convertion */ |
497 | form[strfrmt-initf+1] = 0; | 497 | form[strfrmt-initf+1] = 0; |
498 | buff = openspace(1000); /* to store the formated value */ | 498 | buff = openspace(1000); /* to store the formated value */ |