diff --git a/ASTree.cpp b/ASTree.cpp index 1f419d0c9..2640a2ed4 100644 --- a/ASTree.cpp +++ b/ASTree.cpp @@ -1186,6 +1186,9 @@ PycRef BuildFromCode(PycRef code, PycModule* mod) PycRef tmp = curblock; blocks.pop(); + if (blocks.size() == 0) { + break; + } curblock = blocks.top(); if (should_add_for_block) { curblock->append(tmp.cast()); @@ -1260,7 +1263,9 @@ PycRef BuildFromCode(PycRef code, PycModule* mod) prev = nil; } else if (prev->blktype() == ASTBlock::BLK_ELSE) { /* Special case */ - prev = blocks.top(); + if (blocks.size() != 0) { + prev = blocks.top(); + } if (!push) { stack = stack_hist.top(); stack_hist.pop(); @@ -1345,7 +1350,9 @@ PycRef BuildFromCode(PycRef code, PycModule* mod) prev = nil; } else if (prev->blktype() == ASTBlock::BLK_ELSE) { /* Special case */ - prev = blocks.top(); + if (blocks.size() != 0) { + prev = blocks.top(); + } if (!push) { stack = stack_hist.top(); stack_hist.pop(); @@ -1356,6 +1363,10 @@ PycRef BuildFromCode(PycRef code, PycModule* mod) /* Something went out of control! */ prev = nil; } + + if (blocks.size() == 0) { + prev = nil; + } } else if (prev->blktype() == ASTBlock::BLK_TRY && prev->end() < pos+offs) { /* Need to add an except/finally block */ @@ -1383,7 +1394,11 @@ PycRef BuildFromCode(PycRef code, PycModule* mod) } while (prev != nil); - curblock = blocks.top(); + if (blocks.size() == 0) { + curblock->setEnd(pos+offs); + } else { + curblock = blocks.top(); + } if (curblock->blktype() == ASTBlock::BLK_EXCEPT) { curblock->setEnd(pos+offs);