]> granicus.if.org Git - python/commitdiff
Merged revisions 73750 via svnmerge from
authorAlexandre Vassalotti <alexandre@peadrop.com>
Tue, 21 Jul 2009 05:23:51 +0000 (05:23 +0000)
committerAlexandre Vassalotti <alexandre@peadrop.com>
Tue, 21 Jul 2009 05:23:51 +0000 (05:23 +0000)
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r73750 | benjamin.peterson | 2009-07-01 19:45:19 -0400 (Wed, 01 Jul 2009) | 1 line

  small optimization: avoid popping the current block until we have to
........

Python/ceval.c

index 403acd2513440a187810a20c686044dffc19f691..003d4dfd177055b29acf55a2b7c0f70e16669686 100644 (file)
@@ -2839,19 +2839,18 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
 
 fast_block_end:
                while (why != WHY_NOT && f->f_iblock > 0) {
-                       PyTryBlock *b = PyFrame_BlockPop(f);
+                       /* Peek at the current block. */
+                       PyTryBlock *b = &f->f_blockstack[f->f_iblock - 1];
 
                        assert(why != WHY_YIELD);
                        if (b->b_type == SETUP_LOOP && why == WHY_CONTINUE) {
-                               /* For a continue inside a try block,
-                                  don't pop the block for the loop. */
-                               PyFrame_BlockSetup(f, b->b_type, b->b_handler,
-                                                  b->b_level);
                                why = WHY_NOT;
                                JUMPTO(PyLong_AS_LONG(retval));
                                Py_DECREF(retval);
                                break;
                        }
+                       /* Now we have to pop the block. */
+                       f->f_iblock--;
 
                        if (b->b_type == EXCEPT_HANDLER) {
                                UNWIND_EXCEPT_HANDLER(b);