Commit 5649c23c authored by Ken Thompson's avatar Ken Thompson

fixed op=, ++ and -- on maps (bug060)

R=r
DELTA=22  (21 added, 0 deleted, 1 changed)
OCL=14049
CL=14049
parent 258c817a
...@@ -458,7 +458,13 @@ loop: ...@@ -458,7 +458,13 @@ loop:
if(top != Etop) if(top != Etop)
goto nottop; goto nottop;
walktype(n->left, Elv); walktype(n->left, Elv);
goto com; l = n->left;
if(l->op != OINDEX)
goto com;
if(!isptrto(l->left->type, TMAP))
goto com;
*n = *mapop(n, top);
goto loop;
case OLSH: case OLSH:
case ORSH: case ORSH:
...@@ -1875,6 +1881,21 @@ mapop(Node *n, int top) ...@@ -1875,6 +1881,21 @@ mapop(Node *n, int top)
r = n; r = n;
break; break;
case OASOP:
// rewrite map[index] op= right
// into tmpi := index; map[tmpi] = map[tmpi] op right
t = n->left->left->type->type;
a = nod(OXXX, N, N);
tempname(a, t->down); // tmpi
r = nod(OAS, a, n->left->right); // tmpi := index
n->left->right = a; // m[tmpi]
a = nod(OXXX, N, N);
*a = *n->left; // copy of map[tmpi]
a = nod(n->etype, a, n->right); // m[tmpi] op right
a = nod(OAS, n->left, a); // map[tmpi] = map[tmpi] op right
r = nod(OLIST, r, a);
} }
return r; return r;
......
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