Skip to content

Commit

Permalink
warn on for with single scalar variable
Browse files Browse the repository at this point in the history
  • Loading branch information
TimToady committed Jul 15, 2013
1 parent 85cf51d commit c2215f0
Showing 1 changed file with 12 additions and 1 deletion.
13 changes: 12 additions & 1 deletion STD.pm6
Expand Up @@ -1542,6 +1542,17 @@ grammar P6 is STD {
[ <?before '(' <.EXPR>? ';' <.EXPR>? ';' <.EXPR>? ')' >
<.obs('C-style "for (;;)" loop', '"loop (;;)"')> ]?
<xblock>
<.worry_itemlist($<xblock><EXPR>)>
}

method worry_itemlist($expr) {
if $expr<variable> {
my $var = $expr<variable>.Str;
if substr($var,0,1) eq '$' {
self.cursor($expr.from).worry("'for $var' will never flatten a \$ variable;\n\tto force list interpolation, please use either 'for \@$var' or 'for $var\[]';\n\tif you just want item topicalization, use 'given $var' instead");
}
}
self;
}

rule statement_control:given {
Expand Down Expand Up @@ -1590,7 +1601,7 @@ grammar P6 is STD {
rule statement_mod_loop:while {<sym> <modifier_expr> }
rule statement_mod_loop:until {<sym> <modifier_expr> }

rule statement_mod_loop:for {<sym> <modifier_expr> }
rule statement_mod_loop:for {<sym> <modifier_expr> <.worry_itemlist($<modifier_expr><EXPR>)> }
rule statement_mod_loop:given {<sym> <modifier_expr> }

################
Expand Down

0 comments on commit c2215f0

Please sign in to comment.