| CODENOTIFIER | HelpYou are not signed inSign in |
Project: Rakudo
Revision: 30778
Author: duff
Date: 05 Sep 2008 03:32:25
Changes:Make the expressions in a loop statement optional and refactor loop_statement
Files:| ... | ...@@ -269,31 +269,17 @@ | |
| 269 | 269 | } |
| 270 | 270 | |
| 271 | 271 | method loop_statement($/) { |
| 272 | if $<eee> ne "" { | |
| 273 | my $init := $( $<e1>[0] ); | |
| 274 | my $cond := $( $<e2>[0] ); | |
| 275 | my $tail := $( $<e3>[0] ); | |
| 276 | my $block := $( $<block> ); | |
| 277 | $block.blocktype('immediate'); | |
| 278 | ||
| 279 | my $loop := PAST::Stmts.new( | |
| 280 | $init, | |
| 281 | PAST::Op.new( | |
| 282 | $cond, | |
| 283 | PAST::Stmts.new($block, $tail), | |
| 284 | :pasttype('while'), | |
| 285 | :node($/) | |
| 286 | ), | |
| 287 | :node($/) | |
| 288 | ); | |
| 289 | make $loop; | |
| 290 | } | |
| 291 | else { | |
| 292 | my $cond := PAST::Val.new( :value( 1 ) ); | |
| 293 | my $block := $( $<block> ); | |
| 294 | $block.blocktype('immediate'); | |
| 295 | make PAST::Op.new( $cond, $block, :pasttype('while'), :node($/) ); | |
| 272 | my $block := $( $<block> ); | |
| 273 | $block.blocktype('immediate'); | |
| 274 | my $cond := $<e2> ?? $( $<e2>[0] ) !! PAST::Val.new( :value( 1 ) ); | |
| 275 | if $<e3> { | |
| 276 | $block := PAST::Stmts.new( $block, $( $<e3>[0] ) ); | |
| 277 | } | |
| 278 | my $loop := PAST::Op.new( $cond, $block, :pasttype('while'), :node($/) ); | |
| 279 | if $<e1> { | |
| 280 | $loop := PAST::Stmts.new( $( $<e1>[0] ), $loop, :node($/) ); | |
| 296 | 281 | } |
| 282 | make $loop; | |
| 297 | 283 | } |
| 298 | 284 | |
| 299 | 285 | method for_statement($/) { |
| ... | ...@@ -272,9 +272,9 @@ | |
| 272 | 272 | $<sym>=[loop] |
| 273 | 273 | $<eee>=[ |
| 274 | 274 | '(' |
| 275 | <e1=EXPR> ';' | |
| 276 | <e2=EXPR> ';' | |
| 277 | <e3=EXPR> | |
| 275 | <e1=EXPR>? ';' | |
| 276 | <e2=EXPR>? ';' | |
| 277 | <e3=EXPR>? | |
| 278 | 278 | ')' |
| 279 | 279 | ]? |
| 280 | 280 | <block> |