fixes #4703
This commit is contained in:
parent
d66a920447
commit
5d6c2f89de
2 changed files with 34 additions and 1 deletions
|
|
@ -1985,10 +1985,19 @@ proc genObjConstr(p: PProc, n: PNode, r: var TCompRes) =
|
||||||
if i > 1: add(initList, ", ")
|
if i > 1: add(initList, ", ")
|
||||||
var it = n.sons[i]
|
var it = n.sons[i]
|
||||||
internalAssert it.kind == nkExprColonExpr
|
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
|
var f = it.sons[0].sym
|
||||||
if f.loc.r == nil: f.loc.r = mangleName(f, p.target)
|
if f.loc.r == nil: f.loc.r = mangleName(f, p.target)
|
||||||
fieldIDs.incl(f.id)
|
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])
|
addf(initList, "$#: $#" | "'$#' => $#" , [f.loc.r, a.res])
|
||||||
let t = skipTypes(n.typ, abstractInst + skipPtrs)
|
let t = skipTypes(n.typ, abstractInst + skipPtrs)
|
||||||
createObjInitList(p, t, fieldIDs, initList)
|
createObjInitList(p, t, fieldIDs, initList)
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
discard """
|
discard """
|
||||||
output: '''123
|
output: '''123
|
||||||
|
2 9
|
||||||
|
2 9
|
||||||
'''
|
'''
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
@ -11,3 +13,25 @@ proc changeArray(a: var MyArray) =
|
||||||
var a : MyArray
|
var a : MyArray
|
||||||
changeArray(a)
|
changeArray(a)
|
||||||
echo a[0]
|
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]
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue