From 5b0965dc53e630509918c0fc2e19048b47c14660 Mon Sep 17 00:00:00 2001 From: visualfc Date: Wed, 29 May 2024 09:36:53 +0800 Subject: [PATCH] ssa: update linkname go style --- c/sqlite/llgo_autogen.lla | Bin 852 -> 850 bytes c/sqlite/sqlite.go | 2 +- cl/_testdata/method/out.ll | 8 ++++---- cl/_testdata/ptrmthd/out.ll | 4 ++-- cl/_testgo/eface/out.ll | 4 ++-- cl/_testgo/errors/out.ll | 6 +++--- cl/_testgo/struczero/out.ll | 14 +++++++------- cl/_testrt/intgen/out.ll | 4 ++-- cl/_testrt/linkname/in.go | 14 ++++++++++++++ cl/_testrt/linkname/out.ll | 29 +++++++++++++++++++++++++++++ cl/_testrt/struct/out.ll | 8 ++++---- cl/import.go | 24 +++++++++++++----------- cl/internal/linktarget/foo.go | 14 ++++++++++++++ cl/internal/linktarget/out.ll | 29 +++++++++++++++++++++++++++++ internal/abi/llgo_autogen.lla | Bin 3560 -> 3555 bytes internal/runtime/llgo_autogen.lla | Bin 12615 -> 12615 bytes ssa/type.go | 9 +++++---- 17 files changed, 129 insertions(+), 40 deletions(-) diff --git a/c/sqlite/llgo_autogen.lla b/c/sqlite/llgo_autogen.lla index becb6e8037a736718982368927d8f0137f268d55..31c3b7478c4d3c2f83de3155a581dcb6a026524c 100644 GIT binary patch delta 768 zcmV+b1ONQg2GRyOP)h>@6aWAK2mqu+zgXJmc(R@X003MM000jF8~|)=XK!C&b#!lM zWo|BPY*kbV00XldS!T2wS&=y%e;7pxuO!TjDov$!(M2_tM(U!Qh=7M$a%^f$)M_;U zUK;}e@*)Y%YO)~-_i^qyCpYE+e4}xW;n&aLBe+Qr|CKMt5nW9Zn&Ld0V4ToNG|7Hr z#NmyW(VRta@q#cU;R=cz{YZ|kX~w=7L^xz5#1obij#hB|%o!qyF3R%1e<=j7AmwZX z(98#Kn)Z0C)ff@PKO}j`Vp$@=bQxk<0+1YIO^e|RBCz=4crEkx3uA;@V{yqi(@mLX z*cN!z7BX^S-)jIEj%b8w7z5Rge>sG61EaSfpD?D;Pu-Lf1XgPviK?E5iq>W|eQ_36E4CIPh-8rQb%^uM&?!Y3C1s{J0(P0>97>V_>b)T}aY}Z#LY&K({^9EN z#7f5!rrYJ-8;W~>FZYYJ+os>!0woJfx8?B8mScLl9RB~2!@PY~e_UAO?+m6PgBxj1 zUp`k768_;Vj7q}JLupr<4p2+#V$9^`6?daz=ZeytN)hC(`A+Ypite`e{8H`N#$pW* z219x9q|x-ALb}f7Gw3l{N3Sjp?6l%)8T#8T2&fnxeReA?2xDH@l{>>w|N-=uSG` zS9D06OD1X*9OG~aF)&mcxAWQ2%Kpwh=>2*CLdrN3Sj#Gs%ZyV7Wl!M=cscks>I$WM z2}(g}1FsZPYNe!$uyE$SrxB|Yan6sqQDf&bLc!RfpmL9oD{Ai@%xD}zIvIV^cK7O+ y>2)(Z>Hh#wO928N0~7!N00;o2M88@6aWAK2mn2^u~@X7`5d4E003MM000jF8~|)=XK!C&b#!lM zWo|BPY*kbV00Z@CM`rhEN0B)lf2g8_R}yAMl~So)bWu&Ek-F$6BH*Ex9Ge;wwHnR8 z*Tz7Ayhwtwnr!mmKF&SoaAO|9cN*sye)|GGfx86p-}!1B(e)&uDbBMA#tEH7lk5*h z9NuXe%~=GOF9<^tuA#`$Pvq#DW*mw^ghNI`JYhNEXbs2DoFS6vqAdTHe?ssIQqD#I z&3y2tX^T^>#)u&PA<07)%MuBus}Rc)faDl!S`1$hfyECC-TZi}+E>O1wd7mInQqE7 z!?wVywv=&8`#}T1a6}_a!x$jX9RU?H0wG2T0lo}yML-l{g=3*gdrMdpHARvrVTm{f zxyp96w;E|RzleGRr^kOve<3-Ba|@%lAfGX&(J$SU5(HLj9*L@+hlxq?)B}})=y*Cv1{z2}S8@Elrw*yKRnC{BqT`b4+d^!Bf#oXbUb z*73fgL*iU9QKR4(hbxGIq1w2e?~YdXcOF3R*CP;8#+krcR*_t0oH8hT3Qxf6!M9OY zDBWvN3Q8MzrI1o9C0&GtGY>tDSe=MVZstafz0U{*W5P}y>~RDaRljP^hw*_ zt6!$q&FrNA2T)4^0v-bt0000806nv@ShSt_9H5i@0xbjeXh)MQ10V+J0ssI206X1a A4FCWD 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 35581290bff118b40261309655d30041f4847711..a0a579856ac4774ed1c5c194cd6daf14110046f5 100644 GIT binary patch delta 3485 zcmV;O4Px@>8{->)P)h>@6aWAK2mpCRzgQKj6qPRx0017|000jF8~|)=XK!C&b#!lM zWo|BPY*kbV00U(kS!QP&S!Q*33jhHG^#K3?1QY-O0PUUeZ`(E&$A9--WFz!!vs3jQ;CLDq`Fo~v1?oFN9l}}((hHBf2)k9a@xLJMz1;@ z79~;k&CNDQ3m3YH*VjQ@IAOAl6vH9P{acJx5%Jx<3?xrarBtM)i2Xt9U&uuipJ zKPvwWk2UP@mYa?@=<*lqONXz1IZ0^otAc;=#A{zp99sHf9ol&1D^S4~zF4OQ)xDe$ zyzIsDfmFTK#0_2bvI*jmRJ{Thc-5=IW++uJ=L4>Kv2Z$8z5U3%p`AWbE<)2y#~BM+ z05;fwv;ct+S_{CA9f%gd>DbW%u!wM40OthN0PUQ$%8ms*rsW-p4qD@};Aw{!dL*V$wMQA~iAz2bd#LVX!QG9EKQbS@ z0%XDEK{AlU3a$lNAZ1<3e%?wke8|#ZnSBc4ZJ#)uGb0tKLWh6Z z-0a+jluFEXS_m=j*olMdkOsxF1w?x7j&@BW-#eZE`@y+SLu&IMtFufh9mznqCY9#2 zXP_~a${QCQo>X#FUBjBzG^|;LX&V=M)yyB~A{E0lldyQw>uH6_)y1?^$UX+~Cag~C z>72Ca-(2e7Iql!oZWy$8WU6ybibsFE`Xb+^;x@|r^=H{L{=V~mO#gU3XMgdW_kvKk z=$Qm}Qy{cNSk1JKL>%N);Ig0snV|@Rj1E`|greyv0`~GH3-T7!p+LeG=Yy8Cpd$w& zW-&H)WGpBkoPfnBL8U9GZy6V@7!#yi1w~?7sA5FW5*5^o4lhnIj!;=j0pfp&3sQ_X zREmPSvT+fLGr`MGP=V0_?81C$PA&lC2oHR$S=e?88T z)VCrTc!jG(XDBtUKnPsrg7E+N*C;0pjuaCgsyhMBM4IO3VeU;RJ>qFxSCfW z1+99)erCMx6}TWPUoaNawXZ-0UHyVR>hSfiz!F*kD}g-m8dzWst%AXBZM+T^x!@~d zuxo>AVSy368U_V~l*&4^z`dmMk-jK~Hr&M5I2j5;GQLd!E?Kppj&zI32_o}k$n-|$2vV?(+E z2OpGnB~pTmSKu*(QLh9-mgFliCZK*Lu)+#hU~e<8UvW;V-8<&*5 z)iTMWVuYbi(jR|Bvo_M6Kw2idkTcMPrJPCk z=Cq=&O)_*Qs1{`A{pR!sFiY*CAVVjqSI?8wr?p<|W^oU)jiWuYXkxP$BW7J=MD;Bx z)LI^!Fn_KBhu0D~rdm9nki>^l<`~{%6j|nYwK9ixRxWcS>lxh@wAjp4Cv0_C3V;SI za@qmQq9A{7GrV~{!kb(9iTE8*UTx=LxtIb*1#OLBKb)(YKG64$w3?bwl>XEW*UO;K z3564B74GdVoi}9dO}0*V!D!M}x)-%Qv=xN4B9AoHZID-DNG^+gEgQ{iogyq)BD}tS z#OomIb)#XfU-UR^rm@&Zh_Mh`$`werC7$k>Ag+I0)AwQ4_a0CSYoi@jw4|93X`Ko6 zUBpvaeYT09Qzis>pVjS@s zOFr@+_-zLYNvTQDV@pzaf^6ZPC?uSHMsF;=`}L)FBCoxZ#*~odKcbL7n(Zk=ij@RH zSOy^qDP*73TXTrGv@RzR(wKd*G(r^eNV9)EMObmI1gJyv(y5=m{zM@}S- z#a+Rq3b|w-LMyq%?RiIcz9!#YPOavFySu@54|A5=U2k9ojd;~ZZiNvZ=$*-xjayYV zY+%s%nwK}ixR4Vhwv17>(dRH-M@f`Lv`6%JbLEeAs(#u&?1r<_KAyY#)U+lw&e(sV z9zBG9oUQ5|udqu7A?&)AmEG>5NU&PHz73cE;m^j8%a}durNEN12-ly!cMLgP2o++E zTMIh+GvTgn@mtz5t+!>?LwoOLvDo#6{(f3VtBxJcbI92X zxtSA3+6Sup$-cSS2I=ZdTt3@nR9PBq=v>A!>Mqz3Crh`XnGUq)eywy%#`1qGAh%o3 z<@@Hk6#8Mzt}9_|ZQt-Sv7~twzWbKegR5@s!Ro%Z+qYT-zJb(`t)hNkfXvISJ*sTd zGLJqf`fQd*9;?OK1iD$)X<0--wcj4P`NYDrQ$x0jfrrg-nFYQv*pMxw?k^H9Tny{{ zaM!bO9(^DV7uBH8c@5bxT6cf;?T=)-_CRjEc3S4(q;Po!z2V!CEutQ|>a_O9EZoCg zZ8n5H>NR8oT6~7i)p*XuWb}kSz%gW7Yd!0Ni=Xf(8-{EX^#Cg2YK@@FI7l%e)Wnl= zJ=O^>di6?gC1zYcW!3y~G5SAHO928N0~7!N00;niM88-SsuYzk4FHpr4J!g=8@6aWAK2mrZ2zgXGXX~8rN0017|000jF8~|)=XK!C&b#!lM zWo|BPY*kbV00UkWS!Q4qS!Q*33jhHG^#K3?1QY-O0PUUcZ`(E+$KU&}5P}731|u~k z%XT*G(4p4>!`+4gySq2LqEKwr6;6?JvfRsB^nX7}vPg=Ne+Yk=8~>0*e#qx}_Hh*PEA7l7(p!#4m%}=-bhDvrCuZ z`wvkZCc#}ukGtq_+{I{g+2wcFKc#8#=Rf|u4=?DMGy1Rd#p!lranRVg&(i%%G@CkK zJ6=}0B0Y4xfAN1@`m(71|Ak$}`MST@)0atiNfzCO*S}|Jl&mlIhj%ESbRaLKaxGtf z3=(a&Di{2Dmn?NIr~oI9mVJ&;Yk~5RMgyop`6YkzAy|f%$W;9ef+jE0ufe?;i!EO2 z#>LEz%nD=dUZ^npxLGNcsm(&iLTNf)`E8bJ;^=&-qM?7RT`Ws?%k1YUj7?xI%%;b| z5m7Agxmekj)#jfG{o&mvQLdE$q)S2bL#k_)6uXwSew0pMDeYd>_;<=^Dx>YoW%R1k zVNnug->i2*TA0u}-rNRpVT8#pjz_O1^uzl!`V?fLvrF>v)#`n)TBXi%lWemf$(%o2 z=YcxJcg}zE;=6xOCbYak9IX?Fj9!ta4<;TvI=g;YZYXW%FU~|dk*j#3y8|a0t-=pc z5*ESn)y0eNl*WHo*FWW_xp|)hF`9*RN%OH-GYS1h^xuSn3OT(-<&80i~%E;tj_aVc|J_tH0 zwP>#ZBUHRIKN+KCkm;p z62`6VZ&9)u1|W4i6UuJf!m6Zk5NOoBGVS}mH z`ce6Nc&cuPm)x|!L8rf1TRMLB%Sl3$Ulo6hXP*0V;?UF=YtY6sUx5lf@x>Z7DDUNj z;At+MJ84XyNvauJGd+Rs?f z05~>BLU_5gzfD?ym0a$}Jt_28G@LB-Ys6ko)Cj{35uzb2}0i*|h$JU^+O-^0Y~CwN5!!K3n%4B z#GrbP1^Y8D>PUQ$%8ms*rsW-p4qD@}U}?t}dL*V$wMQA~nM*zrd#LVX!Q73DKQbS@ z0%XDDK{AlU3a$lNAf+YCRZ2JULpGs#M`hs zsi$+&qJDF!ewVa3wn~IN7UavpOn(^SUnHD%)>6la2$pP=Rp5}p_zxa0(-gSh*s+%Na)nu|^-GUdj+kAo>xm7aTQ=UP-L z!YnF*sI*T@%A3nfnb52E^lop<{YcSD!&|oP=}9OJoC;iNP#`lDrGe1_D-BRI0HuL( zv7j_S4GN?*a6V|I0orpQN&|mmV@GL#0>UW`j1p97fZCRErGYU)Dh*I1rj-Up1g$hc zt?2kl1LFu)8WbR&xzfORLzM=oDH~TBI1{|m05xZj(!lt@l?Ess$et(csWs^AmOmcn zMDkma3_QbCqBE2nS0Dt=a=~~2d9J|5LZ%BgE>Ny3GD2s&;2s3YcLjewb~0WtBwWrb zkb-8tU^_FO_X=E)nJ*ZN>D*VKg3f-y7IpmmS6~UvfR#X=c@8Wvhi1WGvo@Xwi(K%T zFxa#~xv;Rz%a<9DGFNNp&L3ZX2mF`i6ri zYy5oIK^>J9X-0e$?P-5#Ga?(jIHSa8FzSrJ2rbWm0d>@8`qF{!d4gtRe8Urwj1B1u z?0it#l}HILUV-}%M!gaUS(2~7n1K3~zzQp1fvwHFf+diFN?2ep#x*Q~3tYqk+tmP6 zEP*Cg#!^Cg?mCu09V=vkjoZAEC6ciqWq}PGrDX|}@M0F25#)dF4jbyhVI-1zwP;hX z3UOu|K4it76|R$Q@(PMJwwQ+U@ z&hldo^Y^=Ylwdb7Ak*~ZacvuI+o=OboaeMI$? z6xv!I8!&&a9EaE9IHp=Wo{+?clI9rRV-%U@c(pW#R#r}Pq}DUKD`>HqsgB#~FckoG zSmeANmPLO--llu=dbl^YvJ>$cP+o24VL6!sdIfEb;4qwW_|AgwJo)Mz^ALO^6CrLj z8q(@WTjo7jpFODDGUJ#JX!>N=p}Y$t^CE06rqT9-Tz_M6R%Bv>9T&X~Om>hKdZK_z zWVe5Uob1pZL3P6C8l1ss%oX|442JA!8Z#Kg$P5M{W@d{z0c1K6Q3x#un%r;ee}WiC z{Kk}z`~ko1Kp`kK33_Zw3Qv$tyc30hbEwf9Q}2F#>Yd1Q@1!v#WbuzE#E)iqN|$0K zfDjfzh(ZWC)atDE*XTd>snTJOHrgt*9lgu*B`^>fB4$?ap|*Xy%bndCgJ+S_l_=y z3!#F~acfRTe(5k2VMPE2-vp}wCs(W+yG z^B8jRLN4aSk@kV=ezI@YyC7X%h|_2Lh$>5i4V}waMBO_(;$-PAG*f~0*sp&TZpm04 z1?274bNaqHFNI!=*>xt2&Fvdr6HA&`;k$2XEnIbL3#@C~Gf+$!q#1<1VI z+EQhcE%WF~(dTA)WLYh)O`w})omYzps1CP>ZalHDc52A2VqmcuF0#Nk1{-qAsN0K# z3+KZ+FYbD7oJSYL;k+7jo!5Vm8%FESzQdkOw>^+subo$Oa8kIqg5L0L$StDox$3kI z`z+kzuC_LWF7+C616o`|=W48TG3h;_3pj?{)>>;_aQ+j%vSG+=qV7N?T&*5-83$=U z7iwdrT#tEzt6sIzn~52htE`$YSEK&}P)h*<9s?8r000O8xj?^I+1UeW!8DVN4J`s* P6qCFSAqIU700000gwC*X diff --git a/internal/runtime/llgo_autogen.lla b/internal/runtime/llgo_autogen.lla index 841d6f08bacb98eaa90f1a32eb682df17550c676..8c7da6aeba695b4097cc1eb5254a38f0592039fe 100644 GIT binary patch delta 11748 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 GATcNQnVLQT delta 11752 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

P?!0hB>0B!(C&=^A0*4j9=D`1d_dw$j%}@=X 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 K0#Ou`ATcL-+1!W# 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" {