From 914a0c60b0fe4e591c409d7f69c077db55ebd01d Mon Sep 17 00:00:00 2001 From: xushiwei Date: Sun, 26 May 2024 08:59:10 +0800 Subject: [PATCH] runtime: iface --- internal/abi/llgo_autogen.lla | Bin 5835 -> 6546 bytes internal/abi/type.go | 69 ++++++++++ internal/runtime/c/c.go | 4 +- internal/runtime/llgo_autogen.lla | Bin 10446 -> 0 bytes internal/runtime/runtime2.go | 44 ------- internal/runtime/z_face.go | 209 ++++++++++++++++++++++++++++++ internal/runtime/z_type.go | 106 ++------------- ssa/interface.go | 2 +- 8 files changed, 295 insertions(+), 139 deletions(-) delete mode 100644 internal/runtime/llgo_autogen.lla delete mode 100644 internal/runtime/runtime2.go create mode 100644 internal/runtime/z_face.go diff --git a/internal/abi/llgo_autogen.lla b/internal/abi/llgo_autogen.lla index 0d23b976a79850e7f469d1bac1af16222eca398f..6e0de50e42d471f15c1ff1490315bbfdc3a4a9b6 100644 GIT binary patch literal 6546 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 literal 5835 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 diff --git a/internal/abi/type.go b/internal/abi/type.go index b43621a9..a6a01d85 100644 --- a/internal/abi/type.go +++ b/internal/abi/type.go @@ -240,6 +240,11 @@ type Method struct { Tfn_ Text // fn used for normal method call } +// Exported reports whether the method is exported. +func (p *Method) Exported() bool { + return p.Name_.IsExported() +} + // UncommonType is present only for defined types or types with methods // (if T is a defined type, the uncommonTypes for T and *T have methods). // Using a pointer to this struct reduces the overall size required @@ -285,6 +290,70 @@ func (t *Type) Common() *Type { return t } +type structTypeUncommon struct { + StructType + u UncommonType +} + +// Uncommon returns a pointer to T's "uncommon" data if there is any, otherwise nil +func (t *Type) Uncommon() *UncommonType { + if t.TFlag&TFlagUncommon == 0 { + return nil + } + switch t.Kind() { + case Struct: + return &(*structTypeUncommon)(unsafe.Pointer(t)).u + case Pointer: + type u struct { + PtrType + u UncommonType + } + return &(*u)(unsafe.Pointer(t)).u + case Func: + type u struct { + FuncType + u UncommonType + } + return &(*u)(unsafe.Pointer(t)).u + case Slice: + type u struct { + SliceType + u UncommonType + } + return &(*u)(unsafe.Pointer(t)).u + case Array: + type u struct { + ArrayType + u UncommonType + } + return &(*u)(unsafe.Pointer(t)).u + case Chan: + type u struct { + ChanType + u UncommonType + } + return &(*u)(unsafe.Pointer(t)).u + case Map: + type u struct { + MapType + u UncommonType + } + return &(*u)(unsafe.Pointer(t)).u + case Interface: + type u struct { + InterfaceType + u UncommonType + } + return &(*u)(unsafe.Pointer(t)).u + default: + type u struct { + Type + u UncommonType + } + return &(*u)(unsafe.Pointer(t)).u + } +} + // Len returns the length of t if t is an array type, otherwise 0 func (t *Type) Len() int { if t.Kind() == Array { diff --git a/internal/runtime/c/c.go b/internal/runtime/c/c.go index eb502d92..3d200e36 100644 --- a/internal/runtime/c/c.go +++ b/internal/runtime/c/c.go @@ -42,8 +42,8 @@ var Stderr FilePtr //go:linkname Str llgo.cstr func Str(string) *Char -//go:linkname Advance llgo.advance -func Advance(ptr Pointer, offset int) Pointer +// llgo:link Advance llgo.advance +func Advance[PtrT any](ptr PtrT, offset int) PtrT { return ptr } //go:linkname Alloca llgo.alloca func Alloca(size uintptr) Pointer diff --git a/internal/runtime/llgo_autogen.lla b/internal/runtime/llgo_autogen.lla deleted file mode 100644 index e2f90b846916d15002039bdd162880539e78866f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10446 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 l|GWEtkVDA-gB<=}xS@(XB-H 0 || pkgPath.Bytes != nil { + size += uncommonTypeHdrSize + uintptr(n)*methodSize + tflag |= abi.TFlagUncommon + } + ptr := AllocU(size) + + ret := (*Type)(ptr) + *ret = *underlying + ret.TFlag = tflag | abi.TFlagNamed + ret.Str_ = name + + xcount := 0 + for _, m := range methods { + if !m.Exported() { + break + } + xcount++ + } + + uncommon := (*abi.UncommonType)(c.Advance(ptr, int(typeHdrSize))) + *uncommon = abi.UncommonType{ + PkgPath_: pkgPath, + Mcount: uint16(n), + Xcount: uint16(xcount), + Moff: uint32(uncommonTypeHdrSize), + } + + data := (*abi.Method)(c.Advance(ptr, int(typeHdrSize+uncommonTypeHdrSize))) + copy(unsafe.Slice(data, n), methods) + return ret +} + +// Interface returns an interface type. +func Interface(pkgPath string, methods []abi.Imethod) *Type { + var npkg abi.Name + if len(pkgPath) > 0 { + npkg = abi.NewName(pkgPath, "", false, false) + } + ret := &abi.InterfaceType{ + Type: Type{ + Size_: unsafe.Sizeof(eface{}), + Hash: uint32(abi.Interface), // TODO(xsw): hash + Kind_: uint8(abi.Interface), + }, + PkgPath: npkg, + Methods: methods, + } + return &ret.Type +} + +// NewItab returns a new itab. +func NewItab(inter *InterfaceType, typ *Type) *Itab { + n := len(inter.Methods) + size := itabHdrSize + uintptr(n)*pointerSize + ptr := AllocU(size) + + ret := (*Itab)(ptr) + ret.inter = inter + ret._type = typ + ret.hash = typ.Hash + + u := typ.Uncommon() + if u == nil { + ret.fun[0] = 0 + } else { + data := (*uintptr)(c.Advance(ptr, int(itabHdrSize))) + mthds := methods(u, inter.PkgPath) + for i, m := range inter.Methods { + fn := findMethod(mthds, m) + if fn == nil { + ret.fun[0] = 0 + break + } + *c.Advance(data, i) = uintptr(fn) + } + } + return ret +} + +func findMethod(mthds []abi.Method, im abi.Imethod) abi.Text { + imName := im.Name_.Name() + for _, m := range mthds { + mName := m.Name_.Name() + if mName >= imName { + if mName == imName && m.Mtyp_ == im.Typ_ { + return m.Ifn_ + } + break + } + } + return nil +} + +func methods(u *abi.UncommonType, from abi.Name) []abi.Method { + if u.PkgPath_.Name() == from.Name() { + return u.Methods() + } + return u.ExportedMethods() +} + +// ----------------------------------------------------------------------------- diff --git a/internal/runtime/z_type.go b/internal/runtime/z_type.go index 403c37b0..dfe2a4d4 100644 --- a/internal/runtime/z_type.go +++ b/internal/runtime/z_type.go @@ -20,103 +20,25 @@ import ( "unsafe" "github.com/goplus/llgo/internal/abi" - "github.com/goplus/llgo/internal/runtime/c" -) - -type ( - Eface = eface - Iface = iface - Itab = itab ) type Kind = abi.Kind +type Name = abi.Name type Type = abi.Type -type FuncType = abi.FuncType -type InterfaceType = abi.InterfaceType - // ----------------------------------------------------------------------------- -// Func returns a function type. -func Func(in, out []*Type, variadic bool) *FuncType { - const ( - funcTypeHdrSize = unsafe.Sizeof(abi.FuncType{}) - pointerSize = unsafe.Sizeof(uintptr(0)) - ) - - n := len(in) + len(out) - ptr := AllocU(funcTypeHdrSize + uintptr(n)*pointerSize) - c.Memset(ptr, 0, funcTypeHdrSize) - - ret := (*abi.FuncType)(ptr) - ret.Size_ = pointerSize - ret.Hash = uint32(abi.Func) // TODO(xsw): hash - ret.Kind_ = uint8(abi.Func) - ret.InCount = uint16(len(in)) - ret.OutCount = uint16(len(out)) - if variadic { - ret.OutCount |= 1 << 15 - } - - data := (**Type)(c.Advance(ptr, int(funcTypeHdrSize))) - params := unsafe.Slice(data, n) - copy(params, in) - copy(params[len(in):], out) - return ret +// NewName creates a new name. +func NewName(name string, exported bool) Name { + return abi.NewName(name, "", exported, false) } -// Imethod returns an interface method. -func Imethod(name string, typ *FuncType, exported bool) abi.Imethod { - n := abi.NewName(name, "", exported, false) - return abi.Imethod{ - Name_: n, - Typ_: typ, - } -} - -// Method returns a method. -func Method(name string, typ *FuncType, fn abi.Text, exported bool) abi.Method { - n := abi.NewName(name, "", exported, false) - return abi.Method{ - Name_: n, - Mtyp_: typ, - Ifn_: fn, - Tfn_: fn, - } -} - -// ----------------------------------------------------------------------------- - -// Named returns a named type. -func Named(name string, typ *Type) *Type { - ret := *typ // TODO(xsw): named type - return &ret -} - -// Interface returns an interface type. -func Interface(pkgPath string) *Type { - // TODO(xsw): pkgPath - // npkg := abi.NewName(pkgPath, "", false, false) - ret := &abi.InterfaceType{ - Type: Type{ - Size_: unsafe.Sizeof(eface{}), - Hash: uint32(abi.Interface), // TODO(xsw): hash - Kind_: uint8(abi.Interface), - }, - //PkgPath: npkg, - Methods: nil, - } - return &ret.Type -} - -// NewItab returns a new itab. -func NewItab(inter *InterfaceType, typ *Type) *Itab { - return &itab{ - inter: inter, - _type: typ, - hash: typ.Hash, - //fun: nil, TODO(xsw) +// NewPkgName creates a package name. +func NewPkgName(pkgPath string) (ret Name) { + if len(pkgPath) > 0 { + ret = abi.NewName(pkgPath, "", false, false) } + return } // ----------------------------------------------------------------------------- @@ -190,21 +112,21 @@ func StructField(name string, typ *Type, off uintptr, tag string, exported, embe } // Struct returns a struct type. -func Struct(size uintptr, pkgPath string, fields ...abi.StructField) *Type { - // TODO(xsw): pkgPath - // npkg := abi.NewName(pkgPath, "", false, false) +func Struct(pkgPath Name, size uintptr, fields ...abi.StructField) *Type { ret := &abi.StructType{ Type: Type{ Size_: size, Hash: uint32(abi.Struct), // TODO(xsw): hash Kind_: uint8(abi.Struct), }, - // PkgPath: npkg, - Fields: fields, + PkgPath: pkgPath, + Fields: fields, } return &ret.Type } +// ----------------------------------------------------------------------------- + // Pointer returns a pointer type. func Pointer(elem *Type) *Type { ret := &abi.PtrType{ diff --git a/ssa/interface.go b/ssa/interface.go index 51d8ab37..6d33fc44 100644 --- a/ssa/interface.go +++ b/ssa/interface.go @@ -88,7 +88,7 @@ func (b Builder) abiStructOf(t *types.Struct) Expr { params := strucAbi.raw.Type.(*types.Signature).Params() tSlice := prog.rawType(params.At(params.Len() - 1).Type().(*types.Slice)) fldSlice := b.SliceLit(tSlice, flds...) - return b.Call(strucAbi, pkgPath, fldSlice) + return b.Call(pkgPath, strucAbi, fldSlice) } // func StructField(name string, typ *abi.Type, off uintptr, tag string, exported, embedded bool) abi.StructField