1
0
mirror of https://github.com/golang/go synced 2024-09-24 03:10:16 -06:00

clean up range grammar

R=ken
OCL=23712
CL=23714
This commit is contained in:
Russ Cox 2009-01-28 15:41:50 -08:00
parent 9f726c2c8b
commit 3ec4675220

View File

@ -52,7 +52,7 @@
%type <node> Astmt Bstmt
%type <node> for_stmt for_body for_header
%type <node> if_stmt if_body if_header select_stmt
%type <node> simple_stmt osimple_stmt orange_stmt semi_stmt
%type <node> simple_stmt osimple_stmt range_stmt semi_stmt
%type <node> expr uexpr pexpr expr_list oexpr oexpr_list expr_list_r
%type <node> exprsym3_list_r exprsym3
%type <node> name onew_name new_name new_name_list_r new_field
@ -536,9 +536,8 @@ compound_stmt:
popdcl();
}
orange_stmt:
osimple_stmt
| exprsym3_list_r '=' LRANGE expr
range_stmt:
exprsym3_list_r '=' LRANGE expr
{
$$ = nod(ORANGE, $1, $4);
$$->etype = 0; // := flag
@ -550,14 +549,8 @@ orange_stmt:
}
for_header:
osimple_stmt ';' orange_stmt ';' osimple_stmt
osimple_stmt ';' osimple_stmt ';' osimple_stmt
{
if($3 != N && $3->op == ORANGE) {
$$ = dorange($3);
$$->ninit = list($$->ninit, $1);
$$->nincr = list($$->nincr, $5);
break;
}
// init ; test ; incr
if($5 != N && $5->colas != 0)
yyerror("cannot declare in the for-increment");
@ -566,19 +559,19 @@ for_header:
$$->ntest = $3;
$$->nincr = $5;
}
| orange_stmt
| osimple_stmt
{
// range
if($1 != N && $1->op == ORANGE) {
$$ = dorange($1);
break;
}
// normal test
$$ = nod(OFOR, N, N);
$$->ninit = N;
$$->ntest = $1;
$$->nincr = N;
}
| range_stmt
{
$$ = dorange($1);
addtotop($$);
}
for_body:
for_header compound_stmt