]> Cypherpunks repositories - gostls13.git/commitdiff
gc: var x, ok = m[y]
authorRuss Cox <rsc@golang.org>
Tue, 15 Dec 2009 22:26:33 +0000 (14:26 -0800)
committerRuss Cox <rsc@golang.org>
Tue, 15 Dec 2009 22:26:33 +0000 (14:26 -0800)
Fixes #384.

R=ken2
https://golang.org/cl/179061

src/cmd/gc/sinit.c
test/fixedbugs/bug227.go [new file with mode: 0644]

index ade8426c02ef1d73e511ec6b5f0f28fc250fda52..b1160d3d482f29dc436d65c76cb0577a11432fc1 100644 (file)
@@ -94,6 +94,12 @@ init1(Node *n, NodeList **out)
                                init1(l->n, out);
                        *out = list(*out, n->defn);
                        break;
+               
+               case OAS2MAPR:
+                       for(l=n->defn->rlist; l; l=l->next)
+                               init1(l->n, out);
+                       *out = list(*out, n->defn);
+                       break;
                }
        }
        l = initlist;
diff --git a/test/fixedbugs/bug227.go b/test/fixedbugs/bug227.go
new file mode 100644 (file)
index 0000000..be27a68
--- /dev/null
@@ -0,0 +1,34 @@
+// $G $D/$F.go && $L $F.$A && ./$A.out
+
+// 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
+
+var (
+       nf int
+       x, y, z = f(), f(), f()
+       m = map[string]string{"a":"A"}
+       a, aok = m["a"]
+       b, bok = m["b"]
+)
+
+func look(s string) (string, bool) {
+       x, ok := m[s]
+       return x, ok
+}
+
+func f() int {
+       nf++
+       return nf
+}
+
+func main() {
+       if nf != 3 || x != 1 || y != 2 || z != 3 {
+               panic("nf=", nf, " x=", x, " y=", y)
+       }
+       if a != "A" || aok != true || b != "" || bok != false {
+               panic("a=", a, " aok=", aok, " b=", b, " bok=", bok)
+       }
+}