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: { |
