@@ -272,7 +272,7 @@ PycRef<ASTNode> BuildFromCode(PycRef<PycCode> code, PycModule* mod)
272272 }
273273 break ;
274274 case Pyc::BUILD_MAP_A:
275- if (mod->majorVer () > 3 || (mod-> majorVer () == 3 && mod-> minorVer () >= 5 ) ) {
275+ if (mod->verCompare ( 3 , 5 ) >= 0 ) {
276276 auto map = new ASTMap;
277277 for (int i=0 ; i<operand; ++i) {
278278 PycRef<ASTNode> value = stack.top ();
@@ -1029,6 +1029,15 @@ PycRef<ASTNode> BuildFromCode(PycRef<PycCode> code, PycModule* mod)
10291029 newcond = new ASTBinary (cond1, cond, ASTBinary::BIN_LOG_OR);
10301030 }
10311031 ifblk = new ASTCondBlock (top->blktype (), offs, newcond, neg);
1032+ } else if (curblock->blktype () == ASTBlock::BLK_FOR
1033+ && curblock.cast <ASTIterBlock>()->isComprehension ()
1034+ && mod->verCompare (2 , 7 ) >= 0 ) {
1035+ /* Comprehension condition */
1036+ curblock.cast <ASTIterBlock>()->setCondition (cond);
1037+ stack_hist.pop ();
1038+ // TODO: Handle older python versions, where condition
1039+ // is laid out a little differently.
1040+ break ;
10321041 } else {
10331042 /* Plain old if statement */
10341043 ifblk = new ASTCondBlock (ASTBlock::BLK_IF, offs, cond, neg);
@@ -1056,7 +1065,7 @@ PycRef<ASTNode> BuildFromCode(PycRef<PycCode> code, PycModule* mod)
10561065
10571066 blocks.pop ();
10581067 curblock = blocks.top ();
1059- } if (curblock->blktype () == ASTBlock::BLK_ELSE) {
1068+ } else if (curblock->blktype () == ASTBlock::BLK_ELSE) {
10601069 stack = stack_hist.top ();
10611070 stack_hist.pop ();
10621071
@@ -1271,6 +1280,7 @@ PycRef<ASTNode> BuildFromCode(PycRef<PycCode> code, PycModule* mod)
12711280
12721281 if (curblock->blktype () == ASTBlock::BLK_FOR
12731282 && curblock.cast <ASTIterBlock>()->isComprehension ()) {
1283+ stack.pop ();
12741284 stack.push (new ASTComprehension (value));
12751285 } else {
12761286 stack.push (new ASTSubscr (list, value)); /* Total hack */
@@ -2333,6 +2343,10 @@ void print_src(PycRef<ASTNode> node, PycModule* mod)
23332343 print_src (gen->index (), mod);
23342344 fputs (" in " , pyc_output);
23352345 print_src (gen->iter (), mod);
2346+ if (gen->condition ()) {
2347+ fprintf (pyc_output, " if " );
2348+ print_src (gen->condition (), mod);
2349+ }
23362350 }
23372351 fputs (" ]" , pyc_output);
23382352 }
0 commit comments