mirror of
https://github.com/nim-lang/Nim.git
synced 2026-07-19 15:31:28 +00:00
fixes #4703
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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]
|
||||
|
||||
Reference in New Issue
Block a user