From 9d605982605db5ab8117b4cda71284bca2d25db8 Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Tue, 29 Aug 2000 11:48:16 -0300 Subject: [PATCH] better definitions for MULTRET --- ldo.c | 9 ++++----- ldo.h | 3 +-- llimits.h | 10 +--------- lopcodes.h | 11 ++++++++++- lvm.c | 8 +++++--- 5 files changed, 21 insertions(+), 20 deletions(-) diff --git a/ldo.c b/ldo.c index f2e36f67..e9fc1505 100644 --- a/ldo.c +++ b/ldo.c @@ -1,5 +1,5 @@ /* -** $Id: ldo.c,v 1.86 2000/08/28 17:57:04 roberto Exp roberto $ +** $Id: ldo.c,v 1.87 2000/08/29 14:33:31 roberto Exp roberto $ ** Stack and Call structure of Lua ** See Copyright Notice in lua.h */ @@ -92,7 +92,7 @@ void luaD_adjusttop (lua_State *L, StkId base, int extra) { /* ** Open a hole inside the stack at `pos' */ -void luaD_openstack (lua_State *L, StkId pos) { +static void luaD_openstack (lua_State *L, StkId pos) { int i = L->top-pos; while (i--) pos[i+1] = pos[i]; incr_top; @@ -160,7 +160,7 @@ void luaD_callTM (lua_State *L, const TObject *f, int nParams, int nResults) { ** The arguments are on the stack, right after the function. ** When returns, the results are on the stack, starting at the original ** function position. -** The number of results is nResults, unless nResults=MULT_RET. +** The number of results is nResults, unless nResults=LUA_MULTRET. */ void luaD_call (lua_State *L, StkId func, int nResults) { StkId firstResult; @@ -197,7 +197,7 @@ void luaD_call (lua_State *L, StkId func, int nResults) { if (callhook) /* same hook that was active at entry */ luaD_callHook(L, func, callhook, "return"); /* adjust the number of results */ - if (nResults == MULT_RET) + if (nResults == LUA_MULTRET) nResults = L->top - firstResult; else luaD_adjusttop(L, firstResult, nResults); @@ -264,7 +264,6 @@ int lua_call (lua_State *L, int nargs, int nresults) { StkId func = L->top - (nargs+1); /* function to be called */ struct lua_longjmp myErrorJmp; chain_longjmp(L, &myErrorJmp); - if (nresults == LUA_MULTRET) nresults = MULT_RET; /* internal code */ if (setjmp(myErrorJmp.b) == 0) { luaD_call(L, func, nresults); } diff --git a/ldo.h b/ldo.h index ba168ccb..becbf417 100644 --- a/ldo.h +++ b/ldo.h @@ -1,5 +1,5 @@ /* -** $Id: ldo.h,v 1.22 2000/08/07 18:39:16 roberto Exp roberto $ +** $Id: ldo.h,v 1.23 2000/08/28 17:57:04 roberto Exp roberto $ ** Stack and Call structure of Lua ** See Copyright Notice in lua.h */ @@ -21,7 +21,6 @@ void luaD_init (lua_State *L, int stacksize); void luaD_adjusttop (lua_State *L, StkId base, int extra); -void luaD_openstack (lua_State *L, StkId pos); void luaD_lineHook (lua_State *L, StkId func, int line, lua_Hook linehook); void luaD_call (lua_State *L, StkId func, int nResults); void luaD_callTM (lua_State *L, const TObject *f, int nParams, int nResults); diff --git a/llimits.h b/llimits.h index c716b0dd..4c66c7b5 100644 --- a/llimits.h +++ b/llimits.h @@ -1,5 +1,5 @@ /* -** $Id: llimits.h,v 1.12 2000/08/15 18:28:48 roberto Exp roberto $ +** $Id: llimits.h,v 1.13 2000/08/28 17:57:04 roberto Exp roberto $ ** Limits, basic types, and some other "installation-dependent" definitions ** See Copyright Notice in lua.h */ @@ -157,14 +157,6 @@ typedef unsigned long Instruction; #endif -/* special code for multiple returns */ -#define MULT_RET 255 /* (<=MAXARG_B) */ -#if MULT_RET>MAXARG_B -#undef MULT_RET -#define MULT_RET MAXARG_B -#endif - - /* maximum number of variables in the left side of an assignment */ #ifndef MAXVARSLH #define MAXVARSLH 100 /* arbitrary limit (MAXARG_B +#undef MULT_RET +#define MULT_RET MAXARG_B +#endif + + #endif diff --git a/lvm.c b/lvm.c index 9a651b6f..b9f5f74e 100644 --- a/lvm.c +++ b/lvm.c @@ -1,5 +1,5 @@ /* -** $Id: lvm.c,v 1.129 2000/08/22 20:53:30 roberto Exp roberto $ +** $Id: lvm.c,v 1.130 2000/08/29 14:41:56 roberto Exp roberto $ ** Lua virtual machine ** See Copyright Notice in lua.h */ @@ -368,14 +368,16 @@ StkId luaV_execute (lua_State *L, const Closure *cl, StkId base) { return base+GETARG_U(i); } case OP_CALL: { + int nres = GETARG_B(i); + if (nres == MULT_RET) nres = LUA_MULTRET; L->top = top; - luaD_call(L, base+GETARG_A(i), GETARG_B(i)); + luaD_call(L, base+GETARG_A(i), nres); top = L->top; break; } case OP_TAILCALL: { L->top = top; - luaD_call(L, base+GETARG_A(i), MULT_RET); + luaD_call(L, base+GETARG_A(i), LUA_MULTRET); return base+GETARG_B(i); } case OP_PUSHNIL: {