Commit df740f40 by Ian Lance Taylor

Fix select setting a map expression.

Also fix select parsing when declaring a variable with no
statements.

From-SVN: r171690
parent 5b9e705e
...@@ -4274,40 +4274,42 @@ Parse::comm_clause(Select_clauses* clauses, bool* saw_default) ...@@ -4274,40 +4274,42 @@ Parse::comm_clause(Select_clauses* clauses, bool* saw_default)
bool got_case = this->comm_case(&is_send, &channel, &val, &closed, bool got_case = this->comm_case(&is_send, &channel, &val, &closed,
&varname, &closedname, &is_default); &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)) if (this->peek_token()->is_op(OPERATOR_COLON))
this->advance_token(); this->advance_token();
else else
error_at(this->location(), "expected colon"); error_at(this->location(), "expected colon");
Block* statements = NULL; this->gogo_->start_block(this->location());
Named_object* var = NULL; Named_object* var = NULL;
Named_object* closedvar = NULL; if (!varname.empty())
if (this->peek_token()->is_op(OPERATOR_SEMICOLON))
this->advance_token();
else if (this->statement_list_may_start_here())
{ {
this->gogo_->start_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);
}
if (!varname.empty()) Named_object* closedvar = NULL;
{ if (!closedname.empty())
// FIXME: LOCATION is slightly wrong here. {
Variable* v = new Variable(NULL, channel, false, false, false, // FIXME: LOCATION is slightly wrong here.
location); Variable* v = new Variable(Type::lookup_bool_type(), NULL,
v->set_type_from_chan_element(); false, false, false, location);
var = this->gogo_->add_variable(varname, v); closedvar = this->gogo_->add_variable(closedname, v);
} }
if (!closedname.empty()) this->statement_list();
{
// 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());
statements = this->gogo_->finish_block(this->location());
}
if (is_default) if (is_default)
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment