diff --git a/c/sqlite/llgo_autogen.lla b/c/sqlite/llgo_autogen.lla index becb6e80..31c3b747 100644 Binary files a/c/sqlite/llgo_autogen.lla and b/c/sqlite/llgo_autogen.lla differ diff --git a/c/sqlite/sqlite.go b/c/sqlite/sqlite.go index dcf4a86b..1390d665 100644 --- a/c/sqlite/sqlite.go +++ b/c/sqlite/sqlite.go @@ -76,7 +76,7 @@ const ( Done Errno = 101 // sqlite3_step() has finished executing ) -// llgo:link (Errno).Errstr C.sqlite3_errstr +// llgo:link Errno.Errstr C.sqlite3_errstr func (err Errno) Errstr() *c.Char { return nil } // llgo:link (*Sqlite3).Errmsg C.sqlite3_errmsg diff --git a/cl/_testdata/method/out.ll b/cl/_testdata/method/out.ll index c8a40fd1..b353e46d 100644 --- a/cl/_testdata/method/out.ll +++ b/cl/_testdata/method/out.ll @@ -6,16 +6,16 @@ source_filename = "main" @__llgo_argc = global ptr null @__llgo_argv = global ptr null -define i64 @"(main.T).Add"(i64 %0, i64 %1) { +define i64 @main.T.Add(i64 %0, i64 %1) { _llgo_0: %2 = add i64 %0, %1 ret i64 %2 } -define i64 @"(*main.T).Add"(ptr %0, i64 %1) { +define i64 @"main.(*T).Add"(ptr %0, i64 %1) { _llgo_0: %2 = load i64, ptr %0, align 4 - %3 = call i64 @"(main.T).Add"(i64 %2, i64 %1) + %3 = call i64 @main.T.Add(i64 %2, i64 %1) ret i64 %3 } @@ -48,7 +48,7 @@ _llgo_0: store ptr %1, ptr @__llgo_argv, align 8 call void @"github.com/goplus/llgo/internal/runtime.init"() call void @main.init() - %2 = call i64 @"(main.T).Add"(i64 1, i64 2) + %2 = call i64 @main.T.Add(i64 1, i64 2) call void (ptr, ...) @printf(ptr @main.format, i64 %2) ret i32 0 } diff --git a/cl/_testdata/ptrmthd/out.ll b/cl/_testdata/ptrmthd/out.ll index ff58cec0..fc9c4ce5 100644 --- a/cl/_testdata/ptrmthd/out.ll +++ b/cl/_testdata/ptrmthd/out.ll @@ -6,7 +6,7 @@ source_filename = "main" @__llgo_argc = global ptr null @__llgo_argv = global ptr null -define void @"(*main.T).Print"(ptr %0, i64 %1) { +define void @"main.(*T).Print"(ptr %0, i64 %1) { _llgo_0: call void (ptr, ...) @printf(ptr %0, i64 %1) ret void @@ -41,7 +41,7 @@ _llgo_0: store ptr %1, ptr @__llgo_argv, align 8 call void @"github.com/goplus/llgo/internal/runtime.init"() call void @main.init() - call void @"(*main.T).Print"(ptr @main.format, i64 100) + call void @"main.(*T).Print"(ptr @main.format, i64 100) ret i32 0 } diff --git a/cl/_testgo/eface/out.ll b/cl/_testgo/eface/out.ll index e65c1abb..800ed1db 100644 --- a/cl/_testgo/eface/out.ll +++ b/cl/_testgo/eface/out.ll @@ -60,7 +60,7 @@ _llgo_0: define void @main.dumpTyp(ptr %0, %"github.com/goplus/llgo/internal/runtime.String" %1) { _llgo_0: call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %1) - %2 = call i64 @"(*github.com/goplus/llgo/internal/abi.Type).Kind"(ptr %0) + %2 = call i64 @"github.com/goplus/llgo/internal/abi.(*Type).Kind"(ptr %0) %3 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.Type", ptr %0, i32 0, i32 0 %4 = load i64, ptr %3, align 4 %5 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.Type", ptr %0, i32 0, i32 1 @@ -300,7 +300,7 @@ declare ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64) declare void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String") -declare i64 @"(*github.com/goplus/llgo/internal/abi.Type).Kind"(ptr) +declare i64 @"github.com/goplus/llgo/internal/abi.(*Type).Kind"(ptr) declare void @"github.com/goplus/llgo/internal/runtime.PrintUint"(i64) diff --git a/cl/_testgo/errors/out.ll b/cl/_testgo/errors/out.ll index f544af60..599cc745 100644 --- a/cl/_testgo/errors/out.ll +++ b/cl/_testgo/errors/out.ll @@ -46,7 +46,7 @@ _llgo_0: ret %"github.com/goplus/llgo/internal/runtime.iface" %9 } -define %"github.com/goplus/llgo/internal/runtime.String" @"(*main.errorString).Error"(ptr %0) { +define %"github.com/goplus/llgo/internal/runtime.String" @"main.(*errorString).Error"(ptr %0) { _llgo_0: %1 = getelementptr inbounds %main.errorString, ptr %0, i32 0, i32 0 %2 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %1, align 8 @@ -194,9 +194,9 @@ _llgo_4: ; preds = %_llgo_3, %_llgo_2 %51 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.Method", ptr %49, i32 0, i32 1 store ptr %48, ptr %51, align 8 %52 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.Method", ptr %49, i32 0, i32 2 - store ptr @"(*main.errorString).Error", ptr %52, align 8 + store ptr @"main.(*errorString).Error", ptr %52, align 8 %53 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.Method", ptr %49, i32 0, i32 3 - store ptr @"(*main.errorString).Error", ptr %53, align 8 + store ptr @"main.(*errorString).Error", ptr %53, align 8 %54 = load %"github.com/goplus/llgo/internal/abi.Method", ptr %49, align 8 %55 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocU"(i64 40) %56 = getelementptr %"github.com/goplus/llgo/internal/abi.Method", ptr %55, i64 0 diff --git a/cl/_testgo/struczero/out.ll b/cl/_testgo/struczero/out.ll index f0cd306b..2bd65e65 100644 --- a/cl/_testgo/struczero/out.ll +++ b/cl/_testgo/struczero/out.ll @@ -172,7 +172,7 @@ _llgo_0: store %"github.com/goplus/llgo/cl/internal/foo.Foo" %26, ptr %18, align 8 %27 = extractvalue { %"github.com/goplus/llgo/cl/internal/foo.Foo", i1 } %25, 1 %28 = load %"github.com/goplus/llgo/cl/internal/foo.Foo", ptr %18, align 8 - %29 = call ptr @"(github.com/goplus/llgo/cl/internal/foo.Foo).Pb"(%"github.com/goplus/llgo/cl/internal/foo.Foo" %28) + %29 = call ptr @"github.com/goplus/llgo/cl/internal/foo.Foo.Pb"(%"github.com/goplus/llgo/cl/internal/foo.Foo" %28) %30 = getelementptr inbounds %"github.com/goplus/llgo/cl/internal/foo.Foo", ptr %18, i32 0, i32 1 %31 = load float, ptr %30, align 4 call void @"github.com/goplus/llgo/internal/runtime.PrintPointer"(ptr %29) @@ -393,9 +393,9 @@ _llgo_12: ; preds = %_llgo_11, %_llgo_9 %114 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.Method", ptr %112, i32 0, i32 1 store ptr %111, ptr %114, align 8 %115 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.Method", ptr %112, i32 0, i32 2 - store ptr @"(*github.com/goplus/llgo/cl/internal/foo.Foo).Pb", ptr %115, align 8 + store ptr @"github.com/goplus/llgo/cl/internal/foo.(*Foo).Pb", ptr %115, align 8 %116 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.Method", ptr %112, i32 0, i32 3 - store ptr @"(*github.com/goplus/llgo/cl/internal/foo.Foo).Pb", ptr %116, align 8 + store ptr @"github.com/goplus/llgo/cl/internal/foo.(*Foo).Pb", ptr %116, align 8 %117 = load %"github.com/goplus/llgo/internal/abi.Method", ptr %112, align 8 %118 = alloca %"github.com/goplus/llgo/internal/abi.Method", align 8 %119 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.Method", ptr %118, i32 0, i32 0 @@ -403,9 +403,9 @@ _llgo_12: ; preds = %_llgo_11, %_llgo_9 %120 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.Method", ptr %118, i32 0, i32 1 store ptr %111, ptr %120, align 8 %121 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.Method", ptr %118, i32 0, i32 2 - store ptr @"(*github.com/goplus/llgo/cl/internal/foo.Foo).Pb", ptr %121, align 8 + store ptr @"github.com/goplus/llgo/cl/internal/foo.(*Foo).Pb", ptr %121, align 8 %122 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.Method", ptr %118, i32 0, i32 3 - store ptr @"(github.com/goplus/llgo/cl/internal/foo.Foo).Pb", ptr %122, align 8 + store ptr @"github.com/goplus/llgo/cl/internal/foo.Foo.Pb", ptr %122, align 8 %123 = load %"github.com/goplus/llgo/internal/abi.Method", ptr %118, align 8 %124 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocU"(i64 40) %125 = getelementptr %"github.com/goplus/llgo/internal/abi.Method", ptr %124, i64 0 @@ -461,9 +461,9 @@ declare void @"github.com/goplus/llgo/internal/runtime.InitNamed"(ptr, %"github. declare ptr @"github.com/goplus/llgo/internal/runtime.Func"(%"github.com/goplus/llgo/internal/runtime.Slice", %"github.com/goplus/llgo/internal/runtime.Slice", i1) -declare ptr @"(*github.com/goplus/llgo/cl/internal/foo.Foo).Pb"(ptr) +declare ptr @"github.com/goplus/llgo/cl/internal/foo.(*Foo).Pb"(ptr) -declare ptr @"(github.com/goplus/llgo/cl/internal/foo.Foo).Pb"(%"github.com/goplus/llgo/cl/internal/foo.Foo") +declare ptr @"github.com/goplus/llgo/cl/internal/foo.Foo.Pb"(%"github.com/goplus/llgo/cl/internal/foo.Foo") declare void @"github.com/goplus/llgo/cl/internal/foo.init"() diff --git a/cl/_testrt/intgen/out.ll b/cl/_testrt/intgen/out.ll index d0bca80a..ddc97c91 100644 --- a/cl/_testrt/intgen/out.ll +++ b/cl/_testrt/intgen/out.ll @@ -47,7 +47,7 @@ _llgo_3: ; preds = %_llgo_1 ret %"github.com/goplus/llgo/internal/runtime.Slice" %8 } -define i32 @"(*main.generator).next"(ptr %0) { +define i32 @"main.(*generator).next"(ptr %0) { _llgo_0: %1 = getelementptr inbounds %main.generator, ptr %0, i32 0, i32 0 %2 = load i32, ptr %1, align 4 @@ -205,6 +205,6 @@ define i32 @"main.next$bound"(ptr %0) { _llgo_0: %1 = load { ptr }, ptr %0, align 8 %2 = extractvalue { ptr } %1, 0 - %3 = call i32 @"(*main.generator).next"(ptr %2) + %3 = call i32 @"main.(*generator).next"(ptr %2) ret i32 %3 } diff --git a/cl/_testrt/linkname/in.go b/cl/_testrt/linkname/in.go index 8e38e101..cc4f836e 100644 --- a/cl/_testrt/linkname/in.go +++ b/cl/_testrt/linkname/in.go @@ -3,13 +3,27 @@ package main import ( _ "unsafe" + _ "github.com/goplus/llgo/cl/internal/linktarget" "github.com/goplus/llgo/internal/runtime/c" ) //go:linkname print github.com/goplus/llgo/cl/internal/linktarget.F func print(a, b, c, d *c.Char) +type m struct { + s string +} + +//go:linkname setInfo github.com/goplus/llgo/cl/internal/linktarget.(*m).setInfo +func setInfo(*m, string) + +//go:linkname info github.com/goplus/llgo/cl/internal/linktarget.m.info +func info(m) string + func main() { print(c.Str("a"), c.Str("b"), c.Str("c"), c.Str("d")) print(c.Str("1"), c.Str("2"), c.Str("3"), c.Str("4")) + var m m + setInfo(&m, "hello") + println(info(m)) } diff --git a/cl/_testrt/linkname/out.ll b/cl/_testrt/linkname/out.ll index 47f22283..65612d87 100644 --- a/cl/_testrt/linkname/out.ll +++ b/cl/_testrt/linkname/out.ll @@ -1,6 +1,9 @@ ; ModuleID = 'main' source_filename = "main" +%"github.com/goplus/llgo/internal/runtime.String" = type { ptr, i64 } +%main.m = type { %"github.com/goplus/llgo/internal/runtime.String" } + @"main.init$guard" = global ptr null @__llgo_argc = global ptr null @__llgo_argv = global ptr null @@ -12,6 +15,9 @@ source_filename = "main" @5 = private unnamed_addr constant [2 x i8] c"2\00", align 1 @6 = private unnamed_addr constant [2 x i8] c"3\00", align 1 @7 = private unnamed_addr constant [2 x i8] c"4\00", align 1 +@8 = private unnamed_addr constant [6 x i8] c"hello\00", align 1 + +declare %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/cl/internal/linktarget.m.info"(%main.m) define void @main.init() { _llgo_0: @@ -20,6 +26,7 @@ _llgo_0: _llgo_1: ; preds = %_llgo_0 store i1 true, ptr @"main.init$guard", align 1 + call void @"github.com/goplus/llgo/cl/internal/linktarget.init"() br label %_llgo_2 _llgo_2: ; preds = %_llgo_1, %_llgo_0 @@ -34,9 +41,31 @@ _llgo_0: call void @main.init() call void @"github.com/goplus/llgo/cl/internal/linktarget.F"(ptr @0, ptr @1, ptr @2, ptr @3) call void @"github.com/goplus/llgo/cl/internal/linktarget.F"(ptr @4, ptr @5, ptr @6, ptr @7) + %2 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64 16) + %3 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %4 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %3, i32 0, i32 0 + store ptr @8, ptr %4, align 8 + %5 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %3, i32 0, i32 1 + store i64 5, ptr %5, align 4 + %6 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %3, align 8 + call void @"github.com/goplus/llgo/cl/internal/linktarget.(*m).setInfo"(ptr %2, %"github.com/goplus/llgo/internal/runtime.String" %6) + %7 = load %main.m, ptr %2, align 8 + %8 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/cl/internal/linktarget.m.info"(%main.m %7) + call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %8) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10) ret i32 0 } declare void @"github.com/goplus/llgo/cl/internal/linktarget.F"(ptr, ptr, ptr, ptr) +declare void @"github.com/goplus/llgo/cl/internal/linktarget.(*m).setInfo"(ptr, %"github.com/goplus/llgo/internal/runtime.String") + +declare void @"github.com/goplus/llgo/cl/internal/linktarget.init"() + declare void @"github.com/goplus/llgo/internal/runtime.init"() + +declare ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64) + +declare void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String") + +declare void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8) diff --git a/cl/_testrt/struct/out.ll b/cl/_testrt/struct/out.ll index 2888d80f..6373ceb2 100644 --- a/cl/_testrt/struct/out.ll +++ b/cl/_testrt/struct/out.ll @@ -8,7 +8,7 @@ source_filename = "main" @__llgo_argc = global ptr null @__llgo_argv = global ptr null -define void @"(main.Foo).Print"(%main.Foo %0) { +define void @main.Foo.Print(%main.Foo %0) { _llgo_0: %1 = alloca %main.Foo, align 8 %2 = call ptr @"github.com/goplus/llgo/internal/runtime.Zeroinit"(ptr %1, i64 8) @@ -27,10 +27,10 @@ _llgo_2: ; preds = %_llgo_1, %_llgo_0 ret void } -define void @"(*main.Foo).Print"(ptr %0) { +define void @"main.(*Foo).Print"(ptr %0) { _llgo_0: %1 = load %main.Foo, ptr %0, align 4 - call void @"(main.Foo).Print"(%main.Foo %1) + call void @main.Foo.Print(%main.Foo %1) ret void } @@ -70,7 +70,7 @@ _llgo_0: store i32 100, ptr %4, align 4 store i1 true, ptr %5, align 1 %6 = load %main.Foo, ptr %3, align 4 - call void @"(main.Foo).Print"(%main.Foo %6) + call void @main.Foo.Print(%main.Foo %6) ret i32 0 } diff --git a/cl/import.go b/cl/import.go index 0ed5c55d..165b2f8c 100644 --- a/cl/import.go +++ b/cl/import.go @@ -241,20 +241,21 @@ func trecvTypeName(t ast.Expr, indices ...ast.Expr) string { // inPkgName: // - func: name -// - method: (T).name, (*T).name +// - method: T.name, (*T).name // fullName: // - func: pkg.name -// - method: (pkg.T).name, (*pkg.T).name +// - method: pkg.(T).name, pkg.(*T).name func astFuncName(pkgPath string, fn *ast.FuncDecl) (fullName, inPkgName string) { name := fn.Name.Name if recv := fn.Recv; recv != nil && len(recv.List) == 1 { - tPrefix := "(" + var method string t := recv.List[0].Type if tp, ok := t.(*ast.StarExpr); ok { - t, tPrefix = tp.X, "(*" + method = "(*" + recvTypeName(tp.X) + ")." + name + } else { + method = recvTypeName(t) + "." + name } - tSuffix := recvTypeName(t) + ")." + name - return tPrefix + pkgPath + "." + tSuffix, tPrefix + tSuffix + return pkgPath + "." + method, method } return pkgPath + "." + name, name } @@ -263,13 +264,14 @@ func typesFuncName(pkgPath string, fn *types.Func) (fullName, inPkgName string) sig := fn.Type().(*types.Signature) name := fn.Name() if recv := sig.Recv(); recv != nil { - tPrefix := "(" + var method string t := recv.Type() if tp, ok := t.(*types.Pointer); ok { - t, tPrefix = tp.Elem(), "(*" + method = "(*" + tp.Elem().(*types.Named).Obj().Name() + ")." + name + } else { + method = t.(*types.Named).Obj().Name() + "." + name } - tSuffix := t.(*types.Named).Obj().Name() + ")." + name - return tPrefix + pkgPath + "." + tSuffix, tPrefix + tSuffix + return pkgPath + "." + method, method } return pkgPath + "." + name, name } @@ -277,7 +279,7 @@ func typesFuncName(pkgPath string, fn *types.Func) (fullName, inPkgName string) // TODO(xsw): may can use typesFuncName // fullName: // - func: pkg.name -// - method: (pkg.T).name, (*pkg.T).name +// - method: pkg.(T).name, pkg.(*T).name func funcName(pkg *types.Package, fn *ssa.Function) string { sig := fn.Signature return llssa.FuncName(pkg, fn.Name(), sig.Recv()) diff --git a/cl/internal/linktarget/foo.go b/cl/internal/linktarget/foo.go index b9f5abc3..b3eb725c 100644 --- a/cl/internal/linktarget/foo.go +++ b/cl/internal/linktarget/foo.go @@ -7,3 +7,17 @@ import ( func F(a, b *c.Char) { c.Printf(c.Str("a: %s, b: %s\n"), a, b) } + +var _ m + +type m struct { + s string +} + +func (t m) info() string { + return t.s +} + +func (t *m) setInfo(s string) { + t.s = s +} diff --git a/cl/internal/linktarget/out.ll b/cl/internal/linktarget/out.ll index 02f75a17..384bde3f 100644 --- a/cl/internal/linktarget/out.ll +++ b/cl/internal/linktarget/out.ll @@ -1,6 +1,9 @@ ; ModuleID = 'github.com/goplus/llgo/cl/internal/linktarget' source_filename = "github.com/goplus/llgo/cl/internal/linktarget" +%"github.com/goplus/llgo/internal/runtime.String" = type { ptr, i64 } +%"github.com/goplus/llgo/cl/internal/linktarget.m" = type { %"github.com/goplus/llgo/internal/runtime.String" } + @"github.com/goplus/llgo/cl/internal/linktarget.init$guard" = global ptr null @0 = private unnamed_addr constant [14 x i8] c"a: %s, b: %s\0A\00", align 1 @@ -23,4 +26,30 @@ _llgo_2: ; preds = %_llgo_1, %_llgo_0 ret void } +define %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/cl/internal/linktarget.m.info"(%"github.com/goplus/llgo/cl/internal/linktarget.m" %0) { +_llgo_0: + %1 = alloca %"github.com/goplus/llgo/cl/internal/linktarget.m", align 8 + %2 = call ptr @"github.com/goplus/llgo/internal/runtime.Zeroinit"(ptr %1, i64 16) + store %"github.com/goplus/llgo/cl/internal/linktarget.m" %0, ptr %2, align 8 + %3 = getelementptr inbounds %"github.com/goplus/llgo/cl/internal/linktarget.m", ptr %2, i32 0, i32 0 + %4 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %3, align 8 + ret %"github.com/goplus/llgo/internal/runtime.String" %4 +} + +define %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/cl/internal/linktarget.(*m).info"(ptr %0) { +_llgo_0: + %1 = load %"github.com/goplus/llgo/cl/internal/linktarget.m", ptr %0, align 8 + %2 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/cl/internal/linktarget.m.info"(%"github.com/goplus/llgo/cl/internal/linktarget.m" %1) + ret %"github.com/goplus/llgo/internal/runtime.String" %2 +} + +define void @"github.com/goplus/llgo/cl/internal/linktarget.(*m).setInfo"(ptr %0, %"github.com/goplus/llgo/internal/runtime.String" %1) { +_llgo_0: + %2 = getelementptr inbounds %"github.com/goplus/llgo/cl/internal/linktarget.m", ptr %0, i32 0, i32 0 + store %"github.com/goplus/llgo/internal/runtime.String" %1, ptr %2, align 8 + ret void +} + declare i32 @printf(ptr, ...) + +declare ptr @"github.com/goplus/llgo/internal/runtime.Zeroinit"(ptr, i64) diff --git a/internal/abi/llgo_autogen.lla b/internal/abi/llgo_autogen.lla index 35581290..a0a57985 100644 Binary files a/internal/abi/llgo_autogen.lla and b/internal/abi/llgo_autogen.lla differ diff --git a/internal/runtime/llgo_autogen.lla b/internal/runtime/llgo_autogen.lla index 841d6f08..8c7da6ae 100644 Binary files a/internal/runtime/llgo_autogen.lla and b/internal/runtime/llgo_autogen.lla differ diff --git a/ssa/type.go b/ssa/type.go index 6cab5978..e7e4c65e 100644 --- a/ssa/type.go +++ b/ssa/type.go @@ -479,16 +479,17 @@ func PathOf(pkg *types.Package) string { // FuncName: // - func: pkg.name -// - method: (pkg.T).name, (*pkg.T).name +// - method: pkg.T.name, pkg.(*T).name func FuncName(pkg *types.Package, name string, recv *types.Var) string { if recv != nil { var tName string t := recv.Type() if tp, ok := t.(*types.Pointer); ok { - t, tName = tp.Elem(), "*" + tName = "(*" + tp.Elem().(*types.Named).Obj().Name() + ")" + } else { + tName = t.(*types.Named).Obj().Name() } - tName += NameOf(t.(*types.Named)) - return "(" + tName + ")." + name + return PathOf(pkg) + "." + tName + "." + name } ret := FullName(pkg, name) if ret == "main.main" {