mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/compile: allow embed into any byte slice type
Fixes #47735 Change-Id: Ia21ea9a67f36a3edfef1b299ae4f3b00c306cd68 Reviewed-on: https://go-review.googlesource.com/c/go/+/342851 Reviewed-by: Matthew Dempsky <mdempsky@google.com> Run-TryBot: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Go Bot <gobot@golang.org> Trust: Alexander Rakoczy <alex@golang.org>
This commit is contained in:
parent
d2f002cb39
commit
4f2ebfe34b
2 changed files with 41 additions and 1 deletions
|
|
@ -73,7 +73,7 @@ func embedKind(typ *types.Type) int {
|
||||||
if typ.Kind() == types.TSTRING {
|
if typ.Kind() == types.TSTRING {
|
||||||
return embedString
|
return embedString
|
||||||
}
|
}
|
||||||
if typ.Sym() == nil && typ.IsSlice() && typ.Elem().Kind() == types.TUINT8 {
|
if typ.IsSlice() && typ.Elem().Kind() == types.TUINT8 {
|
||||||
return embedBytes
|
return embedBytes
|
||||||
}
|
}
|
||||||
return embedUnknown
|
return embedUnknown
|
||||||
|
|
|
||||||
|
|
@ -129,3 +129,43 @@ func TestUninitialized(t *testing.T) {
|
||||||
t.Errorf("in uninitialized embed.FS, . is not a directory")
|
t.Errorf("in uninitialized embed.FS, . is not a directory")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
//go:embed "testdata/hello.txt"
|
||||||
|
helloT []T
|
||||||
|
//go:embed "testdata/hello.txt"
|
||||||
|
helloUint8 []uint8
|
||||||
|
//go:embed "testdata/hello.txt"
|
||||||
|
helloEUint8 []EmbedUint8
|
||||||
|
//go:embed "testdata/hello.txt"
|
||||||
|
helloBytes EmbedBytes
|
||||||
|
//go:embed "testdata/hello.txt"
|
||||||
|
helloString EmbedString
|
||||||
|
)
|
||||||
|
|
||||||
|
type T byte
|
||||||
|
type EmbedUint8 uint8
|
||||||
|
type EmbedBytes []byte
|
||||||
|
type EmbedString string
|
||||||
|
|
||||||
|
// golang.org/issue/47735
|
||||||
|
func TestAliases(t *testing.T) {
|
||||||
|
all := testDirAll
|
||||||
|
want, e := all.ReadFile("testdata/hello.txt")
|
||||||
|
if e != nil {
|
||||||
|
t.Fatal("ReadFile:", e)
|
||||||
|
}
|
||||||
|
check := func(g interface{}) {
|
||||||
|
got := reflect.ValueOf(g)
|
||||||
|
for i := 0; i < got.Len(); i++ {
|
||||||
|
if byte(got.Index(i).Uint()) != want[i] {
|
||||||
|
t.Fatalf("got %v want %v", got.Bytes(), want)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
check(helloT)
|
||||||
|
check(helloUint8)
|
||||||
|
check(helloEUint8)
|
||||||
|
check(helloBytes)
|
||||||
|
check(helloString)
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue