mirror of
https://github.com/python/cpython.git
synced 2025-09-10 18:58:35 +00:00
Merged revisions 55225-55227,55229-55269 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/p3yk ................ r55238 | guido.van.rossum | 2007-05-10 16:46:05 -0700 (Thu, 10 May 2007) | 9 lines Merged revisions 55227 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r55227 | guido.van.rossum | 2007-05-10 10:20:15 -0700 (Thu, 10 May 2007) | 2 lines Fix a bug in test_c_api() that caused a negative refcount. ........ ................ r55246 | neal.norwitz | 2007-05-11 00:01:52 -0700 (Fri, 11 May 2007) | 1 line Remove commands.getstatus() it is obsolete. ................ r55248 | neal.norwitz | 2007-05-11 00:29:05 -0700 (Fri, 11 May 2007) | 2 lines Remove bsddb185 support. ................ r55249 | neal.norwitz | 2007-05-11 00:29:50 -0700 (Fri, 11 May 2007) | 1 line Remove bsddb185 module too ................ r55250 | neal.norwitz | 2007-05-11 00:32:13 -0700 (Fri, 11 May 2007) | 1 line bsddb185: Gotta remove from the file checked in, not Setup ................ r55251 | neal.norwitz | 2007-05-11 00:53:26 -0700 (Fri, 11 May 2007) | 1 line Remove obsolete IRIX modules (as much as I could find, there is probably more) ................ r55252 | neal.norwitz | 2007-05-11 00:55:35 -0700 (Fri, 11 May 2007) | 1 line Remove SGI turd. ................ r55254 | georg.brandl | 2007-05-11 03:11:01 -0700 (Fri, 11 May 2007) | 2 lines Add a case for set comprehensions to the "cannot assign to" switch. ................ r55255 | georg.brandl | 2007-05-11 03:11:25 -0700 (Fri, 11 May 2007) | 2 lines Fix wrong imports. ................ r55261 | georg.brandl | 2007-05-11 07:37:48 -0700 (Fri, 11 May 2007) | 2 lines Remove removed tex files. ................ r55262 | georg.brandl | 2007-05-11 08:28:41 -0700 (Fri, 11 May 2007) | 2 lines Commit PEP 3132 implementation. ................ r55264 | georg.brandl | 2007-05-11 08:50:19 -0700 (Fri, 11 May 2007) | 2 lines Check in the inevitable AST version number and format Py_ssize_t with %zd. ................ r55265 | neal.norwitz | 2007-05-11 09:12:22 -0700 (Fri, 11 May 2007) | 1 line Remove mention of os.popen* and popen2.* since these will be removed. ................ r55266 | neal.norwitz | 2007-05-11 09:19:57 -0700 (Fri, 11 May 2007) | 1 line Get doc to build again (almost, the doc is fine) ................ r55267 | neal.norwitz | 2007-05-11 09:21:02 -0700 (Fri, 11 May 2007) | 1 line Really get doc to build (remove use of string module) ................ r55269 | neal.norwitz | 2007-05-11 09:29:43 -0700 (Fri, 11 May 2007) | 1 line Add some notes to cleanup later ................
This commit is contained in:
parent
bdde01168f
commit
0368b726a1
57 changed files with 842 additions and 22519 deletions
|
@ -477,7 +477,7 @@ enum why_code {
|
|||
};
|
||||
|
||||
static enum why_code do_raise(PyObject *, PyObject *, PyObject *);
|
||||
static int unpack_iterable(PyObject *, int, PyObject **);
|
||||
static int unpack_iterable(PyObject *, int, int, PyObject **);
|
||||
|
||||
/* for manipulating the thread switch and periodic "stuff" - used to be
|
||||
per thread, now just a pair o' globals */
|
||||
|
@ -1656,7 +1656,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
|
|||
Py_INCREF(w);
|
||||
PUSH(w);
|
||||
}
|
||||
} else if (unpack_iterable(v, oparg,
|
||||
} else if (unpack_iterable(v, oparg, -1,
|
||||
stack_pointer + oparg)) {
|
||||
stack_pointer += oparg;
|
||||
} else {
|
||||
|
@ -1666,6 +1666,21 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
|
|||
Py_DECREF(v);
|
||||
break;
|
||||
|
||||
case UNPACK_EX:
|
||||
{
|
||||
int totalargs = 1 + (oparg & 0xFF) + (oparg >> 8);
|
||||
v = POP();
|
||||
|
||||
if (unpack_iterable(v, oparg & 0xFF, oparg >> 8,
|
||||
stack_pointer + totalargs)) {
|
||||
stack_pointer += totalargs;
|
||||
} else {
|
||||
why = WHY_EXCEPTION;
|
||||
}
|
||||
Py_DECREF(v);
|
||||
break;
|
||||
}
|
||||
|
||||
case STORE_ATTR:
|
||||
w = GETITEM(names, oparg);
|
||||
v = TOP();
|
||||
|
@ -3077,14 +3092,20 @@ do_raise(PyObject *type, PyObject *value, PyObject *tb)
|
|||
}
|
||||
|
||||
/* Iterate v argcnt times and store the results on the stack (via decreasing
|
||||
sp). Return 1 for success, 0 if error. */
|
||||
sp). Return 1 for success, 0 if error.
|
||||
|
||||
If argcntafter == -1, do a simple unpack. If it is >= 0, do an unpack
|
||||
with a variable target.
|
||||
*/
|
||||
|
||||
static int
|
||||
unpack_iterable(PyObject *v, int argcnt, PyObject **sp)
|
||||
unpack_iterable(PyObject *v, int argcnt, int argcntafter, PyObject **sp)
|
||||
{
|
||||
int i = 0;
|
||||
int i = 0, j = 0;
|
||||
Py_ssize_t ll = 0;
|
||||
PyObject *it; /* iter(v) */
|
||||
PyObject *w;
|
||||
PyObject *l = NULL; /* variable list */
|
||||
|
||||
assert(v != NULL);
|
||||
|
||||
|
@ -3106,17 +3127,42 @@ unpack_iterable(PyObject *v, int argcnt, PyObject **sp)
|
|||
*--sp = w;
|
||||
}
|
||||
|
||||
/* We better have exhausted the iterator now. */
|
||||
w = PyIter_Next(it);
|
||||
if (w == NULL) {
|
||||
if (PyErr_Occurred())
|
||||
goto Error;
|
||||
Py_DECREF(it);
|
||||
return 1;
|
||||
if (argcntafter == -1) {
|
||||
/* We better have exhausted the iterator now. */
|
||||
w = PyIter_Next(it);
|
||||
if (w == NULL) {
|
||||
if (PyErr_Occurred())
|
||||
goto Error;
|
||||
Py_DECREF(it);
|
||||
return 1;
|
||||
}
|
||||
Py_DECREF(w);
|
||||
PyErr_SetString(PyExc_ValueError, "too many values to unpack");
|
||||
goto Error;
|
||||
}
|
||||
Py_DECREF(w);
|
||||
PyErr_SetString(PyExc_ValueError, "too many values to unpack");
|
||||
/* fall through */
|
||||
|
||||
l = PySequence_List(it);
|
||||
if (l == NULL)
|
||||
goto Error;
|
||||
*--sp = l;
|
||||
i++;
|
||||
|
||||
ll = PyList_GET_SIZE(l);
|
||||
if (ll < argcntafter) {
|
||||
PyErr_Format(PyExc_ValueError, "need more than %zd values to unpack",
|
||||
argcnt + ll);
|
||||
goto Error;
|
||||
}
|
||||
|
||||
/* Pop the "after-variable" args off the list. */
|
||||
for (j = argcntafter; j > 0; j--, i++) {
|
||||
*--sp = PyList_GET_ITEM(l, ll - j);
|
||||
}
|
||||
/* Resize the list. */
|
||||
((PyListObject *)l)->ob_size = ll - argcntafter;
|
||||
Py_DECREF(it);
|
||||
return 1;
|
||||
|
||||
Error:
|
||||
for (; i > 0; i--, sp++)
|
||||
Py_DECREF(*sp);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue