Fix select setting a map expression.
Also fix select parsing when declaring a variable with no statements. From-SVN: r171690
This commit is contained in:
parent
5b9e705e63
commit
df740f400a
@ -4274,41 +4274,43 @@ Parse::comm_clause(Select_clauses* clauses, bool* saw_default)
|
||||
bool got_case = this->comm_case(&is_send, &channel, &val, &closed,
|
||||
&varname, &closedname, &is_default);
|
||||
|
||||
if (!is_send
|
||||
&& varname.empty()
|
||||
&& closedname.empty()
|
||||
&& val != NULL
|
||||
&& val->index_expression() != NULL)
|
||||
val->index_expression()->set_is_lvalue();
|
||||
|
||||
if (this->peek_token()->is_op(OPERATOR_COLON))
|
||||
this->advance_token();
|
||||
else
|
||||
error_at(this->location(), "expected colon");
|
||||
|
||||
Block* statements = NULL;
|
||||
this->gogo_->start_block(this->location());
|
||||
|
||||
Named_object* var = NULL;
|
||||
Named_object* closedvar = NULL;
|
||||
if (this->peek_token()->is_op(OPERATOR_SEMICOLON))
|
||||
this->advance_token();
|
||||
else if (this->statement_list_may_start_here())
|
||||
if (!varname.empty())
|
||||
{
|
||||
this->gogo_->start_block(this->location());
|
||||
|
||||
if (!varname.empty())
|
||||
{
|
||||
// FIXME: LOCATION is slightly wrong here.
|
||||
Variable* v = new Variable(NULL, channel, false, false, false,
|
||||
location);
|
||||
v->set_type_from_chan_element();
|
||||
var = this->gogo_->add_variable(varname, v);
|
||||
}
|
||||
|
||||
if (!closedname.empty())
|
||||
{
|
||||
// FIXME: LOCATION is slightly wrong here.
|
||||
Variable* v = new Variable(Type::lookup_bool_type(), NULL,
|
||||
false, false, false, location);
|
||||
closedvar = this->gogo_->add_variable(closedname, v);
|
||||
}
|
||||
|
||||
this->statement_list();
|
||||
statements = this->gogo_->finish_block(this->location());
|
||||
// FIXME: LOCATION is slightly wrong here.
|
||||
Variable* v = new Variable(NULL, channel, false, false, false,
|
||||
location);
|
||||
v->set_type_from_chan_element();
|
||||
var = this->gogo_->add_variable(varname, v);
|
||||
}
|
||||
|
||||
Named_object* closedvar = NULL;
|
||||
if (!closedname.empty())
|
||||
{
|
||||
// FIXME: LOCATION is slightly wrong here.
|
||||
Variable* v = new Variable(Type::lookup_bool_type(), NULL,
|
||||
false, false, false, location);
|
||||
closedvar = this->gogo_->add_variable(closedname, v);
|
||||
}
|
||||
|
||||
this->statement_list();
|
||||
|
||||
Block* statements = this->gogo_->finish_block(this->location());
|
||||
|
||||
if (is_default)
|
||||
{
|
||||
if (*saw_default)
|
||||
|
Loading…
Reference in New Issue
Block a user