diff options
author | Araq <rumpf_a@web.de> | 2015-01-31 13:46:21 +0100 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2015-01-31 13:46:21 +0100 |
commit | 43e5e3ac22e359cf0c328e1c36627187c6c80efd (patch) | |
tree | fdc22e387d53d9a1630bcbc61adf501582023e85 /compiler | |
parent | 8f587e2eab7ff98b7d4ba23339baf4913a2ad219 (diff) | |
download | Nim-43e5e3ac22e359cf0c328e1c36627187c6c80efd.tar.gz |
fixes #2022
Diffstat (limited to 'compiler')
-rw-r--r-- | compiler/ccgexprs.nim | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/compiler/ccgexprs.nim b/compiler/ccgexprs.nim index 4372ca524..93bb5dbf5 100644 --- a/compiler/ccgexprs.nim +++ b/compiler/ccgexprs.nim @@ -215,6 +215,7 @@ proc asgnComplexity(n: PNode): int = else: discard proc optAsgnLoc(a: TLoc, t: PType, field: PRope): TLoc = + assert field != nil result.k = locField result.s = a.s result.t = t @@ -229,7 +230,7 @@ proc genOptAsgnTuple(p: BProc, dest, src: TLoc, flags: TAssignmentFlags) = flags - {needToCopy} else: flags - let t = skipTypes(dest.t, abstractInst) + let t = skipTypes(dest.t, abstractInst).getUniqueType() for i in 0 .. <t.len: let t = t.sons[i] let field = ropef("Field$1", i.toRope) @@ -336,6 +337,7 @@ proc genAssignment(p: BProc, dest, src: TLoc, flags: TAssignmentFlags) = elif needsComplexAssignment(ty): if ty.sons[0].isNil and asgnComplexity(ty.n) <= 4: discard getTypeDesc(p.module, ty) + ty = getUniqueType(ty) internalAssert ty.n != nil genOptAsgnObject(p, dest, src, flags, ty.n) else: @@ -1131,7 +1133,7 @@ proc genObjConstr(p: BProc, e: PNode, d: var TLoc) = var tmp2: TLoc tmp2.r = r var field: PSym = nil - var ty = t + var ty = getUniqueType(t) while ty != nil: field = lookupInRecord(ty.n, it.sons[0].sym.name) if field != nil: break |