This commit is contained in:
Andreas Rumpf
2017-06-29 18:37:53 +02:00
parent d66a920447
commit 5d6c2f89de
2 changed files with 34 additions and 1 deletions

View File

@@ -1985,10 +1985,19 @@ proc genObjConstr(p: PProc, n: PNode, r: var TCompRes) =
if i > 1: add(initList, ", ")
var it = n.sons[i]
internalAssert it.kind == nkExprColonExpr
gen(p, it.sons[1], a)
let val = it.sons[1]
gen(p, val, a)
var f = it.sons[0].sym
if f.loc.r == nil: f.loc.r = mangleName(f, p.target)
fieldIDs.incl(f.id)
let typ = val.typ.skipTypes(abstractInst)
if (typ.kind in IntegralTypes+{tyCstring, tyRef, tyPtr} and
mapType(p, typ) != etyBaseIndex) or needsNoCopy(p, it.sons[1]):
discard
else:
useMagic(p, "nimCopy")
a.res = "nimCopy(null, $1, $2)" % [a.rdLoc, genTypeInfo(p, typ)]
addf(initList, "$#: $#" | "'$#' => $#" , [f.loc.r, a.res])
let t = skipTypes(n.typ, abstractInst + skipPtrs)
createObjInitList(p, t, fieldIDs, initList)

View File

@@ -1,5 +1,7 @@
discard """
output: '''123
2 9
2 9
'''
"""
@@ -11,3 +13,25 @@ proc changeArray(a: var MyArray) =
var a : MyArray
changeArray(a)
echo a[0]
# bug #4703
# Test 1
block:
let ary1 = [1, 2, 3]
var ary2 = ary1
ary2[1] = 9
echo ary1[1], " ", ary2[1]
# Test 2
block:
type TestObj = ref object of RootObj
ary2: array[3, int]
let ary1 = [1, 2, 3]
var obj = TestObj(ary2:ary1)
obj.ary2[1] = 9
echo ary1[1], " ", obj.ary2[1]