diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2000-10-05 09:14:08 -0300 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2000-10-05 09:14:08 -0300 |
commit | 001f2bdd0e2f8803889c1b5164b57a51e44aef5b (patch) | |
tree | d200cf4d708be3c61e64640c45b47050c9c6a375 /lapi.c | |
parent | cd2ddaded97f7f2b2af02cecfd165cf70e6f83f4 (diff) | |
download | lua-001f2bdd0e2f8803889c1b5164b57a51e44aef5b.tar.gz lua-001f2bdd0e2f8803889c1b5164b57a51e44aef5b.tar.bz2 lua-001f2bdd0e2f8803889c1b5164b57a51e44aef5b.zip |
new definition for types-tags
Diffstat (limited to 'lapi.c')
-rw-r--r-- | lapi.c | 77 |
1 files changed, 35 insertions, 42 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: lapi.c,v 1.103 2000/10/02 20:10:55 roberto Exp roberto $ | 2 | ** $Id: lapi.c,v 1.104 2000/10/03 14:27:44 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 | */ |
@@ -116,20 +116,18 @@ void lua_pushvalue (lua_State *L, int index) { | |||
116 | return ((test) ? (value) : (default)); } | 116 | return ((test) ? (value) : (default)); } |
117 | 117 | ||
118 | 118 | ||
119 | lua_Type lua_type (lua_State *L, int index) { | 119 | int lua_type (lua_State *L, int index) { |
120 | btest(L, index, luaO_type(o), LUA_NOVALUE); | 120 | btest(L, index, ttype(o), LUA_TNONE); |
121 | } | 121 | } |
122 | 122 | ||
123 | const char *lua_typename (lua_State *L, lua_Type t) { | 123 | const char *lua_typename (lua_State *L, int t) { |
124 | static const char *const names[] = { | ||
125 | "NO VALUE", "userdata", "number", "string", "table", "function", "nil" | ||
126 | }; | ||
127 | UNUSED(L); | 124 | UNUSED(L); |
128 | return names[(int)t]; | 125 | return luaO_typenames[t]; |
129 | } | 126 | } |
130 | 127 | ||
128 | |||
131 | int lua_iscfunction (lua_State *L, int index) { | 129 | int lua_iscfunction (lua_State *L, int index) { |
132 | btest(L, index, (ttype(o) == TAG_CCLOSURE), 0); | 130 | btest(L, index, iscfunction(o), 0); |
133 | } | 131 | } |
134 | 132 | ||
135 | int lua_isnumber (lua_State *L, int index) { | 133 | int lua_isnumber (lua_State *L, int index) { |
@@ -137,18 +135,13 @@ int lua_isnumber (lua_State *L, int index) { | |||
137 | } | 135 | } |
138 | 136 | ||
139 | int lua_isstring (lua_State *L, int index) { | 137 | int lua_isstring (lua_State *L, int index) { |
140 | lua_Type t = lua_type(L, index); | 138 | int t = lua_type(L, index); |
141 | return (t == LUA_TSTRING || t == LUA_TNUMBER); | 139 | return (t == LUA_TSTRING || t == LUA_TNUMBER); |
142 | } | 140 | } |
143 | 141 | ||
144 | 142 | ||
145 | static int auxtag (const TObject *o) { | ||
146 | return ((ttype(o) == TAG_USERDATA) ? tsvalue(o)->u.d.tag : | ||
147 | (ttype(o) == TAG_TABLE) ? hvalue(o)->htag : (int)ttype(o)); | ||
148 | } | ||
149 | |||
150 | int lua_tag (lua_State *L, int index) { | 143 | int lua_tag (lua_State *L, int index) { |
151 | btest(L, index, auxtag(o), LUA_NOTAG); | 144 | btest(L, index, luaT_tag(o), LUA_NOTAG); |
152 | } | 145 | } |
153 | 146 | ||
154 | int lua_equal (lua_State *L, int index1, int index2) { | 147 | int lua_equal (lua_State *L, int index1, int index2) { |
@@ -168,7 +161,7 @@ int lua_lessthan (lua_State *L, int index1, int index2) { | |||
168 | 161 | ||
169 | 162 | ||
170 | double lua_tonumber (lua_State *L, int index) { | 163 | double lua_tonumber (lua_State *L, int index) { |
171 | access(L, index, (tonumber(o) == 0), 0.0, nvalue(o)); | 164 | access(L, index, (tonumber(o) == 0), 0, nvalue(o)); |
172 | } | 165 | } |
173 | 166 | ||
174 | const char *lua_tostring (lua_State *L, int index) { | 167 | const char *lua_tostring (lua_State *L, int index) { |
@@ -180,19 +173,19 @@ size_t lua_strlen (lua_State *L, int index) { | |||
180 | } | 173 | } |
181 | 174 | ||
182 | lua_CFunction lua_tocfunction (lua_State *L, int index) { | 175 | lua_CFunction lua_tocfunction (lua_State *L, int index) { |
183 | access(L, index, (ttype(o) == TAG_CCLOSURE), NULL, clvalue(o)->f.c); | 176 | access(L, index, iscfunction(o), NULL, clvalue(o)->f.c); |
184 | } | 177 | } |
185 | 178 | ||
186 | void *lua_touserdata (lua_State *L, int index) { | 179 | void *lua_touserdata (lua_State *L, int index) { |
187 | access(L, index, (ttype(o) == TAG_USERDATA), NULL, tsvalue(o)->u.d.value); | 180 | access(L, index, (ttype(o) == LUA_TUSERDATA), NULL, tsvalue(o)->u.d.value); |
188 | } | 181 | } |
189 | 182 | ||
190 | const void *lua_topointer (lua_State *L, int index) { | 183 | const void *lua_topointer (lua_State *L, int index) { |
191 | StkId o = Index(L, index); | 184 | StkId o = Index(L, index); |
192 | switch (ttype(o)) { | 185 | switch (ttype(o)) { |
193 | case TAG_TABLE: | 186 | case LUA_TTABLE: |
194 | return hvalue(o); | 187 | return hvalue(o); |
195 | case TAG_CCLOSURE: case TAG_LCLOSURE: | 188 | case LUA_TFUNCTION: |
196 | return clvalue(o); | 189 | return clvalue(o); |
197 | default: return NULL; | 190 | default: return NULL; |
198 | } | 191 | } |
@@ -206,13 +199,13 @@ const void *lua_topointer (lua_State *L, int index) { | |||
206 | 199 | ||
207 | 200 | ||
208 | void lua_pushnil (lua_State *L) { | 201 | void lua_pushnil (lua_State *L) { |
209 | ttype(L->top) = TAG_NIL; | 202 | ttype(L->top) = LUA_TNIL; |
210 | api_incr_top(L); | 203 | api_incr_top(L); |
211 | } | 204 | } |
212 | 205 | ||
213 | 206 | ||
214 | void lua_pushnumber (lua_State *L, double n) { | 207 | void lua_pushnumber (lua_State *L, double n) { |
215 | ttype(L->top) = TAG_NUMBER; | 208 | ttype(L->top) = LUA_TNUMBER; |
216 | nvalue(L->top) = n; | 209 | nvalue(L->top) = n; |
217 | api_incr_top(L); | 210 | api_incr_top(L); |
218 | } | 211 | } |
@@ -220,7 +213,7 @@ void lua_pushnumber (lua_State *L, double n) { | |||
220 | 213 | ||
221 | void lua_pushlstring (lua_State *L, const char *s, size_t len) { | 214 | void lua_pushlstring (lua_State *L, const char *s, size_t len) { |
222 | tsvalue(L->top) = luaS_newlstr(L, s, len); | 215 | tsvalue(L->top) = luaS_newlstr(L, s, len); |
223 | ttype(L->top) = TAG_STRING; | 216 | ttype(L->top) = LUA_TSTRING; |
224 | api_incr_top(L); | 217 | api_incr_top(L); |
225 | } | 218 | } |
226 | 219 | ||
@@ -239,10 +232,10 @@ void lua_pushcclosure (lua_State *L, lua_CFunction fn, int n) { | |||
239 | 232 | ||
240 | 233 | ||
241 | void lua_pushusertag (lua_State *L, void *u, int tag) { /* ORDER LUA_T */ | 234 | void lua_pushusertag (lua_State *L, void *u, int tag) { /* ORDER LUA_T */ |
242 | if (tag != LUA_ANYTAG && tag != TAG_USERDATA && tag < NUM_TAGS) | 235 | if (!(tag == LUA_ANYTAG || tag == LUA_TUSERDATA || validtag(tag))) |
243 | luaO_verror(L, "invalid tag for a userdata (%d)", tag); | 236 | luaO_verror(L, "invalid tag for a userdata (%d)", tag); |
244 | tsvalue(L->top) = luaS_createudata(L, u, tag); | 237 | tsvalue(L->top) = luaS_createudata(L, u, tag); |
245 | ttype(L->top) = TAG_USERDATA; | 238 | ttype(L->top) = LUA_TUSERDATA; |
246 | api_incr_top(L); | 239 | api_incr_top(L); |
247 | } | 240 | } |
248 | 241 | ||
@@ -271,14 +264,14 @@ void lua_gettable (lua_State *L, int index) { | |||
271 | 264 | ||
272 | void lua_rawget (lua_State *L, int index) { | 265 | void lua_rawget (lua_State *L, int index) { |
273 | StkId t = Index(L, index); | 266 | StkId t = Index(L, index); |
274 | LUA_ASSERT(ttype(t) == TAG_TABLE, "table expected"); | 267 | LUA_ASSERT(ttype(t) == LUA_TTABLE, "table expected"); |
275 | *(L->top - 1) = *luaH_get(L, hvalue(t), L->top - 1); | 268 | *(L->top - 1) = *luaH_get(L, hvalue(t), L->top - 1); |
276 | } | 269 | } |
277 | 270 | ||
278 | 271 | ||
279 | void lua_rawgeti (lua_State *L, int index, int n) { | 272 | void lua_rawgeti (lua_State *L, int index, int n) { |
280 | StkId o = Index(L, index); | 273 | StkId o = Index(L, index); |
281 | LUA_ASSERT(ttype(o) == TAG_TABLE, "table expected"); | 274 | LUA_ASSERT(ttype(o) == LUA_TTABLE, "table expected"); |
282 | *L->top = *luaH_getnum(hvalue(o), n); | 275 | *L->top = *luaH_getnum(hvalue(o), n); |
283 | api_incr_top(L); | 276 | api_incr_top(L); |
284 | } | 277 | } |
@@ -286,14 +279,14 @@ void lua_rawgeti (lua_State *L, int index, int n) { | |||
286 | 279 | ||
287 | void lua_getglobals (lua_State *L) { | 280 | void lua_getglobals (lua_State *L) { |
288 | hvalue(L->top) = L->gt; | 281 | hvalue(L->top) = L->gt; |
289 | ttype(L->top) = TAG_TABLE; | 282 | ttype(L->top) = LUA_TTABLE; |
290 | api_incr_top(L); | 283 | api_incr_top(L); |
291 | } | 284 | } |
292 | 285 | ||
293 | 286 | ||
294 | int lua_getref (lua_State *L, int ref) { | 287 | int lua_getref (lua_State *L, int ref) { |
295 | if (ref == LUA_REFNIL) | 288 | if (ref == LUA_REFNIL) |
296 | ttype(L->top) = TAG_NIL; | 289 | ttype(L->top) = LUA_TNIL; |
297 | else if (0 <= ref && ref < L->refSize && | 290 | else if (0 <= ref && ref < L->refSize && |
298 | (L->refArray[ref].st == LOCK || L->refArray[ref].st == HOLD)) | 291 | (L->refArray[ref].st == LOCK || L->refArray[ref].st == HOLD)) |
299 | *L->top = L->refArray[ref].o; | 292 | *L->top = L->refArray[ref].o; |
@@ -306,7 +299,7 @@ int lua_getref (lua_State *L, int ref) { | |||
306 | 299 | ||
307 | void lua_newtable (lua_State *L) { | 300 | void lua_newtable (lua_State *L) { |
308 | hvalue(L->top) = luaH_new(L, 0); | 301 | hvalue(L->top) = luaH_new(L, 0); |
309 | ttype(L->top) = TAG_TABLE; | 302 | ttype(L->top) = LUA_TTABLE; |
310 | api_incr_top(L); | 303 | api_incr_top(L); |
311 | } | 304 | } |
312 | 305 | ||
@@ -334,7 +327,7 @@ void lua_settable (lua_State *L, int index) { | |||
334 | 327 | ||
335 | void lua_rawset (lua_State *L, int index) { | 328 | void lua_rawset (lua_State *L, int index) { |
336 | StkId t = Index(L, index); | 329 | StkId t = Index(L, index); |
337 | LUA_ASSERT(ttype(t) == TAG_TABLE, "table expected"); | 330 | LUA_ASSERT(ttype(t) == LUA_TTABLE, "table expected"); |
338 | *luaH_set(L, hvalue(t), L->top-2) = *(L->top-1); | 331 | *luaH_set(L, hvalue(t), L->top-2) = *(L->top-1); |
339 | L->top -= 2; | 332 | L->top -= 2; |
340 | } | 333 | } |
@@ -342,7 +335,7 @@ void lua_rawset (lua_State *L, int index) { | |||
342 | 335 | ||
343 | void lua_rawseti (lua_State *L, int index, int n) { | 336 | void lua_rawseti (lua_State *L, int index, int n) { |
344 | StkId o = Index(L, index); | 337 | StkId o = Index(L, index); |
345 | LUA_ASSERT(ttype(o) == TAG_TABLE, "table expected"); | 338 | LUA_ASSERT(ttype(o) == LUA_TTABLE, "table expected"); |
346 | *luaH_setint(L, hvalue(o), n) = *(L->top-1); | 339 | *luaH_setint(L, hvalue(o), n) = *(L->top-1); |
347 | L->top--; | 340 | L->top--; |
348 | } | 341 | } |
@@ -350,14 +343,14 @@ void lua_rawseti (lua_State *L, int index, int n) { | |||
350 | 343 | ||
351 | void lua_setglobals (lua_State *L) { | 344 | void lua_setglobals (lua_State *L) { |
352 | StkId newtable = --L->top; | 345 | StkId newtable = --L->top; |
353 | LUA_ASSERT(ttype(newtable) == TAG_TABLE, "table expected"); | 346 | LUA_ASSERT(ttype(newtable) == LUA_TTABLE, "table expected"); |
354 | L->gt = hvalue(newtable); | 347 | L->gt = hvalue(newtable); |
355 | } | 348 | } |
356 | 349 | ||
357 | 350 | ||
358 | int lua_ref (lua_State *L, int lock) { | 351 | int lua_ref (lua_State *L, int lock) { |
359 | int ref; | 352 | int ref; |
360 | if (ttype(L->top-1) == TAG_NIL) | 353 | if (ttype(L->top-1) == LUA_TNIL) |
361 | ref = LUA_REFNIL; | 354 | ref = LUA_REFNIL; |
362 | else { | 355 | else { |
363 | if (L->refFree != NONEXT) { /* is there a free place? */ | 356 | if (L->refFree != NONEXT) { /* is there a free place? */ |
@@ -420,15 +413,15 @@ void lua_setgcthreshold (lua_State *L, int newthreshold) { | |||
420 | void lua_settag (lua_State *L, int tag) { | 413 | void lua_settag (lua_State *L, int tag) { |
421 | luaT_realtag(L, tag); | 414 | luaT_realtag(L, tag); |
422 | switch (ttype(L->top-1)) { | 415 | switch (ttype(L->top-1)) { |
423 | case TAG_TABLE: | 416 | case LUA_TTABLE: |
424 | hvalue(L->top-1)->htag = tag; | 417 | hvalue(L->top-1)->htag = tag; |
425 | break; | 418 | break; |
426 | case TAG_USERDATA: | 419 | case LUA_TUSERDATA: |
427 | tsvalue(L->top-1)->u.d.tag = tag; | 420 | tsvalue(L->top-1)->u.d.tag = tag; |
428 | break; | 421 | break; |
429 | default: | 422 | default: |
430 | luaO_verror(L, "cannot change the tag of a %.20s", | 423 | luaO_verror(L, "cannot change the tag of a %.20s", |
431 | luaO_typename(L, L->top-1)); | 424 | luaO_typename(L->top-1)); |
432 | } | 425 | } |
433 | L->top--; | 426 | L->top--; |
434 | } | 427 | } |
@@ -446,7 +439,7 @@ void lua_unref (lua_State *L, int ref) { | |||
446 | int lua_next (lua_State *L, int index) { | 439 | int lua_next (lua_State *L, int index) { |
447 | StkId t = Index(L, index); | 440 | StkId t = Index(L, index); |
448 | Node *n; | 441 | Node *n; |
449 | LUA_ASSERT(ttype(t) == TAG_TABLE, "table expected"); | 442 | LUA_ASSERT(ttype(t) == LUA_TTABLE, "table expected"); |
450 | n = luaH_next(L, hvalue(t), Index(L, -1)); | 443 | n = luaH_next(L, hvalue(t), Index(L, -1)); |
451 | if (n) { | 444 | if (n) { |
452 | *(L->top-1) = *key(n); | 445 | *(L->top-1) = *key(n); |
@@ -464,15 +457,15 @@ int lua_next (lua_State *L, int index) { | |||
464 | int lua_getn (lua_State *L, int index) { | 457 | int lua_getn (lua_State *L, int index) { |
465 | Hash *h = hvalue(Index(L, index)); | 458 | Hash *h = hvalue(Index(L, index)); |
466 | const TObject *value = luaH_getstr(h, luaS_new(L, "n")); /* value = h.n */ | 459 | const TObject *value = luaH_getstr(h, luaS_new(L, "n")); /* value = h.n */ |
467 | if (ttype(value) == TAG_NUMBER) | 460 | if (ttype(value) == LUA_TNUMBER) |
468 | return (int)nvalue(value); | 461 | return (int)nvalue(value); |
469 | else { | 462 | else { |
470 | Number max = 0; | 463 | Number max = 0; |
471 | int i = h->size; | 464 | int i = h->size; |
472 | Node *n = h->node; | 465 | Node *n = h->node; |
473 | while (i--) { | 466 | while (i--) { |
474 | if (ttype(key(n)) == TAG_NUMBER && | 467 | if (ttype(key(n)) == LUA_TNUMBER && |
475 | ttype(val(n)) != TAG_NIL && | 468 | ttype(val(n)) != LUA_TNIL && |
476 | nvalue(key(n)) > max) | 469 | nvalue(key(n)) > max) |
477 | max = nvalue(key(n)); | 470 | max = nvalue(key(n)); |
478 | n++; | 471 | n++; |