aboutsummaryrefslogtreecommitdiff
path: root/lapi.c
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>1999-08-16 17:52:00 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>1999-08-16 17:52:00 -0300
commitc787dccd9b5c3e55547a2c4bb598c0276de65034 (patch)
treec4cdf2f7319fee48e048472a2044119f541e8da2 /lapi.c
parentb44e35b773bcaa9891d80a117392911ab5f656e5 (diff)
downloadlua-c787dccd9b5c3e55547a2c4bb598c0276de65034.tar.gz
lua-c787dccd9b5c3e55547a2c4bb598c0276de65034.tar.bz2
lua-c787dccd9b5c3e55547a2c4bb598c0276de65034.zip
"const" !!!
Diffstat (limited to 'lapi.c')
-rw-r--r--lapi.c155
1 files changed, 58 insertions, 97 deletions
diff --git a/lapi.c b/lapi.c
index ee982f31..dbeb4f59 100644
--- a/lapi.c
+++ b/lapi.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lapi.c,v 1.46 1999/06/17 17:04:03 roberto Exp roberto $ 2** $Id: lapi.c,v 1.47 1999/06/22 20:37:23 roberto Exp roberto $
3** Lua API 3** Lua API
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -24,8 +24,8 @@
24#include "lvm.h" 24#include "lvm.h"
25 25
26 26
27char lua_ident[] = "$Lua: " LUA_VERSION " " LUA_COPYRIGHT " $\n" 27const char lua_ident[] = "$Lua: " LUA_VERSION " " LUA_COPYRIGHT " $\n"
28 "$Authors: " LUA_AUTHORS " $"; 28 "$Authors: " LUA_AUTHORS " $";
29 29
30 30
31 31
@@ -34,8 +34,7 @@ TObject *luaA_Address (lua_Object o) {
34} 34}
35 35
36 36
37static lua_Type normalized_type (TObject *o) 37static lua_Type normalized_type (const TObject *o) {
38{
39 int t = ttype(o); 38 int t = ttype(o);
40 switch (t) { 39 switch (t) {
41 case LUA_T_PMARK: 40 case LUA_T_PMARK:
@@ -50,21 +49,18 @@ static lua_Type normalized_type (TObject *o)
50} 49}
51 50
52 51
53static void set_normalized (TObject *d, TObject *s) 52static void set_normalized (TObject *d, const TObject *s) {
54{
55 d->value = s->value; 53 d->value = s->value;
56 d->ttype = normalized_type(s); 54 d->ttype = normalized_type(s);
57} 55}
58 56
59 57
60static TObject *luaA_protovalue (TObject *o) 58static const TObject *luaA_protovalue (const TObject *o) {
61{
62 return (normalized_type(o) == LUA_T_CLOSURE) ? protovalue(o) : o; 59 return (normalized_type(o) == LUA_T_CLOSURE) ? protovalue(o) : o;
63} 60}
64 61
65 62
66void luaA_packresults (void) 63void luaA_packresults (void) {
67{
68 luaV_pack(L->Cstack.lua2C, L->Cstack.num, L->stack.top); 64 luaV_pack(L->Cstack.lua2C, L->Cstack.num, L->stack.top);
69 incr_top; 65 incr_top;
70} 66}
@@ -76,14 +72,13 @@ int luaA_passresults (void) {
76} 72}
77 73
78 74
79static void checkCparams (int nParams) 75static void checkCparams (int nParams) {
80{
81 if (L->stack.top-L->stack.stack < L->Cstack.base+nParams) 76 if (L->stack.top-L->stack.stack < L->Cstack.base+nParams)
82 lua_error("API error - wrong number of arguments in C2lua stack"); 77 lua_error("API error - wrong number of arguments in C2lua stack");
83} 78}
84 79
85 80
86static lua_Object put_luaObject (TObject *o) { 81static lua_Object put_luaObject (const TObject *o) {
87 luaD_openstack((L->stack.top-L->stack.stack)-L->Cstack.base); 82 luaD_openstack((L->stack.top-L->stack.stack)-L->Cstack.base);
88 L->stack.stack[L->Cstack.base++] = *o; 83 L->stack.stack[L->Cstack.base++] = *o;
89 return L->Cstack.base; /* this is +1 real position (see Ref) */ 84 return L->Cstack.base; /* this is +1 real position (see Ref) */
@@ -115,8 +110,7 @@ lua_Object lua_pop (void) {
115** Get a parameter, returning the object handle or LUA_NOOBJECT on error. 110** Get a parameter, returning the object handle or LUA_NOOBJECT on error.
116** 'number' must be 1 to get the first parameter. 111** 'number' must be 1 to get the first parameter.
117*/ 112*/
118lua_Object lua_lua2C (int number) 113lua_Object lua_lua2C (int number) {
119{
120 if (number <= 0 || number > L->Cstack.num) return LUA_NOOBJECT; 114 if (number <= 0 || number > L->Cstack.num) return LUA_NOOBJECT;
121 /* Ref(L->stack.stack+(L->Cstack.lua2C+number-1)) == 115 /* Ref(L->stack.stack+(L->Cstack.lua2C+number-1)) ==
122 L->stack.stack+(L->Cstack.lua2C+number-1)-L->stack.stack+1 == */ 116 L->stack.stack+(L->Cstack.lua2C+number-1)-L->stack.stack+1 == */
@@ -124,8 +118,7 @@ lua_Object lua_lua2C (int number)
124} 118}
125 119
126 120
127int lua_callfunction (lua_Object function) 121int lua_callfunction (lua_Object function) {
128{
129 if (function == LUA_NOOBJECT) 122 if (function == LUA_NOOBJECT)
130 return 1; 123 return 1;
131 else { 124 else {
@@ -136,14 +129,12 @@ int lua_callfunction (lua_Object function)
136} 129}
137 130
138 131
139lua_Object lua_gettagmethod (int tag, char *event) 132lua_Object lua_gettagmethod (int tag, const char *event) {
140{
141 return put_luaObject(luaT_gettagmethod(tag, event)); 133 return put_luaObject(luaT_gettagmethod(tag, event));
142} 134}
143 135
144 136
145lua_Object lua_settagmethod (int tag, char *event) 137lua_Object lua_settagmethod (int tag, const char *event) {
146{
147 checkCparams(1); 138 checkCparams(1);
148 luaT_settagmethod(tag, event, L->stack.top-1); 139 luaT_settagmethod(tag, event, L->stack.top-1);
149 return put_luaObjectonTop(); 140 return put_luaObjectonTop();
@@ -159,8 +150,7 @@ lua_Object lua_seterrormethod (void) {
159} 150}
160 151
161 152
162lua_Object lua_gettable (void) 153lua_Object lua_gettable (void) {
163{
164 checkCparams(2); 154 checkCparams(2);
165 luaV_gettable(); 155 luaV_gettable();
166 return put_luaObjectonTop(); 156 return put_luaObjectonTop();
@@ -190,8 +180,7 @@ void lua_rawsettable (void) {
190} 180}
191 181
192 182
193lua_Object lua_createtable (void) 183lua_Object lua_createtable (void) {
194{
195 TObject o; 184 TObject o;
196 luaC_checkGC(); 185 luaC_checkGC();
197 avalue(&o) = luaH_new(0); 186 avalue(&o) = luaH_new(0);
@@ -200,31 +189,27 @@ lua_Object lua_createtable (void)
200} 189}
201 190
202 191
203lua_Object lua_getglobal (char *name) 192lua_Object lua_getglobal (const char *name) {
204{
205 luaD_checkstack(2); /* may need that to call T.M. */ 193 luaD_checkstack(2); /* may need that to call T.M. */
206 luaV_getglobal(luaS_new(name)); 194 luaV_getglobal(luaS_new(name));
207 return put_luaObjectonTop(); 195 return put_luaObjectonTop();
208} 196}
209 197
210 198
211lua_Object lua_rawgetglobal (char *name) 199lua_Object lua_rawgetglobal (const char *name) {
212{
213 TaggedString *ts = luaS_new(name); 200 TaggedString *ts = luaS_new(name);
214 return put_luaObject(&ts->u.s.globalval); 201 return put_luaObject(&ts->u.s.globalval);
215} 202}
216 203
217 204
218void lua_setglobal (char *name) 205void lua_setglobal (const char *name) {
219{
220 checkCparams(1); 206 checkCparams(1);
221 luaD_checkstack(2); /* may need that to call T.M. */ 207 luaD_checkstack(2); /* may need that to call T.M. */
222 luaV_setglobal(luaS_new(name)); 208 luaV_setglobal(luaS_new(name));
223} 209}
224 210
225 211
226void lua_rawsetglobal (char *name) 212void lua_rawsetglobal (const char *name) {
227{
228 TaggedString *ts = luaS_new(name); 213 TaggedString *ts = luaS_new(name);
229 checkCparams(1); 214 checkCparams(1);
230 luaS_rawsetglobal(ts, --L->stack.top); 215 luaS_rawsetglobal(ts, --L->stack.top);
@@ -232,113 +217,96 @@ void lua_rawsetglobal (char *name)
232 217
233 218
234 219
235int lua_isnil (lua_Object o) 220int lua_isnil (lua_Object o) {
236{
237 return (o!= LUA_NOOBJECT) && (ttype(Address(o)) == LUA_T_NIL); 221 return (o!= LUA_NOOBJECT) && (ttype(Address(o)) == LUA_T_NIL);
238} 222}
239 223
240int lua_istable (lua_Object o) 224int lua_istable (lua_Object o) {
241{
242 return (o!= LUA_NOOBJECT) && (ttype(Address(o)) == LUA_T_ARRAY); 225 return (o!= LUA_NOOBJECT) && (ttype(Address(o)) == LUA_T_ARRAY);
243} 226}
244 227
245int lua_isuserdata (lua_Object o) 228int lua_isuserdata (lua_Object o) {
246{
247 return (o!= LUA_NOOBJECT) && (ttype(Address(o)) == LUA_T_USERDATA); 229 return (o!= LUA_NOOBJECT) && (ttype(Address(o)) == LUA_T_USERDATA);
248} 230}
249 231
250int lua_iscfunction (lua_Object o) 232int lua_iscfunction (lua_Object o) {
251{
252 return (lua_tag(o) == LUA_T_CPROTO); 233 return (lua_tag(o) == LUA_T_CPROTO);
253} 234}
254 235
255int lua_isnumber (lua_Object o) 236int lua_isnumber (lua_Object o) {
256{
257 return (o!= LUA_NOOBJECT) && (tonumber(Address(o)) == 0); 237 return (o!= LUA_NOOBJECT) && (tonumber(Address(o)) == 0);
258} 238}
259 239
260int lua_isstring (lua_Object o) 240int lua_isstring (lua_Object o) {
261{
262 int t = lua_tag(o); 241 int t = lua_tag(o);
263 return (t == LUA_T_STRING) || (t == LUA_T_NUMBER); 242 return (t == LUA_T_STRING) || (t == LUA_T_NUMBER);
264} 243}
265 244
266int lua_isfunction (lua_Object o) 245int lua_isfunction (lua_Object o) {
267{
268 int t = lua_tag(o); 246 int t = lua_tag(o);
269 return (t == LUA_T_PROTO) || (t == LUA_T_CPROTO); 247 return (t == LUA_T_PROTO) || (t == LUA_T_CPROTO);
270} 248}
271 249
272 250
273double lua_getnumber (lua_Object object) 251double lua_getnumber (lua_Object object) {
274{
275 if (object == LUA_NOOBJECT) return 0.0; 252 if (object == LUA_NOOBJECT) return 0.0;
276 if (tonumber(Address(object))) return 0.0; 253 if (tonumber(Address(object))) return 0.0;
277 else return (nvalue(Address(object))); 254 else return (nvalue(Address(object)));
278} 255}
279 256
280char *lua_getstring (lua_Object object) 257const char *lua_getstring (lua_Object object) {
281{
282 luaC_checkGC(); /* "tostring" may create a new string */ 258 luaC_checkGC(); /* "tostring" may create a new string */
283 if (object == LUA_NOOBJECT || tostring(Address(object))) 259 if (object == LUA_NOOBJECT || tostring(Address(object)))
284 return NULL; 260 return NULL;
285 else return (svalue(Address(object))); 261 else return (svalue(Address(object)));
286} 262}
287 263
288long lua_strlen (lua_Object object) 264long lua_strlen (lua_Object object) {
289{
290 luaC_checkGC(); /* "tostring" may create a new string */ 265 luaC_checkGC(); /* "tostring" may create a new string */
291 if (object == LUA_NOOBJECT || tostring(Address(object))) 266 if (object == LUA_NOOBJECT || tostring(Address(object)))
292 return 0L; 267 return 0L;
293 else return (tsvalue(Address(object))->u.s.len); 268 else return (tsvalue(Address(object))->u.s.len);
294} 269}
295 270
296void *lua_getuserdata (lua_Object object) 271void *lua_getuserdata (lua_Object object) {
297{
298 if (object == LUA_NOOBJECT || ttype(Address(object)) != LUA_T_USERDATA) 272 if (object == LUA_NOOBJECT || ttype(Address(object)) != LUA_T_USERDATA)
299 return NULL; 273 return NULL;
300 else return tsvalue(Address(object))->u.d.v; 274 else return tsvalue(Address(object))->u.d.v;
301} 275}
302 276
303lua_CFunction lua_getcfunction (lua_Object object) 277lua_CFunction lua_getcfunction (lua_Object object) {
304{
305 if (!lua_iscfunction(object)) 278 if (!lua_iscfunction(object))
306 return NULL; 279 return NULL;
307 else return fvalue(luaA_protovalue(Address(object))); 280 else return fvalue(luaA_protovalue(Address(object)));
308} 281}
309 282
310 283
311void lua_pushnil (void) 284void lua_pushnil (void) {
312{
313 ttype(L->stack.top) = LUA_T_NIL; 285 ttype(L->stack.top) = LUA_T_NIL;
314 incr_top; 286 incr_top;
315} 287}
316 288
317void lua_pushnumber (double n) 289void lua_pushnumber (double n) {
318{
319 ttype(L->stack.top) = LUA_T_NUMBER; 290 ttype(L->stack.top) = LUA_T_NUMBER;
320 nvalue(L->stack.top) = n; 291 nvalue(L->stack.top) = n;
321 incr_top; 292 incr_top;
322} 293}
323 294
324void lua_pushlstring (char *s, long len) 295void lua_pushlstring (const char *s, long len) {
325{
326 tsvalue(L->stack.top) = luaS_newlstr(s, len); 296 tsvalue(L->stack.top) = luaS_newlstr(s, len);
327 ttype(L->stack.top) = LUA_T_STRING; 297 ttype(L->stack.top) = LUA_T_STRING;
328 incr_top; 298 incr_top;
329 luaC_checkGC(); 299 luaC_checkGC();
330} 300}
331 301
332void lua_pushstring (char *s) 302void lua_pushstring (const char *s) {
333{
334 if (s == NULL) 303 if (s == NULL)
335 lua_pushnil(); 304 lua_pushnil();
336 else 305 else
337 lua_pushlstring(s, strlen(s)); 306 lua_pushlstring(s, strlen(s));
338} 307}
339 308
340void lua_pushcclosure (lua_CFunction fn, int n) 309void lua_pushcclosure (lua_CFunction fn, int n) {
341{
342 if (fn == NULL) 310 if (fn == NULL)
343 lua_error("API error - attempt to push a NULL Cfunction"); 311 lua_error("API error - attempt to push a NULL Cfunction");
344 checkCparams(n); 312 checkCparams(n);
@@ -349,8 +317,7 @@ void lua_pushcclosure (lua_CFunction fn, int n)
349 luaC_checkGC(); 317 luaC_checkGC();
350} 318}
351 319
352void lua_pushusertag (void *u, int tag) 320void lua_pushusertag (void *u, int tag) {
353{
354 if (tag < 0 && tag != LUA_ANYTAG) 321 if (tag < 0 && tag != LUA_ANYTAG)
355 luaT_realtag(tag); /* error if tag is not valid */ 322 luaT_realtag(tag); /* error if tag is not valid */
356 tsvalue(L->stack.top) = luaS_createudata(u, tag); 323 tsvalue(L->stack.top) = luaS_createudata(u, tag);
@@ -359,8 +326,7 @@ void lua_pushusertag (void *u, int tag)
359 luaC_checkGC(); 326 luaC_checkGC();
360} 327}
361 328
362void luaA_pushobject (TObject *o) 329void luaA_pushobject (const TObject *o) {
363{
364 *L->stack.top = *o; 330 *L->stack.top = *o;
365 incr_top; 331 incr_top;
366} 332}
@@ -373,12 +339,11 @@ void lua_pushobject (lua_Object o) {
373} 339}
374 340
375 341
376int lua_tag (lua_Object lo) 342int lua_tag (lua_Object lo) {
377{
378 if (lo == LUA_NOOBJECT) 343 if (lo == LUA_NOOBJECT)
379 return LUA_T_NIL; 344 return LUA_T_NIL;
380 else { 345 else {
381 TObject *o = Address(lo); 346 const TObject *o = Address(lo);
382 int t; 347 int t;
383 switch (t = ttype(o)) { 348 switch (t = ttype(o)) {
384 case LUA_T_USERDATA: 349 case LUA_T_USERDATA:
@@ -402,8 +367,7 @@ int lua_tag (lua_Object lo)
402} 367}
403 368
404 369
405void lua_settag (int tag) 370void lua_settag (int tag) {
406{
407 checkCparams(1); 371 checkCparams(1);
408 luaT_realtag(tag); 372 luaT_realtag(tag);
409 switch (ttype(L->stack.top-1)) { 373 switch (ttype(L->stack.top-1)) {
@@ -440,7 +404,7 @@ TaggedString *luaA_nextvar (TaggedString *g) {
440} 404}
441 405
442 406
443char *lua_nextvar (char *varname) { 407const char *lua_nextvar (const char *varname) {
444 TaggedString *g = (varname == NULL) ? NULL : luaS_new(varname); 408 TaggedString *g = (varname == NULL) ? NULL : luaS_new(varname);
445 g = luaA_nextvar(g); 409 g = luaA_nextvar(g);
446 if (g) { 410 if (g) {
@@ -454,7 +418,7 @@ char *lua_nextvar (char *varname) {
454} 418}
455 419
456 420
457int luaA_next (Hash *t, int i) { 421int luaA_next (const Hash *t, int i) {
458 int tsize = nhash(t); 422 int tsize = nhash(t);
459 for (; i<tsize; i++) { 423 for (; i<tsize; i++) {
460 Node *n = node(t, i); 424 Node *n = node(t, i);
@@ -469,7 +433,7 @@ int luaA_next (Hash *t, int i) {
469 433
470 434
471int lua_next (lua_Object o, int i) { 435int lua_next (lua_Object o, int i) {
472 TObject *t = Address(o); 436 const TObject *t = Address(o);
473 if (ttype(t) != LUA_T_ARRAY) 437 if (ttype(t) != LUA_T_ARRAY)
474 lua_error("API error - object is not a table in `lua_next'"); 438 lua_error("API error - object is not a table in `lua_next'");
475 i = luaA_next(avalue(t), i); 439 i = luaA_next(avalue(t), i);
@@ -519,8 +483,7 @@ int lua_setdebug (int debug) {
519*/ 483*/
520 484
521 485
522lua_Function lua_stackedfunction (int level) 486lua_Function lua_stackedfunction (int level) {
523{
524 StkId i; 487 StkId i;
525 for (i = (L->stack.top-1)-L->stack.stack; i>=0; i--) { 488 for (i = (L->stack.top-1)-L->stack.stack; i>=0; i--) {
526 int t = L->stack.stack[i].ttype; 489 int t = L->stack.stack[i].ttype;
@@ -533,20 +496,20 @@ lua_Function lua_stackedfunction (int level)
533 496
534 497
535int lua_nups (lua_Function func) { 498int lua_nups (lua_Function func) {
536 TObject *o = luaA_Address(func); 499 const TObject *o = luaA_Address(func);
537 return (!o || normalized_type(o) != LUA_T_CLOSURE) ? 0 : o->value.cl->nelems; 500 return (!o || normalized_type(o) != LUA_T_CLOSURE) ? 0 : o->value.cl->nelems;
538} 501}
539 502
540 503
541int lua_currentline (lua_Function func) 504int lua_currentline (lua_Function func) {
542{ 505 const TObject *f = Address(func);
543 TObject *f = Address(func);
544 return (f+1 < L->stack.top && (f+1)->ttype == LUA_T_LINE) ? 506 return (f+1 < L->stack.top && (f+1)->ttype == LUA_T_LINE) ?
545 (f+1)->value.i : -1; 507 (f+1)->value.i : -1;
546} 508}
547 509
548 510
549lua_Object lua_getlocal (lua_Function func, int local_number, char **name) { 511lua_Object lua_getlocal (lua_Function func, int local_number,
512 const char **name) {
550 /* check whether func is a Lua function */ 513 /* check whether func is a Lua function */
551 if (lua_tag(func) != LUA_T_PROTO) 514 if (lua_tag(func) != LUA_T_PROTO)
552 return LUA_NOOBJECT; 515 return LUA_NOOBJECT;
@@ -565,15 +528,14 @@ lua_Object lua_getlocal (lua_Function func, int local_number, char **name) {
565} 528}
566 529
567 530
568int lua_setlocal (lua_Function func, int local_number) 531int lua_setlocal (lua_Function func, int local_number) {
569{
570 /* check whether func is a Lua function */ 532 /* check whether func is a Lua function */
571 if (lua_tag(func) != LUA_T_PROTO) 533 if (lua_tag(func) != LUA_T_PROTO)
572 return 0; 534 return 0;
573 else { 535 else {
574 TObject *f = Address(func); 536 TObject *f = Address(func);
575 TProtoFunc *fp = luaA_protovalue(f)->value.tf; 537 TProtoFunc *fp = luaA_protovalue(f)->value.tf;
576 char *name = luaF_getlocalname(fp, local_number, lua_currentline(func)); 538 const char *name = luaF_getlocalname(fp, local_number, lua_currentline(func));
577 checkCparams(1); 539 checkCparams(1);
578 --L->stack.top; 540 --L->stack.top;
579 if (name) { 541 if (name) {
@@ -588,11 +550,11 @@ int lua_setlocal (lua_Function func, int local_number)
588} 550}
589 551
590 552
591void lua_funcinfo (lua_Object func, char **source, int *linedefined) { 553void lua_funcinfo (lua_Object func, const char **source, int *linedefined) {
592 if (!lua_isfunction(func)) 554 if (!lua_isfunction(func))
593 lua_error("API error - `funcinfo' called with a non-function value"); 555 lua_error("API error - `funcinfo' called with a non-function value");
594 else { 556 else {
595 TObject *f = luaA_protovalue(Address(func)); 557 const TObject *f = luaA_protovalue(Address(func));
596 if (normalized_type(f) == LUA_T_PROTO) { 558 if (normalized_type(f) == LUA_T_PROTO) {
597 *source = tfvalue(f)->source->str; 559 *source = tfvalue(f)->source->str;
598 *linedefined = tfvalue(f)->lineDefined; 560 *linedefined = tfvalue(f)->lineDefined;
@@ -605,14 +567,13 @@ void lua_funcinfo (lua_Object func, char **source, int *linedefined) {
605} 567}
606 568
607 569
608static int checkfunc (TObject *o) 570static int checkfunc (TObject *o) {
609{
610 return luaO_equalObj(o, L->stack.top); 571 return luaO_equalObj(o, L->stack.top);
611} 572}
612 573
613 574
614char *lua_getobjname (lua_Object o, char **name) 575const char *lua_getobjname (lua_Object o, const char **name) {
615{ /* try to find a name for given function */ 576 /* try to find a name for given function */
616 set_normalized(L->stack.top, Address(o)); /* to be accessed by "checkfunc" */ 577 set_normalized(L->stack.top, Address(o)); /* to be accessed by "checkfunc" */
617 if ((*name = luaS_travsymbol(checkfunc)) != NULL) 578 if ((*name = luaS_travsymbol(checkfunc)) != NULL)
618 return "global"; 579 return "global";
@@ -662,7 +623,7 @@ int lua_ref (int lock) {
662 623
663 624
664lua_Object lua_getref (int ref) { 625lua_Object lua_getref (int ref) {
665 TObject *o = luaC_getref(ref); 626 const TObject *o = luaC_getref(ref);
666 return (o ? put_luaObject(o) : LUA_NOOBJECT); 627 return (o ? put_luaObject(o) : LUA_NOOBJECT);
667} 628}
668 629