diff -Nur lua-5.1.4/src/lcode.c lua-5.1.4-no_vararg/src/lcode.c --- lua-5.1.4/src/lcode.c 2007年12月28日 15:32:23.000000000 +0000 +++ lua-5.1.4-no_vararg/src/lcode.c 2009年08月20日 14:01:05.000000000 +0100 @@ -281,11 +281,6 @@ if (e->k == VCALL) { /* expression is an open function call? */ SETARG_C(getcode(fs, e), nresults+1); } - else if (e->k == VVARARG) { - SETARG_B(getcode(fs, e), nresults+1); - SETARG_A(getcode(fs, e), fs->freereg); - luaK_reserveregs(fs, 1); - } } @@ -294,10 +289,6 @@ e->k = VNONRELOC; e->u.s.info = GETARG_A(getcode(fs, e)); } - else if (e->k == VVARARG) { - SETARG_B(getcode(fs, e), 2); - e->k = VRELOCABLE; /* can relocate its simple result */ - } } @@ -324,7 +315,6 @@ e->k = VRELOCABLE; break; } - case VVARARG: case VCALL: { luaK_setoneret(fs, e); break; diff -Nur lua-5.1.4/src/ldebug.c lua-5.1.4-no_vararg/src/ldebug.c --- lua-5.1.4/src/ldebug.c 2008年05月08日 17:56:26.000000000 +0100 +++ lua-5.1.4-no_vararg/src/ldebug.c 2009年08月20日 14:01:05.000000000 +0100 @@ -275,9 +275,7 @@ static int precheck (const Proto *pt) { check(pt->maxstacksize <= MAXSTACK); - check(pt->numparams+(pt->is_vararg & VARARG_HASARG) <= pt->maxstacksize); - check(!(pt->is_vararg & VARARG_NEEDSARG) || - (pt->is_vararg & VARARG_HASARG)); + check(pt->numparams <= pt->maxstacksize); check(pt->sizeupvalues <= pt->nups); check(pt->sizelineinfo == pt->sizecode || pt->sizelineinfo == 0); check(pt->sizecode> 0 && GET_OPCODE(pt->code[pt->sizecode-1]) == OP_RETURN); @@ -460,14 +458,6 @@ pc += nup; /* do not 'execute' these pseudo-instructions */ break; } - case OP_VARARG: { - check((pt->is_vararg & VARARG_ISVARARG) && - !(pt->is_vararg & VARARG_NEEDSARG)); - b--; - if (b == LUA_MULTRET) check(checkopenop(pt, pc)); - checkreg(pt, a+b-1); - break; - } default: break; } } diff -Nur lua-5.1.4/src/ldo.c lua-5.1.4-no_vararg/src/ldo.c --- lua-5.1.4/src/ldo.c 2008年01月18日 22:31:22.000000000 +0000 +++ lua-5.1.4-no_vararg/src/ldo.c 2009年08月20日 14:01:05.000000000 +0100 @@ -212,18 +212,6 @@ StkId base, fixed; for (; actual < nfixargs; ++actual) setnilvalue(L->top++); -#if defined(LUA_COMPAT_VARARG) - if (p->is_vararg & VARARG_NEEDSARG) { /* compat. with old-style vararg? */ - int nvar = actual - nfixargs; /* number of extra arguments */ - lua_assert(p->is_vararg & VARARG_HASARG); - luaC_checkGC(L); - htab = luaH_new(L, nvar, 1); /* create `arg' table */ - for (i=0; itop - nvar + i); - /* store counter in field `n' */ - setnvalue(luaH_setstr(L, htab, luaS_newliteral(L, "n")), cast_num(nvar)); - } -#endif /* move fixed parameters to final position */ fixed = L->top - actual; /* first fixed argument */ base = L->top; /* final position of first argument */ diff -Nur lua-5.1.4/src/llex.c lua-5.1.4-no_vararg/src/llex.c --- lua-5.1.4/src/llex.c 2007年12月27日 13:02:25.000000000 +0000 +++ lua-5.1.4-no_vararg/src/llex.c 2009年08月20日 14:01:05.000000000 +0100 @@ -393,11 +393,8 @@ } case '.': { save_and_next(ls); - if (check_next(ls, ".")) { - if (check_next(ls, ".")) - return TK_DOTS; /* ... */ - else return TK_CONCAT; /* .. */ - } + if (check_next(ls, ".")) + return TK_CONCAT; /* .. */ else if (!isdigit(ls->current)) return '.'; else { read_numeral(ls, seminfo); diff -Nur lua-5.1.4/src/llex.h lua-5.1.4-no_vararg/src/llex.h --- lua-5.1.4/src/llex.h 2007年12月27日 13:02:25.000000000 +0000 +++ lua-5.1.4-no_vararg/src/llex.h 2009年08月20日 14:01:05.000000000 +0100 @@ -28,7 +28,7 @@ TK_IF, TK_IN, TK_LOCAL, TK_NIL, TK_NOT, TK_OR, TK_REPEAT, TK_RETURN, TK_THEN, TK_TRUE, TK_UNTIL, TK_WHILE, /* other terminal symbols */ - TK_CONCAT, TK_DOTS, TK_EQ, TK_GE, TK_LE, TK_NE, TK_NUMBER, + TK_CONCAT, TK_EQ, TK_GE, TK_LE, TK_NE, TK_NUMBER, TK_NAME, TK_STRING, TK_EOS }; diff -Nur lua-5.1.4/src/lobject.h lua-5.1.4-no_vararg/src/lobject.h --- lua-5.1.4/src/lobject.h 2008年08月06日 14:29:48.000000000 +0100 +++ lua-5.1.4-no_vararg/src/lobject.h 2009年08月20日 14:01:05.000000000 +0100 @@ -253,12 +253,6 @@ } Proto; -/* masks for new-style vararg */ -#define VARARG_HASARG 1 -#define VARARG_ISVARARG 2 -#define VARARG_NEEDSARG 4 - - typedef struct LocVar { TString *varname; int startpc; /* first point where variable is active */ diff -Nur lua-5.1.4/src/lopcodes.c lua-5.1.4-no_vararg/src/lopcodes.c --- lua-5.1.4/src/lopcodes.c 2007年12月27日 13:02:25.000000000 +0000 +++ lua-5.1.4-no_vararg/src/lopcodes.c 2009年08月20日 14:01:05.000000000 +0100 @@ -51,7 +51,6 @@ "SETLIST", "CLOSE", "CLOSURE", - "VARARG", NULL }; @@ -97,6 +96,5 @@ ,opmode(0, 0, OpArgU, OpArgU, iABC) /* OP_SETLIST */ ,opmode(0, 0, OpArgN, OpArgN, iABC) /* OP_CLOSE */ ,opmode(0, 1, OpArgU, OpArgN, iABx) /* OP_CLOSURE */ - ,opmode(0, 1, OpArgU, OpArgN, iABC) /* OP_VARARG */ }; diff -Nur lua-5.1.4/src/lopcodes.h lua-5.1.4-no_vararg/src/lopcodes.h --- lua-5.1.4/src/lopcodes.h 2007年12月27日 13:02:25.000000000 +0000 +++ lua-5.1.4-no_vararg/src/lopcodes.h 2009年08月20日 14:05:16.000000000 +0100 @@ -203,12 +203,10 @@ OP_CLOSE,/* A close all variables in the stack up to (>=) R(A)*/ OP_CLOSURE,/* A Bx R(A) := closure(KPROTO[Bx], R(A), ... ,R(A+n)) */ - -OP_VARARG/* A B R(A), R(A+1), ..., R(A+B-1) = vararg */ } OpCode; -#define NUM_OPCODES (cast(int, OP_VARARG) + 1) +#define NUM_OPCODES (cast(int, OP_CLOSURE) + 1) @@ -218,9 +216,6 @@ and can be 0: OP_CALL then sets `top' to last_result+1, so next open instruction (OP_CALL, OP_RETURN, OP_SETLIST) may use `top'. - (*) In OP_VARARG, if (B == 0) then use actual number of varargs and - set top (like in OP_CALL with C == 0). - (*) In OP_RETURN, if (B == 0) then return up to `top' (*) In OP_SETLIST, if (B == 0) then B = `top'; diff -Nur lua-5.1.4/src/lparser.c lua-5.1.4-no_vararg/src/lparser.c --- lua-5.1.4/src/lparser.c 2007年12月28日 15:32:23.000000000 +0000 +++ lua-5.1.4-no_vararg/src/lparser.c 2009年08月20日 14:01:05.000000000 +0100 @@ -27,7 +27,7 @@ -#define hasmultret(k) ((k) == VCALL || (k) == VVARARG) +#define hasmultret(k) ((k) == VCALL) #define getlocvar(fs, i) ((fs)->f->locvars[(fs)->actvar[i]]) @@ -386,7 +386,6 @@ lexstate.buff = buff; luaX_setinput(L, &lexstate, z, luaS_new(L, name)); open_func(&lexstate, &funcstate); - funcstate.f->is_vararg = VARARG_ISVARARG; /* main func. is always vararg */ luaX_next(&lexstate); /* read first token */ chunk(&lexstate); check(&lexstate, TK_EOS); @@ -553,22 +552,12 @@ new_localvar(ls, str_checkname(ls), nparams++); break; } - case TK_DOTS: { /* param -> `...' */ - luaX_next(ls); -#if defined(LUA_COMPAT_VARARG) - /* use `arg' as default name */ - new_localvarliteral(ls, "arg", nparams++); - f->is_vararg = VARARG_HASARG | VARARG_NEEDSARG; -#endif - f->is_vararg |= VARARG_ISVARARG; - break; - } - default: luaX_syntaxerror(ls, " or " LUA_QL("...") " expected"); + default: luaX_syntaxerror(ls, " expected"); } } while (!f->is_vararg && testnext(ls, ',')); } adjustlocalvars(ls, nparams); - f->numparams = cast_byte(fs->nactvar - (f->is_vararg & VARARG_HASARG)); + f->numparams = cast_byte(fs->nactvar); luaK_reserveregs(fs, fs->nactvar); /* reserve register for parameters */ } @@ -749,14 +738,6 @@ init_exp(v, VFALSE, 0); break; } - case TK_DOTS: { /* vararg */ - FuncState *fs = ls->fs; - check_condition(ls, fs->f->is_vararg, - "cannot use " LUA_QL("...") " outside a vararg function"); - fs->f->is_vararg &= ~VARARG_NEEDSARG; /* don't need 'arg' */ - init_exp(v, VVARARG, luaK_codeABC(fs, OP_VARARG, 0, 1, 0)); - break; - } case '{': { /* constructor */ constructor(ls, v); return; diff -Nur lua-5.1.4/src/lparser.h lua-5.1.4-no_vararg/src/lparser.h --- lua-5.1.4/src/lparser.h 2007年12月27日 13:02:25.000000000 +0000 +++ lua-5.1.4-no_vararg/src/lparser.h 2009年08月20日 14:01:05.000000000 +0100 @@ -30,8 +30,7 @@ VJMP, /* info = instruction pc */ VRELOCABLE, /* info = instruction pc */ VNONRELOC, /* info = result register */ - VCALL, /* info = instruction pc */ - VVARARG /* info = instruction pc */ + VCALL /* info = instruction pc */ } expkind; typedef struct expdesc { diff -Nur lua-5.1.4/src/luaconf.h lua-5.1.4-no_vararg/src/luaconf.h --- lua-5.1.4/src/luaconf.h 2008年02月11日 16:25:08.000000000 +0000 +++ lua-5.1.4-no_vararg/src/luaconf.h 2009年08月20日 14:01:05.000000000 +0100 @@ -329,13 +329,6 @@ #undef LUA_COMPAT_LOADLIB /* -@@ LUA_COMPAT_VARARG controls compatibility with old vararg feature. -** CHANGE it to undefined as soon as your programs use only '...' to -** access vararg parameters (instead of the old 'arg' table). -*/ -#define LUA_COMPAT_VARARG - -/* @@ LUA_COMPAT_MOD controls compatibility with old math.mod function. ** CHANGE it to undefined as soon as your programs use 'math.fmod' or ** the new '%' operator instead of 'math.mod'. @@ -760,4 +753,3 @@ #endif - diff -Nur lua-5.1.4/src/lvm.c lua-5.1.4-no_vararg/src/lvm.c --- lua-5.1.4/src/lvm.c 2007年12月28日 15:32:23.000000000 +0000 +++ lua-5.1.4-no_vararg/src/lvm.c 2009年08月20日 14:01:05.000000000 +0100 @@ -736,27 +736,6 @@ Protect(luaC_checkGC(L)); continue; } - case OP_VARARG: { - int b = GETARG_B(i) - 1; - int j; - CallInfo *ci = L->ci; - int n = cast_int(ci->base - ci->func) - cl->p->numparams - 1; - if (b == LUA_MULTRET) { - Protect(luaD_checkstack(L, n)); - ra = RA(i); /* previous call may change the stack */ - b = n; - L->top = ra + n; - } - for (j = 0; j < b; j++) { - if (j < n) { - setobjs2s(L, ra + j, ci->base - n + j); - } - else { - setnilvalue(ra + j); - } - } - continue; - } } } }

AltStyle によって変換されたページ (->オリジナル) /