[Cpp] Fixes an issue when mixing hooks and calls (#23428)

This commit is contained in:
Juan M Gómez
2024-03-21 07:48:14 +00:00
committed by GitHub
parent 50c1e93a74
commit 33902d9dbb
3 changed files with 19 additions and 2 deletions

View File

@@ -369,7 +369,10 @@ proc genSingleVar(p: BProc, v: PSym; vn, value: PNode) =
line(p, cpsStmts, decl)
else:
tmp = initLocExprSingleUse(p, value)
lineF(p, cpsStmts, "$# = $#;\n", [decl, tmp.rdLoc])
if value.kind == nkEmpty:
lineF(p, cpsStmts, "$#;\n", [decl])
else:
lineF(p, cpsStmts, "$# = $#;\n", [decl, tmp.rdLoc])
return
assignLocalVar(p, vn)
initLocalVar(p, v, imm)

View File

@@ -1208,6 +1208,7 @@ proc genProcAux*(m: BModule, prc: PSym) =
elif sfConstructor in prc.flags:
resNode.sym.loc.flags.incl lfIndirect
fillLoc(resNode.sym.loc, locParam, resNode, "this", OnHeap)
prc.loc.r = getTypeDesc(m, resNode.sym.loc.t, dkVar)
else:
fillResult(p.config, resNode, prc.typ)
assignParam(p, res, prc.typ.returnType)

View File

@@ -115,4 +115,17 @@ type Foo {.exportc.} = object
proc makeFoo(): Foo {.used, constructor, nodecl.} = discard
echo $Foo()
echo $Foo()
type Boo = object
proc `=copy`(dest: var Boo; src: Boo) = discard
proc makeBoo(): Boo {.constructor.} = Boo()
proc makeBoo2(): Boo = Boo()
block:
proc main =
var b = makeBoo()
var b2 = makeBoo2()
main()