Files
llgo/compiler/cl/_testrt/eface/in.go
2025-01-08 14:59:01 +08:00

72 lines
1.1 KiB
Go

package main
import (
"unsafe"
"github.com/goplus/llgo/runtime/abi"
)
type T string
func (t *T) Invoke() {
println("invoke")
}
type eface struct {
_type *abi.Type
data unsafe.Pointer
}
func main() {
dump(true)
dump(0)
dump(int8(0))
dump(int16(0))
dump(int32(0))
dump(int64(0))
dump(uint(0))
dump(uint8(0))
dump(uint16(0))
dump(uint32(0))
dump(uint64(0))
dump(uintptr(0))
dump(float32(0))
dump(float64(0))
dump([10]int{})
dump(func() {})
dump((*int)(nil))
dump([]int{})
dump("hello")
dump(struct {
x int8
y int
z int
}{})
var t T
dump(t)
}
func dump(v any) {
e := (*eface)(unsafe.Pointer(&v))
dumpTyp(e._type, "")
}
func dumpTyp(t *abi.Type, sep string) {
print(sep)
println(t.String(), t.Kind(), t.Size_, t.PtrBytes, t.Hash, t.TFlag, t.Align_, t.PtrToThis_, t.Uncommon())
if t.Elem() != nil {
dumpTyp(t.Elem(), sep+"\telem: ")
}
if t.Uncommon() != nil {
dumpUncommon(t.Uncommon(), sep+"\tuncomm: ")
if t.PtrToThis_ != nil {
dumpUncommon(t.PtrToThis_.Uncommon(), sep+"\tuncomm: ")
}
}
}
func dumpUncommon(u *abi.UncommonType, sep string) {
print(sep)
println(u.PkgPath_, u.Mcount, u.Xcount)
}