diff Python/ceval.c @ 581:bae1494f2ec8 legacy-trunk

Added UNPACK_VARARG code.
author Guido van Rossum <guido@python.org>
date Tue, 14 Jan 1992 18:29:20 +0000
parents 8c179d023583
children 0214bbf47bf6
line wrap: on
line diff
--- a/Python/ceval.c	Tue Jan 14 18:28:36 1992 +0000
+++ b/Python/ceval.c	Tue Jan 14 18:29:20 1992 +0000
@@ -639,6 +639,42 @@
 				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,...))