summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
Diffstat (limited to 'ext')
-rw-r--r--ext/B/B/CC.pm11
1 files changed, 9 insertions, 2 deletions
diff --git a/ext/B/B/CC.pm b/ext/B/B/CC.pm
index d8cc090479..08429cb0a7 100644
--- a/ext/B/B/CC.pm
+++ b/ext/B/B/CC.pm
@@ -1009,7 +1009,13 @@ sub pp_grepstart {
$need_freetmps = 0;
}
write_back_stack();
- doop($op);
+ my $sym= doop($op);
+ my $next=$op->next;
+ $next->save;
+ my $nexttonext=$next->next;
+ $nexttonext->save;
+ runtime(sprintf("if (PL_op == (($sym)->op_next)->op_next) goto %s;",
+ label($nexttonext)));
return $op->next->other;
}
@@ -1027,7 +1033,8 @@ sub pp_mapstart {
$next->save;
my $nexttonext=$next->next;
$nexttonext->save;
- runtime(sprintf("if (PL_op == (($sym)->op_next)->op_next) goto %s;", label($nexttonext)));
+ runtime(sprintf("if (PL_op == (($sym)->op_next)->op_next) goto %s;",
+ label($nexttonext)));
return $op->next->other;
}