mirror of
https://github.com/golang/go
synced 2024-11-26 13:38:20 -07:00
go/types, cmd/compile/internal/types2: use regular type printing for unsafe.Pointer
Type string printing special-cased printing of unsafe.Pointer because it's a built-in type; yet it's declared in a package like any other imported or used-defined type (unlike built-in types such as int). Use the same mechanism for printing unsafe.Pointer like any other (non-basic) type. This will make it possible to use the package Qualifier if so desired. Fixes #44515. Change-Id: I0dd1026f850737ecfc4bb99135cfb8e3c18be9e7 Reviewed-on: https://go-review.googlesource.com/c/go/+/295271 Trust: Robert Griesemer <gri@golang.org> Reviewed-by: Robert Findley <rfindley@google.com>
This commit is contained in:
parent
5a0e4fc4e7
commit
a2e150c7cd
@ -546,3 +546,25 @@ func TestIssue43088(t *testing.T) {
|
|||||||
Comparable(T1)
|
Comparable(T1)
|
||||||
Comparable(T2)
|
Comparable(T2)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestIssue44515(t *testing.T) {
|
||||||
|
typ := Unsafe.Scope().Lookup("Pointer").Type()
|
||||||
|
|
||||||
|
got := TypeString(typ, nil)
|
||||||
|
want := "unsafe.Pointer"
|
||||||
|
if got != want {
|
||||||
|
t.Errorf("got %q; want %q", got, want)
|
||||||
|
}
|
||||||
|
|
||||||
|
qf := func(pkg *Package) string {
|
||||||
|
if pkg == Unsafe {
|
||||||
|
return "foo"
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
got = TypeString(typ, qf)
|
||||||
|
want = "foo.Pointer"
|
||||||
|
if got != want {
|
||||||
|
t.Errorf("got %q; want %q", got, want)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -98,9 +98,15 @@ func writeType(buf *bytes.Buffer, typ Type, qf Qualifier, visited []Type) {
|
|||||||
buf.WriteString("<nil>")
|
buf.WriteString("<nil>")
|
||||||
|
|
||||||
case *Basic:
|
case *Basic:
|
||||||
if t.kind == UnsafePointer {
|
// exported basic types go into package unsafe
|
||||||
buf.WriteString("unsafe.")
|
// (currently this is just unsafe.Pointer)
|
||||||
|
if isExported(t.name) {
|
||||||
|
if obj, _ := Unsafe.scope.Lookup(t.name).(*TypeName); obj != nil {
|
||||||
|
writeTypeName(buf, obj, qf)
|
||||||
|
break
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if gcCompatibilityMode {
|
if gcCompatibilityMode {
|
||||||
// forget the alias names
|
// forget the alias names
|
||||||
switch t.kind {
|
switch t.kind {
|
||||||
|
@ -549,3 +549,25 @@ func TestIssue43088(t *testing.T) {
|
|||||||
Comparable(T1)
|
Comparable(T1)
|
||||||
Comparable(T2)
|
Comparable(T2)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestIssue44515(t *testing.T) {
|
||||||
|
typ := Unsafe.Scope().Lookup("Pointer").Type()
|
||||||
|
|
||||||
|
got := TypeString(typ, nil)
|
||||||
|
want := "unsafe.Pointer"
|
||||||
|
if got != want {
|
||||||
|
t.Errorf("got %q; want %q", got, want)
|
||||||
|
}
|
||||||
|
|
||||||
|
qf := func(pkg *Package) string {
|
||||||
|
if pkg == Unsafe {
|
||||||
|
return "foo"
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
got = TypeString(typ, qf)
|
||||||
|
want = "foo.Pointer"
|
||||||
|
if got != want {
|
||||||
|
t.Errorf("got %q; want %q", got, want)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -9,6 +9,7 @@ package types
|
|||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"go/token"
|
||||||
"unicode/utf8"
|
"unicode/utf8"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -98,9 +99,15 @@ func writeType(buf *bytes.Buffer, typ Type, qf Qualifier, visited []Type) {
|
|||||||
buf.WriteString("<nil>")
|
buf.WriteString("<nil>")
|
||||||
|
|
||||||
case *Basic:
|
case *Basic:
|
||||||
if t.kind == UnsafePointer {
|
// exported basic types go into package unsafe
|
||||||
buf.WriteString("unsafe.")
|
// (currently this is just unsafe.Pointer)
|
||||||
|
if token.IsExported(t.name) {
|
||||||
|
if obj, _ := Unsafe.scope.Lookup(t.name).(*TypeName); obj != nil {
|
||||||
|
writeTypeName(buf, obj, qf)
|
||||||
|
break
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if gcCompatibilityMode {
|
if gcCompatibilityMode {
|
||||||
// forget the alias names
|
// forget the alias names
|
||||||
switch t.kind {
|
switch t.kind {
|
||||||
|
Loading…
Reference in New Issue
Block a user