diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1998-07-12 13:16:43 -0300 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1998-07-12 13:16:43 -0300 |
commit | afb5ef72e1974ba6d0fc336637c71f3ee8fb03a2 (patch) | |
tree | 9e7c9bf902a86ae79a0eecb413dfb00ad1250665 /lvm.c | |
parent | 1d8edd347d728ba6b0160359f3c0391e7b1a8a44 (diff) | |
download | lua-afb5ef72e1974ba6d0fc336637c71f3ee8fb03a2.tar.gz lua-afb5ef72e1974ba6d0fc336637c71f3ee8fb03a2.tar.bz2 lua-afb5ef72e1974ba6d0fc336637c71f3ee8fb03a2.zip |
new function "sort" + many small changes
Diffstat (limited to 'lvm.c')
-rw-r--r-- | lvm.c | 29 |
1 files changed, 13 insertions, 16 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: lvm.c,v 1.29 1998/05/31 22:18:24 roberto Exp roberto $ | 2 | ** $Id: lvm.c,v 1.30 1998/06/11 18:21:37 roberto Exp roberto $ |
3 | ** Lua virtual machine | 3 | ** Lua virtual machine |
4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
5 | */ | 5 | */ |
@@ -112,7 +112,7 @@ void luaV_gettable (void) | |||
112 | im = luaT_getim(tg, IM_GETTABLE); | 112 | im = luaT_getim(tg, IM_GETTABLE); |
113 | if (ttype(im) == LUA_T_NIL) { /* and does not have a "gettable" method */ | 113 | if (ttype(im) == LUA_T_NIL) { /* and does not have a "gettable" method */ |
114 | TObject *h = luaH_get(avalue(S->top-2), S->top-1); | 114 | TObject *h = luaH_get(avalue(S->top-2), S->top-1); |
115 | if (h != NULL && ttype(h) != LUA_T_NIL) { | 115 | if (ttype(h) != LUA_T_NIL) { |
116 | --S->top; | 116 | --S->top; |
117 | *(S->top-1) = *h; | 117 | *(S->top-1) = *h; |
118 | } | 118 | } |
@@ -242,8 +242,8 @@ static int strcomp (char *l, long ll, char *r, long lr) | |||
242 | } | 242 | } |
243 | } | 243 | } |
244 | 244 | ||
245 | static void comparison (lua_Type ttype_less, lua_Type ttype_equal, | 245 | void luaV_comparison (lua_Type ttype_less, lua_Type ttype_equal, |
246 | lua_Type ttype_great, IMS op) | 246 | lua_Type ttype_great, IMS op) |
247 | { | 247 | { |
248 | struct Stack *S = &L->stack; | 248 | struct Stack *S = &L->stack; |
249 | TObject *l = S->top-2; | 249 | TObject *l = S->top-2; |
@@ -269,22 +269,19 @@ void luaV_pack (StkId firstel, int nvararg, TObject *tab) | |||
269 | { | 269 | { |
270 | TObject *firstelem = L->stack.stack+firstel; | 270 | TObject *firstelem = L->stack.stack+firstel; |
271 | int i; | 271 | int i; |
272 | Hash *htab; | ||
272 | if (nvararg < 0) nvararg = 0; | 273 | if (nvararg < 0) nvararg = 0; |
273 | avalue(tab) = luaH_new(nvararg+1); /* +1 for field 'n' */ | 274 | htab = avalue(tab) = luaH_new(nvararg+1); /* +1 for field 'n' */ |
274 | ttype(tab) = LUA_T_ARRAY; | 275 | ttype(tab) = LUA_T_ARRAY; |
275 | for (i=0; i<nvararg; i++) { | 276 | for (i=0; i<nvararg; i++) |
276 | TObject index; | 277 | luaH_setint(htab, i+1, firstelem+i); |
277 | ttype(&index) = LUA_T_NUMBER; | ||
278 | nvalue(&index) = i+1; | ||
279 | *(luaH_set(avalue(tab), &index)) = *(firstelem+i); | ||
280 | } | ||
281 | /* store counter in field "n" */ { | 278 | /* store counter in field "n" */ { |
282 | TObject index, extra; | 279 | TObject index, extra; |
283 | ttype(&index) = LUA_T_STRING; | 280 | ttype(&index) = LUA_T_STRING; |
284 | tsvalue(&index) = luaS_new("n"); | 281 | tsvalue(&index) = luaS_new("n"); |
285 | ttype(&extra) = LUA_T_NUMBER; | 282 | ttype(&extra) = LUA_T_NUMBER; |
286 | nvalue(&extra) = nvararg; | 283 | nvalue(&extra) = nvararg; |
287 | *(luaH_set(avalue(tab), &index)) = extra; | 284 | *(luaH_set(htab, &index)) = extra; |
288 | } | 285 | } |
289 | } | 286 | } |
290 | 287 | ||
@@ -528,19 +525,19 @@ StkId luaV_execute (Closure *cl, TProtoFunc *tf, StkId base) | |||
528 | } | 525 | } |
529 | 526 | ||
530 | case LTOP: | 527 | case LTOP: |
531 | comparison(LUA_T_NUMBER, LUA_T_NIL, LUA_T_NIL, IM_LT); | 528 | luaV_comparison(LUA_T_NUMBER, LUA_T_NIL, LUA_T_NIL, IM_LT); |
532 | break; | 529 | break; |
533 | 530 | ||
534 | case LEOP: | 531 | case LEOP: |
535 | comparison(LUA_T_NUMBER, LUA_T_NUMBER, LUA_T_NIL, IM_LE); | 532 | luaV_comparison(LUA_T_NUMBER, LUA_T_NUMBER, LUA_T_NIL, IM_LE); |
536 | break; | 533 | break; |
537 | 534 | ||
538 | case GTOP: | 535 | case GTOP: |
539 | comparison(LUA_T_NIL, LUA_T_NIL, LUA_T_NUMBER, IM_GT); | 536 | luaV_comparison(LUA_T_NIL, LUA_T_NIL, LUA_T_NUMBER, IM_GT); |
540 | break; | 537 | break; |
541 | 538 | ||
542 | case GEOP: | 539 | case GEOP: |
543 | comparison(LUA_T_NIL, LUA_T_NUMBER, LUA_T_NUMBER, IM_GE); | 540 | luaV_comparison(LUA_T_NIL, LUA_T_NUMBER, LUA_T_NUMBER, IM_GE); |
544 | break; | 541 | break; |
545 | 542 | ||
546 | case ADDOP: { | 543 | case ADDOP: { |