From 2e3cc497822db9850bea2803e37830c614f89448 Mon Sep 17 00:00:00 2001 From: xushiwei Date: Sun, 12 May 2024 12:14:26 +0800 Subject: [PATCH] llgo/ssa: NewPyFunc add param doInit --- cl/_testpy/math/out.ll | 2 +- cl/compile.go | 12 ++++++------ py/math/llgo_autogen.lla | Bin 557 -> 563 bytes py/os/llgo_autogen.lla | Bin 554 -> 560 bytes ssa/decl.go | 8 +++++--- ssa/ssa_test.go | 4 ++-- 6 files changed, 14 insertions(+), 12 deletions(-) diff --git a/cl/_testpy/math/out.ll b/cl/_testpy/math/out.ll index 4fd8d274..f5feead3 100644 --- a/cl/_testpy/math/out.ll +++ b/cl/_testpy/math/out.ll @@ -1,7 +1,7 @@ ; ModuleID = 'math' source_filename = "math" -@__llgo_py.math.sqrt = linkonce global ptr null +@__llgo_py.math.sqrt = external global ptr @"math.init$guard" = global ptr null @__llgo_py.math = linkonce global ptr null @0 = private unnamed_addr constant [5 x i8] c"math\00", align 1 diff --git a/cl/compile.go b/cl/compile.go index 1b1a97bd..109126f4 100644 --- a/cl/compile.go +++ b/cl/compile.go @@ -176,7 +176,7 @@ func (p *context) compileMethods(pkg llssa.Package, typ types.Type) { for i, n := 0, mthds.Len(); i < n; i++ { mthd := mthds.At(i) if ssaMthd := prog.MethodValue(mthd); ssaMthd != nil { - p.compileFuncDecl(pkg, ssaMthd) + p.compileFuncDecl(pkg, ssaMthd, false) } } } @@ -211,13 +211,13 @@ var ( argvTy = types.NewPointer(types.NewPointer(types.Typ[types.Int8])) ) -func (p *context) compileFuncDecl(pkg llssa.Package, f *ssa.Function) (llssa.Function, llssa.PyFunction, int) { +func (p *context) compileFuncDecl(pkg llssa.Package, f *ssa.Function, call bool) (llssa.Function, llssa.PyFunction, int) { pkgTypes, name, ftype := p.funcName(f, true) if ftype != goFunc { if ftype == pyFunc { // TODO(xsw): pyMod == "" fnName := pysymPrefix + p.pyMod + "." + name - return nil, pkg.NewPyFunc(fnName, f.Signature), pyFunc + return nil, pkg.NewPyFunc(fnName, f.Signature, call), pyFunc } return nil, nil, ignoredFunc } @@ -292,7 +292,7 @@ func (p *context) funcOf(fn *ssa.Function) (aFn llssa.Function, pyFn llssa.PyFun pkg := p.pkg fnName := pysymPrefix + mod + "." + name if pyFn = pkg.PyFuncOf(fnName); pyFn == nil { - pyFn = pkg.NewPyFunc(fnName, fn.Signature) + pyFn = pkg.NewPyFunc(fnName, fn.Signature, true) return } } @@ -762,7 +762,7 @@ func (p *context) compileFunction(v *ssa.Function) (goFn llssa.Function, pyFn ll // v.Pkg == nil: means auto generated function? if v.Pkg == p.goPkg || v.Pkg == nil { // function in this package - goFn, pyFn, kind = p.compileFuncDecl(p.pkg, v) + goFn, pyFn, kind = p.compileFuncDecl(p.pkg, v, true) if kind != ignoredFunc { return } @@ -881,7 +881,7 @@ func NewPackage(prog llssa.Program, pkg *ssa.Package, files []*ast.File) (ret ll // Do not try to build generic (non-instantiated) functions. continue } - ctx.compileFuncDecl(ret, member) + ctx.compileFuncDecl(ret, member, false) case *ssa.Type: ctx.compileType(ret, member) case *ssa.Global: diff --git a/py/math/llgo_autogen.lla b/py/math/llgo_autogen.lla index 56d53f34ef4070230e22a9445888ebbbf7782100..7c9261cd20f8f5f5f93d81bbf0a054f81dcb7305 100644 GIT binary patch delta 507 zcmZ3>vYDkmz?+#xgn@y9gJD_Xnuu32`x5FI85k^C7#R2&WEgUC((~gJOH1<8Q}gt4 zazaBm8JMp-I;7nM;?fFk21b^zK-FLamQD`LK4c)$djGSwUg{#Ji&>H#MjsOO?RdWJ z>z!n_v2Cg6bhSl2f4|?|5|)14ti9HA^1bSFC+nw|F!Il`JQ@DIfc@| z>MdP;Ea+KP%)8^PTW8y?++r;0f6b}LmAg;(;Co$0#nUPuwLN#r|C}25HBHCt)7+=yS!n9Y`b{57xUB^?i=SXx|4qi#kt3ul=3tA!vFlESH?j^sSajoH0>}F$oDyd_ z9nQN?m}Mj|d4u1#`ETbhVpzha8lcbO8LYSP`VJrKVxQWInTL;_XVNSTOT5zT)zUWg zYFo8`w#ikPV4pW=2{50Hl)i~bvXx2ngRfX#K+s-9l8|6|oOUm!gJ+9mO(p2Qp z2M^OfUdIZe?{{8P*>`NoGvUWJi#P4uefs#{RT^72dK#Pjf4AVD2yef7@Z`?_OFEC7 u3!KPbztPx}U&{VA?@9FlZ$>6LW-O68`8J~_({;zmY)p!5CxG$AzyJXL2--RT delta 501 zcmdnYvX-Sjz?+#xgn@y9gJEXOnuufXi;h(?GBDV&Ffi~l$S~yOr02&cmX_qFr{?M9 zjW-Xl*fcnzD9h%7)N6hg>%{Kjg3rkT#gB*l@vJfGhaH z;}xFY=D)3XXN<^HfA~d7pyDV?%i7aVGTsE0%Ny_bG1JQZ)u#}v;5+; z*y*-1-$mwlsh3vt)PB7Z?jK{Sp32&{cRjD{u4fM4Mf%EXZO+A2aZS$FNVzyK>&xVx zv}HSm_j;D~dLC9UPHu9oE*J0Lof@f``{~=&e+LeyY0AF!U#2*D?$VbXvWuMN|4R~X nwC>&i*6js%fHxzP95a?^ocxeclPSn@G7pm?+aX{~F)#oC?{nB- diff --git a/py/os/llgo_autogen.lla b/py/os/llgo_autogen.lla index e37b4105076cc8dc45e5ec49cc4aa74d58dee5af..a8378f7bad00b6945832c09bb27594f0b9c86aee 100644 GIT binary patch delta 504 zcmZ3*vVo;Oz?+#xgn@y9gJFH*nuz_1Gtbm8GBBvJFfi~l$S~yOr02&cmX_qFr{?M9 z#%`<>-S$>2d}6wCR=}0QxVzpLap2B zd#>T8B|8>vN=dQw)%g3pFTQf>w#Eu&{#iTApVfOr9a{WwtI%uq9qoa7ccbUFo)HPm z^9l{07__tVRBg&C!IeI_Gd;|MIDNSrS?|TO$|PmX&5Z$gty*38+s z=wrz?vF#=A{MngST;!fBcW;7qeo^`i?Z`kTqkN;oCeusD$;?cOY)65S#lQdn6I$3> delta 498 zcmdnMvWlfXz?+#xgn@y9gJF5hnuw~!4wuUq85p!!7#R2&WEgUC((~gJOH1<8Q}gt4 zazaBm8JIII9n!LaxU_9=|W;BrQ9= zccv~3Ss!J{ z$oh)cb;TOSs|u5@MjnjN%FOR-lajNT8h`Y7T6%0yd6eYN#bFMM|LE8(pCg?Rb#?YW91#oZ>(N&Zo{@)9PcxImDjzr znZw62$4$Rv&mP6{cg5*?;hQ!w9lw*_#uv5w7<1$0PXEU_3I@@;+Z@DXJKT(y?cESO1PZ{x;CcGH0pkSz0&5D)NXWRhdX5{HxTF={epT2AI