popped, and the byte code counter is incremented by \var{delta}.
\end{opcodedesc}
-\begin{opcodedesc}{FOR_LOOP}{delta}
-This opcode is obsolete.
-%Iterate over a sequence. TOS is the current index, TOS1 the sequence.
-%First, the next element is computed. If the sequence is exhausted,
-%increment byte code counter by \var{delta}. Otherwise, push the
-%sequence, the incremented counter, and the current item onto the stack.
-\end{opcodedesc}
+%\begin{opcodedesc}{FOR_LOOP}{delta}
+%This opcode is obsolete.
+%\end{opcodedesc}
%\begin{opcodedesc}{LOAD_LOCAL}{namei}
%This opcode is obsolete.
#define JUMP_IF_FALSE 111 /* "" */
#define JUMP_IF_TRUE 112 /* "" */
#define JUMP_ABSOLUTE 113 /* Target byte offset from beginning of code */
-#define FOR_LOOP 114 /* Number of bytes to skip */
#define LOAD_GLOBAL 116 /* Index in name list */
jrel_op('JUMP_IF_FALSE', 111) # ""
jrel_op('JUMP_IF_TRUE', 112) # ""
jabs_op('JUMP_ABSOLUTE', 113) # Target byte offset from beginning of code
-jrel_op('FOR_LOOP', 114) # Number of bytes to skip
name_op('LOAD_GLOBAL', 116) # Index in name list
}
break;
- case FOR_LOOP:
- /* for v in s: ...
- On entry: stack contains s, i.
- On exit: stack contains s, i+1, s[i];
- but if loop exhausted:
- s, i are popped, and we jump */
- w = POP(); /* Loop index */
- v = POP(); /* Sequence object */
- u = loop_subscript(v, w);
- if (u != NULL) {
- PUSH(v);
- x = PyInt_FromLong(PyInt_AsLong(w)+1);
- PUSH(x);
- Py_DECREF(w);
- PUSH(u);
- if (x != NULL) continue;
- }
- else {
- Py_DECREF(v);
- Py_DECREF(w);
- /* A NULL can mean "s exhausted"
- but also an error: */
- if (PyErr_Occurred())
- why = WHY_EXCEPTION;
- else {
- JUMPBY(oparg);
- continue;
- }
- }
- break;
-
case SETUP_LOOP:
case SETUP_EXCEPT:
case SETUP_FINALLY: