compiler: Better error messages for { on line after if/for/switch.
From-SVN: r205944
This commit is contained in:
parent
ed6b1c9219
commit
3742998dca
1 changed files with 22 additions and 3 deletions
|
@ -4287,6 +4287,16 @@ Parse::if_stat()
|
|||
cond = this->expression(PRECEDENCE_NORMAL, false, false, NULL, NULL);
|
||||
}
|
||||
|
||||
// Check for the easy error of a newline before starting the block.
|
||||
if (this->peek_token()->is_op(OPERATOR_SEMICOLON))
|
||||
{
|
||||
Location semi_loc = this->location();
|
||||
if (this->advance_token()->is_op(OPERATOR_LCURLY))
|
||||
error_at(semi_loc, "missing %<{%> after if clause");
|
||||
// Otherwise we will get an error when we call this->block
|
||||
// below.
|
||||
}
|
||||
|
||||
this->gogo_->start_block(this->location());
|
||||
Location end_loc = this->block();
|
||||
Block* then_block = this->gogo_->finish_block(end_loc);
|
||||
|
@ -4431,7 +4441,7 @@ Parse::switch_stat(Label* label)
|
|||
Location token_loc = this->location();
|
||||
if (this->peek_token()->is_op(OPERATOR_SEMICOLON)
|
||||
&& this->advance_token()->is_op(OPERATOR_LCURLY))
|
||||
error_at(token_loc, "unexpected semicolon or newline before %<{%>");
|
||||
error_at(token_loc, "missing %<{%> after switch clause");
|
||||
else if (this->peek_token()->is_op(OPERATOR_COLONEQ))
|
||||
{
|
||||
error_at(token_loc, "invalid variable name");
|
||||
|
@ -5158,6 +5168,16 @@ Parse::for_stat(Label* label)
|
|||
}
|
||||
}
|
||||
|
||||
// Check for the easy error of a newline before starting the block.
|
||||
if (this->peek_token()->is_op(OPERATOR_SEMICOLON))
|
||||
{
|
||||
Location semi_loc = this->location();
|
||||
if (this->advance_token()->is_op(OPERATOR_LCURLY))
|
||||
error_at(semi_loc, "missing %<{%> after for clause");
|
||||
// Otherwise we will get an error when we call this->block
|
||||
// below.
|
||||
}
|
||||
|
||||
// Build the For_statement and note that it is the current target
|
||||
// for break and continue statements.
|
||||
|
||||
|
@ -5224,8 +5244,7 @@ Parse::for_clause(Expression** cond, Block** post)
|
|||
*cond = NULL;
|
||||
else if (this->peek_token()->is_op(OPERATOR_LCURLY))
|
||||
{
|
||||
error_at(this->location(),
|
||||
"unexpected semicolon or newline before %<{%>");
|
||||
error_at(this->location(), "missing %<{%> after for clause");
|
||||
*cond = NULL;
|
||||
*post = NULL;
|
||||
return;
|
||||
|
|
Loading…
Add table
Reference in a new issue