Commit 106aaf4f by Ian Lance Taylor

compiler: Treat map index expressions as lvalues in range expressions.

Fixes golang/go#9695.

From-SVN: r220301
parent a6b483da
...@@ -4011,6 +4011,16 @@ Parse::tuple_assignment(Expression_list* lhs, bool may_be_composite_lit, ...@@ -4011,6 +4011,16 @@ Parse::tuple_assignment(Expression_list* lhs, bool may_be_composite_lit,
token = this->advance_token(); token = this->advance_token();
if (lhs == NULL)
return;
// Map expressions act differently when they are lvalues.
for (Expression_list::iterator plv = lhs->begin();
plv != lhs->end();
++plv)
if ((*plv)->index_expression() != NULL)
(*plv)->index_expression()->set_is_lvalue();
if (p_range_clause != NULL && token->is_keyword(KEYWORD_RANGE)) if (p_range_clause != NULL && token->is_keyword(KEYWORD_RANGE))
{ {
if (op != OPERATOR_EQ) if (op != OPERATOR_EQ)
...@@ -4023,7 +4033,7 @@ Parse::tuple_assignment(Expression_list* lhs, bool may_be_composite_lit, ...@@ -4023,7 +4033,7 @@ Parse::tuple_assignment(Expression_list* lhs, bool may_be_composite_lit,
may_be_composite_lit); may_be_composite_lit);
// We've parsed everything; check for errors. // We've parsed everything; check for errors.
if (lhs == NULL || vals == NULL) if (vals == NULL)
return; return;
for (Expression_list::const_iterator pe = lhs->begin(); for (Expression_list::const_iterator pe = lhs->begin();
pe != lhs->end(); pe != lhs->end();
...@@ -4042,13 +4052,6 @@ Parse::tuple_assignment(Expression_list* lhs, bool may_be_composite_lit, ...@@ -4042,13 +4052,6 @@ Parse::tuple_assignment(Expression_list* lhs, bool may_be_composite_lit,
return; return;
} }
// Map expressions act differently when they are lvalues.
for (Expression_list::iterator plv = lhs->begin();
plv != lhs->end();
++plv)
if ((*plv)->index_expression() != NULL)
(*plv)->index_expression()->set_is_lvalue();
Call_expression* call; Call_expression* call;
Index_expression* map_index; Index_expression* map_index;
Receive_expression* receive; Receive_expression* receive;
......
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