compiler: Better error messages for { on line after if/for/switch.
From-SVN: r205944
This commit is contained in:
parent
ed6b1c9219
commit
3742998dca
|
@ -4287,6 +4287,16 @@ Parse::if_stat()
|
||||||
cond = this->expression(PRECEDENCE_NORMAL, false, false, NULL, NULL);
|
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());
|
this->gogo_->start_block(this->location());
|
||||||
Location end_loc = this->block();
|
Location end_loc = this->block();
|
||||||
Block* then_block = this->gogo_->finish_block(end_loc);
|
Block* then_block = this->gogo_->finish_block(end_loc);
|
||||||
|
@ -4431,7 +4441,7 @@ Parse::switch_stat(Label* label)
|
||||||
Location token_loc = this->location();
|
Location token_loc = this->location();
|
||||||
if (this->peek_token()->is_op(OPERATOR_SEMICOLON)
|
if (this->peek_token()->is_op(OPERATOR_SEMICOLON)
|
||||||
&& this->advance_token()->is_op(OPERATOR_LCURLY))
|
&& 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))
|
else if (this->peek_token()->is_op(OPERATOR_COLONEQ))
|
||||||
{
|
{
|
||||||
error_at(token_loc, "invalid variable name");
|
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
|
// Build the For_statement and note that it is the current target
|
||||||
// for break and continue statements.
|
// for break and continue statements.
|
||||||
|
|
||||||
|
@ -5224,8 +5244,7 @@ Parse::for_clause(Expression** cond, Block** post)
|
||||||
*cond = NULL;
|
*cond = NULL;
|
||||||
else if (this->peek_token()->is_op(OPERATOR_LCURLY))
|
else if (this->peek_token()->is_op(OPERATOR_LCURLY))
|
||||||
{
|
{
|
||||||
error_at(this->location(),
|
error_at(this->location(), "missing %<{%> after for clause");
|
||||||
"unexpected semicolon or newline before %<{%>");
|
|
||||||
*cond = NULL;
|
*cond = NULL;
|
||||||
*post = NULL;
|
*post = NULL;
|
||||||
return;
|
return;
|
||||||
|
|
Loading…
Reference in New Issue