# New Ticket Created by Vasily Chekalkin
# Please include the string: [perl #60330]
# in the subject line of all future correspondence about this issue.
# <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=60330 >
Hello.
During investigation of problems with #60168 if found that "if" doensn't
call 'prefix:?'.
Simple test case:
<bacek_> perl6: if (Bool::True&Bool::False) { say "foo" } else { say "bar" }
<p6eval> pugs: OUTPUT[bar]
..elf 22847, rakudo 32323: OUTPUT[foo]
Attached patch solve this.
(We probably have to add 'prefix:?' to other statements aswell. E.g.
"while", etc)
--
Bacek
diff --git a/languages/perl6/src/parser/actions.pm b/languages/perl6/src/parser/actions.pm
index 803fbce..055430e 100644
--- a/languages/perl6/src/parser/actions.pm
+++ b/languages/perl6/src/parser/actions.pm
@@ -167,7 +167,13 @@ method if_statement($/) {
$then.blocktype('immediate');
declare_implicit_immediate_vars($then);
my $past := PAST::Op.new(
- $expr, $then,
+ PAST::Op.new(
+ $expr,
+ :name('prefix:?'),
+ :pasttype('call'),
+ :node( $/ )
+ ),
+ $then,
:pasttype('if'),
:node( $/ )
);
@@ -184,7 +190,13 @@ method if_statement($/) {
$then.blocktype('immediate');
declare_implicit_immediate_vars($then);
$past := PAST::Op.new(
- $expr, $then, $past,
+ PAST::Op.new(
+ $expr,
+ :name('prefix:?'),
+ :pasttype('call'),
+ :node( $/ )
+ ),
+ $then, $past,
:pasttype('if'),
:node( $/ )
);