diff options
| author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1999-12-06 09:42:18 -0200 |
|---|---|---|
| committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1999-12-06 09:42:18 -0200 |
| commit | 533beedad254004d627437984d5ea521d2d2fa48 (patch) | |
| tree | 3d48e0d5be484e3e34d0ff6cf50dc25352d4a0b1 | |
| parent | 968ad49da6522c1cf413bd86323a613176d12c07 (diff) | |
| download | lua-533beedad254004d627437984d5ea521d2d2fa48.tar.gz lua-533beedad254004d627437984d5ea521d2d2fa48.tar.bz2 lua-533beedad254004d627437984d5ea521d2d2fa48.zip | |
new tests for begin/end blocks and multi-state
| -rw-r--r-- | lbuiltin.c | 43 |
1 files changed, 38 insertions, 5 deletions
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lbuiltin.c,v 1.80 1999/12/02 16:24:45 roberto Exp roberto $ | 2 | ** $Id: lbuiltin.c,v 1.81 1999/12/03 18:02:54 roberto Exp $ |
| 3 | ** Built-in functions | 3 | ** Built-in functions |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | */ | 5 | */ |
| @@ -462,8 +462,8 @@ static void luaB_foreachvar (lua_State *L) { | |||
| 462 | *(L->top++) = gv->value; | 462 | *(L->top++) = gv->value; |
| 463 | luaD_call(L, L->top-3, 1); | 463 | luaD_call(L, L->top-3, 1); |
| 464 | if (ttype(L->top-1) != LUA_T_NIL) { | 464 | if (ttype(L->top-1) != LUA_T_NIL) { |
| 465 | *(L->top-2) = *(L->top-1); /* remove extra name */ | ||
| 465 | L->top--; | 466 | L->top--; |
| 466 | *(L->top-1) = *L->top; /* remove extra name */ | ||
| 467 | return; | 467 | return; |
| 468 | } | 468 | } |
| 469 | L->top-=2; /* remove result and extra name */ | 469 | L->top-=2; /* remove result and extra name */ |
| @@ -738,7 +738,11 @@ static void testC (lua_State *L) { | |||
| 738 | else if EQ("unref") { | 738 | else if EQ("unref") { |
| 739 | lua_unref(L, (int)lua_getnumber(L, reg[getreg(L, &pc)])); | 739 | lua_unref(L, (int)lua_getnumber(L, reg[getreg(L, &pc)])); |
| 740 | } | 740 | } |
| 741 | else if (EQ("getparam") || EQ("getresult")) { | 741 | else if EQ("getparam") { |
| 742 | int n = getreg(L, &pc); | ||
| 743 | reg[n] = lua_getparam(L, getnum(&pc)+1); /* skips the commmand itself */ | ||
| 744 | } | ||
| 745 | else if EQ("getresult") { | ||
| 742 | int n = getreg(L, &pc); | 746 | int n = getreg(L, &pc); |
| 743 | reg[n] = lua_getparam(L, getnum(&pc)); | 747 | reg[n] = lua_getparam(L, getnum(&pc)); |
| 744 | } | 748 | } |
| @@ -786,7 +790,7 @@ static void testC (lua_State *L) { | |||
| 786 | int val = getreg(L, &pc); | 790 | int val = getreg(L, &pc); |
| 787 | int tag = getreg(L, &pc); | 791 | int tag = getreg(L, &pc); |
| 788 | lua_pushusertag(L, (void *)(int)lua_getnumber(L, reg[val]), | 792 | lua_pushusertag(L, (void *)(int)lua_getnumber(L, reg[val]), |
| 789 | lua_getnumber(L, reg[tag])); | 793 | (int)lua_getnumber(L, reg[tag])); |
| 790 | } | 794 | } |
| 791 | else if EQ("udataval") { | 795 | else if EQ("udataval") { |
| 792 | int n = getreg(L, &pc); | 796 | int n = getreg(L, &pc); |
| @@ -795,7 +799,36 @@ static void testC (lua_State *L) { | |||
| 795 | } | 799 | } |
| 796 | else if EQ("settagmethod") { | 800 | else if EQ("settagmethod") { |
| 797 | int n = getreg(L, &pc); | 801 | int n = getreg(L, &pc); |
| 798 | lua_settagmethod(L, lua_getnumber(L, reg[n]), getname(&pc)); | 802 | lua_settagmethod(L, (int)lua_getnumber(L, reg[n]), getname(&pc)); |
| 803 | } | ||
| 804 | else if EQ("beginblock") { | ||
| 805 | lua_beginblock(L); | ||
| 806 | } | ||
| 807 | else if EQ("endblock") { | ||
| 808 | lua_endblock(L); | ||
| 809 | } | ||
| 810 | else if EQ("newstate") { | ||
| 811 | int stacksize = getnum(&pc); | ||
| 812 | lua_State *L1 = lua_newstate("stack", stacksize, | ||
| 813 | "builtin", getnum(&pc), NULL); | ||
| 814 | lua_pushuserdata(L, L1); | ||
| 815 | } | ||
| 816 | else if EQ("closestate") { | ||
| 817 | lua_close(lua_getuserdata(L, reg[getreg(L, &pc)])); | ||
| 818 | } | ||
| 819 | else if EQ("doremote") { | ||
| 820 | lua_Object ol1 = reg[getreg(L, &pc)]; | ||
| 821 | lua_Object str = reg[getreg(L, &pc)]; | ||
| 822 | lua_State *L1; | ||
| 823 | lua_Object temp; | ||
| 824 | int i; | ||
| 825 | if (!lua_isuserdata(L, ol1) || !lua_isstring(L, str)) | ||
| 826 | lua_error(L, "bad arguments for `doremote'"); | ||
| 827 | L1 = lua_getuserdata(L, ol1); | ||
| 828 | lua_dostring(L1, lua_getstring(L, str)); | ||
| 829 | i = 1; | ||
| 830 | while ((temp = lua_getresult(L1, i++)) != LUA_NOOBJECT) | ||
| 831 | lua_pushstring(L, lua_getstring(L1, temp)); | ||
| 799 | } | 832 | } |
| 800 | else luaL_verror(L, "unknown command in `testC': %.20s", inst); | 833 | else luaL_verror(L, "unknown command in `testC': %.20s", inst); |
| 801 | } | 834 | } |
