]> granicus.if.org Git - python/commitdiff
SF# 1409443: Expand comment to cover the interaction between f->f_lasti and the...
authorRaymond Hettinger <python@rcn.com>
Sat, 6 Jan 2007 01:14:41 +0000 (01:14 +0000)
committerRaymond Hettinger <python@rcn.com>
Sat, 6 Jan 2007 01:14:41 +0000 (01:14 +0000)
Python/ceval.c

index 7884051ffb6f68927f73187993caf0df5363d97e..67eefba07ad80ab249bf3d1d199846ec3e213584 100644 (file)
@@ -741,7 +741,16 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
           this wasn't always true before 2.3!  PyFrame_New now sets
           f->f_lasti to -1 (i.e. the index *before* the first instruction)
           and YIELD_VALUE doesn't fiddle with f_lasti any more.  So this
-          does work.  Promise. */
+          does work.  Promise. 
+
+          When the PREDICT() macros are enabled, some opcode pairs follow in
+           direct succession without updating f->f_lasti.  A successful 
+           prediction effectively links the two codes together as if they
+           were a single new opcode; accordingly,f->f_lasti will point to
+           the first code in the pair (for instance, GET_ITER followed by
+           FOR_ITER is effectively a single opcode and f->f_lasti will point
+           at to the beginning of the combined pair.)
+       */
        next_instr = first_instr + f->f_lasti + 1;
        stack_pointer = f->f_stacktop;
        assert(stack_pointer != NULL);