Parse foreach loops.
This commit is contained in:
parent
481a9dec69
commit
ebda9777cc
29
parse.y
29
parse.y
|
|
@ -463,7 +463,7 @@ static void current_task_set_statement(vector<Statement*>*s)
|
||||||
|
|
||||||
%type <text> register_variable net_variable endname_opt
|
%type <text> register_variable net_variable endname_opt
|
||||||
%type <perm_strings> register_variable_list net_variable_list
|
%type <perm_strings> register_variable_list net_variable_list
|
||||||
%type <perm_strings> list_of_identifiers
|
%type <perm_strings> list_of_identifiers loop_variables
|
||||||
%type <port_list> list_of_port_identifiers
|
%type <port_list> list_of_port_identifiers
|
||||||
|
|
||||||
%type <net_decl_assign> net_decl_assign net_decl_assigns
|
%type <net_decl_assign> net_decl_assign net_decl_assigns
|
||||||
|
|
@ -786,6 +786,14 @@ loop_statement /* IEEE1800-2005: A.6.8 */
|
||||||
$$ = tmp;
|
$$ = tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
| K_foreach '(' IDENTIFIER '[' loop_variables ']' ')' statement_or_null
|
||||||
|
{ yyerror(@1, "sorry: foreach loops not supported");
|
||||||
|
delete[]$3;
|
||||||
|
delete $5;
|
||||||
|
delete $8;
|
||||||
|
$$ = 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* Error forms for loop statements. */
|
/* Error forms for loop statements. */
|
||||||
|
|
||||||
| K_for '(' lpvalue '=' expression ';' expression ';' error ')'
|
| K_for '(' lpvalue '=' expression ';' expression ';' error ')'
|
||||||
|
|
@ -810,6 +818,25 @@ loop_statement /* IEEE1800-2005: A.6.8 */
|
||||||
yyerror(@1, "error: Error in while loop condition.");
|
yyerror(@1, "error: Error in while loop condition.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
| K_foreach '(' IDENTIFIER '[' error ']' ')' statement_or_null
|
||||||
|
{ $$ = 0;
|
||||||
|
yyerror(@4, "error: Errors in foreach loop variables list.");
|
||||||
|
}
|
||||||
|
;
|
||||||
|
|
||||||
|
loop_variables /* IEEE1800-2005: A.6.8 */
|
||||||
|
: loop_variables ',' IDENTIFIER
|
||||||
|
{ list<perm_string>*tmp = $1;
|
||||||
|
tmp->push_back(lex_strings.make($3));
|
||||||
|
delete[]$3;
|
||||||
|
$$ = tmp;
|
||||||
|
}
|
||||||
|
| IDENTIFIER
|
||||||
|
{ list<perm_string>*tmp = new list<perm_string>;
|
||||||
|
tmp->push_back(lex_strings.make($1));
|
||||||
|
delete[]$1;
|
||||||
|
$$ = tmp;
|
||||||
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
non_integer_type /* IEEE1800-2005: A.2.2.1 */
|
non_integer_type /* IEEE1800-2005: A.2.2.1 */
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue