]> Cypherpunks repositories - gostls13.git/commitdiff
gc: remove m[k] = x, false
authorRuss Cox <rsc@golang.org>
Fri, 11 Nov 2011 21:48:25 +0000 (16:48 -0500)
committerRuss Cox <rsc@golang.org>
Fri, 11 Nov 2011 21:48:25 +0000 (16:48 -0500)
R=ken2
CC=golang-dev
https://golang.org/cl/5376076

src/cmd/gc/esc.c
src/cmd/gc/fmt.c
src/cmd/gc/go.h
src/cmd/gc/typecheck.c
src/cmd/gc/walk.c
src/pkg/runtime/hashmap.c
test/fixedbugs/bug220.go [deleted file]
test/fixedbugs/bug242.go
test/named1.go

index 4382ed6f01f0c728e4f9fbb735a885cb613a1792..0213f0e4b4074ef145fce77459e9e7e95f863caa 100644 (file)
@@ -222,7 +222,6 @@ esc(Node *n)
        case OAS2RECV:          // v, ok = <-ch
        case OAS2MAPR:          // v, ok = m[k]
        case OAS2DOTTYPE:       // v, ok = x.(type)
-       case OAS2MAPW:          // m[k] = x, ok
                escassign(n->list->n, n->rlist->n);
                break;
 
index f64a2314be46d6eb28cac0efcc32a1ab806813ba..01a8c0ec1a108063e52d09d069337f54981d93a7 100644 (file)
@@ -802,7 +802,6 @@ stmtfmt(Fmt *f, Node *n)
        case OAS2DOTTYPE:
        case OAS2FUNC:
        case OAS2MAPR:
-       case OAS2MAPW:
        case OAS2RECV:
                fmtprint(f, "%,H = %,H", n->list, n->rlist);
                break;
@@ -981,7 +980,6 @@ static int opprec[] = {
        [OAS2DOTTYPE] = -1,
        [OAS2FUNC] = -1,
        [OAS2MAPR] = -1,
-       [OAS2MAPW] = -1,
        [OAS2RECV] = -1,
        [OASOP] = -1,
        [OBREAK] = -1,
index faae7bd9eabd84ef67e5406d6e571beae85954ce..e21620f4553067ff3470578dbe4a0cfb36b695f7 100644 (file)
@@ -425,7 +425,7 @@ enum
        OAPPEND,
        OARRAYBYTESTR, OARRAYRUNESTR,
        OSTRARRAYBYTE, OSTRARRAYRUNE,
-       OAS, OAS2, OAS2MAPW, OAS2FUNC, OAS2RECV, OAS2MAPR, OAS2DOTTYPE,
+       OAS, OAS2, OAS2FUNC, OAS2RECV, OAS2MAPR, OAS2DOTTYPE,
        OASOP,
        OBAD,
        OCALL, OCALLFUNC, OCALLMETH, OCALLINTER,
index ed5c35ae011713ae1f8702c5e05389192a35e3ef..34c241b06bcb04d180c85398e0a7d1a4fb080fd1 100644 (file)
@@ -2334,7 +2334,7 @@ typecheckas2(Node *n)
 {
        int cl, cr;
        NodeList *ll, *lr;
-       Node *l, *r, *rr;
+       Node *l, *r;
        Iter s;
        Type *t;
 
@@ -2373,16 +2373,7 @@ typecheckas2(Node *n)
        if(cl == 1 && cr == 2 && l->op == OINDEXMAP) {
                if(l->type == T)
                        goto out;
-               n->op = OAS2MAPW;
-               n->rlist->n = assignconv(r, l->type, "assignment");
-               rr = n->rlist->next->n;
-               n->rlist->next->n = assignconv(rr, types[TBOOL], "assignment");
-               if(isconst(rr, CTBOOL) && !rr->val.u.bval) {
-                       n->op = ODELETE;
-                       n->list = list(list1(l->left), l->right);
-                       n->right = n->rlist->n;
-                       n->rlist = nil;
-               }
+               yyerror("assignment count mismatch: %d = %d (use delete)", cl, cr);
                goto out;
        }
 
index 373c1eef2206c4b4c11bad163e627ef364ceba69..e1ea935828755bfed291a0f583e5aabb5ea779a8 100644 (file)
@@ -183,7 +183,6 @@ walkstmt(Node **np)
        case OAS2DOTTYPE:
        case OAS2RECV:
        case OAS2FUNC:
-       case OAS2MAPW:
        case OAS2MAPR:
        case OCLOSE:
        case OCOPY:
@@ -644,17 +643,6 @@ walkexpr(Node **np, NodeList **init)
                n = mkcall1(mapfndel("mapdelete", t), t->down, init, typename(t), l, r);
                goto ret;
 
-       case OAS2MAPW:
-               // map[] = a,b - mapassign2
-               // a,b = m[i];
-               *init = concat(*init, n->ninit);
-               n->ninit = nil;
-               walkexprlistsafe(n->list, init);
-               l = n->list->n;
-               t = l->left->type;
-               n = mkcall1(mapfn("mapassign2", t), T, init, typename(t), l->left, l->right, n->rlist->n, n->rlist->next->n);
-               goto ret;
-
        case OAS2DOTTYPE:
                // a,b = i.(T)
                *init = concat(*init, n->ninit);
index b88cc3564119701678433cc3a5579e93fa807b06..2ecd3d0fe7c786b0013aa5463b554ce4bc2744cd 100644 (file)
@@ -1000,34 +1000,6 @@ runtime·mapassign1(MapType *t, Hmap *h, ...)
        runtime·mapassign(t, h, ak, av);
 }
 
-// mapassign2(mapType *type, hmap *map[any]any, key any, val any, pres bool);
-#pragma textflag 7
-void
-runtime·mapassign2(MapType *t, Hmap *h, ...)
-{
-       byte *ak, *av, *ap;
-
-       if(h == nil)
-               runtime·panicstring("assignment to entry in nil map");
-
-       ak = (byte*)&h + h->ko2;
-       av = (byte*)&h + h->vo2;
-       ap = (byte*)&h + h->po2;
-
-       if(*ap == false)
-               av = nil;       // delete
-
-       runtime·mapassign(t, h, ak, av);
-
-       if(debug) {
-               runtime·prints("mapassign2: map=");
-               runtime·printpointer(h);
-               runtime·prints("; key=");
-               h->keyalg->print(h->keysize, ak);
-               runtime·prints("\n");
-       }
-}
-
 // mapdelete(mapType *type, hmap *map[any]any, key any)
 #pragma textflag 7
 void
diff --git a/test/fixedbugs/bug220.go b/test/fixedbugs/bug220.go
deleted file mode 100644 (file)
index ff027dd..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-// $G $D/$F.go || echo BUG: bug220
-
-// Copyright 2009 The Go Authors.  All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package main
-
-func main() {
-       m := make(map[int]map[uint]float64)
-
-       m[0] = make(map[uint]float64), false // 6g used to reject this
-       m[1] = nil
-}
index 839dccd37410360c0c831afd77c46f48ce8effed..d80ae76a215ba32443b07c9f2e104f97af3f0fef 100644 (file)
@@ -93,7 +93,8 @@ func main() {
 
        m[13] = 'B'
        //  13        14
-       m[gint()] = gbyte(), false
+       delete(m, gint())
+       gbyte()
        if _, present := m[13]; present {
                println("bad map removal")
                panic("fail")
index 33d07a71c27f8e2aafd20ac162a7826d94db6057..fe71df844f0524a4de5c8aa8fbadc982f2ea7a8e 100644 (file)
@@ -41,7 +41,6 @@ func main() {
        asBool(i < j)  // ERROR "cannot use.*type bool.*as type Bool"
 
        _, b = m[2] // ERROR "cannot .* bool.*type Bool"
-       m[2] = 1, b // ERROR "cannot use.*type Bool.*as type bool"
 
        var inter interface{}
        _, b = inter.(Map) // ERROR "cannot .* bool.*type Bool"