Author: duff
Date: Tue Apr 1 23:28:50 2008
New Revision: 26701
Modified:
trunk/languages/perl6/src/parser/actions.pm
trunk/languages/perl6/src/parser/grammar.pg
Log:
[rakudo] Add loop statement
Modified: trunk/languages/perl6/src/parser/actions.pm
==============================================================================
--- trunk/languages/perl6/src/parser/actions.pm (original)
+++ trunk/languages/perl6/src/parser/actions.pm Tue Apr 1 23:28:50 2008
@@ -219,6 +219,28 @@
make $past;
}
+method loop_statement($/) {
+ if $<eee> {
+ my $init := $( $<e1>[0] );
+ my $cond := $( $<e2>[0] );
+ my $tail := $( $<e3>[0] );
+ my $block := $( $<block> );
+ $block.blocktype('immediate');
+
+ my $loop := PAST::Stmts.new(
+ $init,
+ PAST::Op.new( $cond , PAST::Stmts.new($block, $tail),
:pasttype('while'), :node($/) ),
+ :node($/)
+ );
+ make $loop;
+ } else {
+ my $cond := PAST::Val.new( :value( 1 ) );
+ my $block := $( $<block> );
+ $block.blocktype('immediate');
+ make PAST::Op.new( $cond, $block, :pasttype('while'), :node($/) );
+ }
+}
+
method for_statement($/) {
my $block := $( $<pblock> );
$block.blocktype('declaration');
Modified: trunk/languages/perl6/src/parser/grammar.pg
==============================================================================
--- trunk/languages/perl6/src/parser/grammar.pg (original)
+++ trunk/languages/perl6/src/parser/grammar.pg Tue Apr 1 23:28:50 2008
@@ -209,6 +209,7 @@
| <given_statement> {*} #= given_statement
| <when_statement> {*} #= when_statement
| <default_statement> {*} #= default_statement
+ | <loop_statement> {*} #= loop_statement
| <for_statement> {*} #= for_statement
| <use_statement> {*} #= use_statement
| <begin_statement> {*} #= begin_statement
@@ -261,6 +262,19 @@
{*}
}
+rule loop_statement {
+ $<sym>=[loop]
+ $<eee>=[
+ '('
+ $<e1>=<EXPR> ';'
+ $<e2>=<EXPR> ';'
+ $<e3>=<EXPR>
+ ')'
+ ]?
+ <block>
+ {*}
+}
+
rule for_statement {
$<sym>=[for]
<EXPR> <pblock>