diff options
author | ringabout <43030857+ringabout@users.noreply.github.com> | 2024-05-17 05:27:08 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-16 23:27:08 +0200 |
commit | b87732b5f13a39b00a82713a465db6c2f0fef40a (patch) | |
tree | f2fd7e09a0e0459cc6aebccdf5de4fc53274a848 /compiler | |
parent | 0ba932132e56d30de7af268f3268b3141ad22bc8 (diff) | |
download | Nim-b87732b5f13a39b00a82713a465db6c2f0fef40a.tar.gz |
fixes #16671; openarray conversion for object construction (#23618)
fixes #16671 related to https://github.com/nim-lang/Nim/pull/18911
Diffstat (limited to 'compiler')
-rw-r--r-- | compiler/ccgexprs.nim | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/compiler/ccgexprs.nim b/compiler/ccgexprs.nim index 9312933a4..0620b1fb8 100644 --- a/compiler/ccgexprs.nim +++ b/compiler/ccgexprs.nim @@ -1497,8 +1497,7 @@ proc handleConstExpr(p: BProc, n: PNode, d: var TLoc): bool = proc genFieldObjConstr(p: BProc; ty: PType; useTemp, isRef: bool; nField, val, check: PNode; d: var TLoc; r: Rope; info: TLineInfo) = - var tmp2: TLoc = default(TLoc) - tmp2.r = r + var tmp2 = TLoc(r: r) let field = lookupFieldAgain(p, ty, nField.sym, tmp2.r) if field.loc.r == "": fillObjectFields(p.module, ty) if field.loc.r == "": internalError(p.config, info, "genFieldObjConstr") @@ -1513,7 +1512,12 @@ proc genFieldObjConstr(p: BProc; ty: PType; useTemp, isRef: bool; nField, val, c tmp2.k = d.k tmp2.storage = if isRef: OnHeap else: d.storage tmp2.lode = val - expr(p, val, tmp2) + if nField.typ.skipTypes(abstractVar).kind in {tyOpenArray, tyVarargs}: + var tmp3 = getTemp(p, val.typ) + expr(p, val, tmp3) + genOpenArrayConv(p, tmp2, tmp3, {}) + else: + expr(p, val, tmp2) proc genObjConstr(p: BProc, e: PNode, d: var TLoc) = # inheritance in C++ does not allow struct initialization so |