From: Guido van Rossum Date: Tue, 14 Jan 1992 18:29:20 +0000 (+0000) Subject: Added UNPACK_VARARG code. X-Git-Tag: v0.9.8~602 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6a3f9a841a640ecf7d76078eb9e0c58f33907eb7;p=thirdparty%2FPython%2Fcpython.git Added UNPACK_VARARG code. --- diff --git a/Python/ceval.c b/Python/ceval.c index 129d74315a10..cc2f034b798c 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -639,6 +639,42 @@ eval_code(co, globals, locals, arg) err_setstr(NameError, getstringvalue(w)); break; + case UNPACK_VARARG: + if (EMPTY()) { + err_setstr(TypeError, + "no argument list"); + why = WHY_EXCEPTION; + break; + } + v = POP(); + if (!is_tupleobject(v)) { + err_setstr(TypeError, + "bad argument list"); + why = WHY_EXCEPTION; + } + else if (gettuplesize(v) < oparg) { + err_setstr(TypeError, + "not enough arguments"); + why = WHY_EXCEPTION; + } + else if (oparg == 0) { + PUSH(v); + break; + } + else { + x = gettupleslice(v, oparg, gettuplesize(v)); + if (x != NULL) { + PUSH(x); + for (; --oparg >= 0; ) { + w = gettupleitem(v, oparg); + INCREF(w); + PUSH(w); + } + } + } + DECREF(v); + break; + case UNPACK_ARG: /* Implement various compatibility hacks: (a) f(a,b,...) should accept f((1,2,...))