]> Cypherpunks repositories - gostls13.git/commitdiff
gc: use more Go-like names for methods
authorRuss Cox <rsc@golang.org>
Wed, 27 Jul 2011 21:56:13 +0000 (17:56 -0400)
committerRuss Cox <rsc@golang.org>
Wed, 27 Jul 2011 21:56:13 +0000 (17:56 -0400)
Fixes #991.

R=ken2
CC=golang-dev
https://golang.org/cl/4819049

src/cmd/gc/dcl.c
src/pkg/runtime/debug/stack_test.go
test/fixedbugs/bug350.go [new file with mode: 0644]

index 827cd99d9c442a4c29ba5e0f76f8f3df48534edb..ba1aa83888f2c456572b58bd24182fbec06680ec 100644 (file)
@@ -1079,7 +1079,10 @@ methodsym(Sym *nsym, Type *t0, int iface)
                if(t0->width < types[tptr]->width)
                        suffix = "·i";
        }
-       p = smprint("%#hT·%s%s", t0, nsym->name, suffix);
+       if(t0->sym == S && isptr[t0->etype])
+               p = smprint("(%#hT).%s%s", t0, nsym->name, suffix);
+       else
+               p = smprint("%#hT.%s%s", t0, nsym->name, suffix);
        s = pkglookup(p, s->pkg);
        free(p);
        return s;
@@ -1106,14 +1109,17 @@ methodname1(Node *n, Node *t)
        char *star;
        char *p;
 
-       star = "";
+       star = nil;
        if(t->op == OIND) {
                star = "*";
                t = t->left;
        }
        if(t->sym == S || isblank(n))
                return newname(n->sym);
-       p = smprint("%s%S·%S", star, t->sym, n->sym);
+       if(star)
+               p = smprint("(%s%S).%S", star, t->sym, n->sym);
+       else
+               p = smprint("%S.%S", t->sym, n->sym);
        n = newname(pkglookup(p, t->sym->pkg));
        free(p);
        return n;
index 4aeea13ffd3cb571e36949e4fb5c89c18196f1ec..94293bb934b512591c5711d26458bf1faab5b72e 100644 (file)
@@ -23,7 +23,7 @@ func (t T) method() []byte {
        Don't worry much about the base levels, but check the ones in our own package.
 
                /Users/r/go/src/pkg/runtime/debug/stack_test.go:15 (0x13878)
-                       *T.ptrmethod: return Stack()
+                       (*T).ptrmethod: return Stack()
                /Users/r/go/src/pkg/runtime/debug/stack_test.go:18 (0x138dd)
                        T.method: return t.ptrmethod()
                /Users/r/go/src/pkg/runtime/debug/stack_test.go:23 (0x13920)
@@ -40,7 +40,7 @@ func TestStack(t *testing.T) {
                t.Fatal("too few lines")
        }
        check(t, lines[0], "src/pkg/runtime/debug/stack_test.go")
-       check(t, lines[1], "\t*T.ptrmethod: return Stack()")
+       check(t, lines[1], "\t(*T).ptrmethod: return Stack()")
        check(t, lines[2], "src/pkg/runtime/debug/stack_test.go")
        check(t, lines[3], "\tT.method: return t.ptrmethod()")
        check(t, lines[4], "src/pkg/runtime/debug/stack_test.go")
diff --git a/test/fixedbugs/bug350.go b/test/fixedbugs/bug350.go
new file mode 100644 (file)
index 0000000..aac2949
--- /dev/null
@@ -0,0 +1,15 @@
+// errchk $G $D/$F.go
+
+// Copyright 2011 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
+
+type T int
+
+func (T) m() {}
+func (T) m() {} // ERROR "T[.]m redeclared"
+
+func (*T) p() {}
+func (*T) p() {} // ERROR "[(][*]T[)][.]p redeclared"