On 5 Mar 2005 08:00:23 -0800, [EMAIL PROTECTED] declaimed the following in comp.lang.python:
"explicit GOTO"'. Goto's are less dangerous when they are in the forward direction, to code appearing later.
UGH... That is the one direction I always avoid (in FORTRAN 77).
Typical example of forward GOTOs in Python source:
static PyObject * min_max(PyObject *args, PyObject *kwds, int op) { ... while (( item = PyIter_Next(it) )) { /* get the value from the key function */ if (keyfunc != NULL) { val = PyObject_CallFunctionObjArgs( keyfunc, item, NULL); if (val == NULL) goto Fail_it_item; } ... else { int cmp = PyObject_RichCompareBool( val, maxval, op); if (cmp < 0) goto Fail_it_item_and_val; else if (cmp > 0) { ... } } } if (PyErr_Occurred()) goto Fail_it; ... return maxitem;
Fail_it_item_and_val: Py_DECREF(val); Fail_it_item: Py_DECREF(item); Fail_it: Py_XDECREF(maxval); Py_XDECREF(maxitem); Py_DECREF(it); return NULL; }
Note that the GOTOs are basically there to take care of the appropriate decref-ing if exceptions occur.
STeVe -- http://mail.python.org/mailman/listinfo/python-list