diff options
author | Araq <rumpf_a@web.de> | 2016-12-04 22:10:58 +0100 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2016-12-04 22:10:58 +0100 |
commit | 862a32fe85329096eb2af254f8b361cab04c9f3c (patch) | |
tree | a01de1a63498990085ed4c6a531a329a921c6c70 | |
parent | feb0d21b22bfc678208efd9e84fbe3d33b888f58 (diff) | |
download | Nim-862a32fe85329096eb2af254f8b361cab04c9f3c.tar.gz |
make tmissing_ccgtrav_unique_type green again
-rw-r--r-- | compiler/ccgexprs.nim | 4 | ||||
-rw-r--r-- | compiler/ccgtypes.nim | 6 |
2 files changed, 9 insertions, 1 deletions
diff --git a/compiler/ccgexprs.nim b/compiler/ccgexprs.nim index 4fef41228..ba4c6f485 100644 --- a/compiler/ccgexprs.nim +++ b/compiler/ccgexprs.nim @@ -718,6 +718,8 @@ proc genTupleElem(p: BProc, e: PNode, d: var TLoc) = a: TLoc i: int initLocExpr(p, e.sons[0], a) + let tupType = a.t.skipTypes(abstractInst) + assert tupType.kind == tyTuple d.inheritLocation(a) discard getTypeDesc(p.module, a.t) # fill the record's fields.loc var r = rdLoc(a) @@ -725,7 +727,7 @@ proc genTupleElem(p: BProc, e: PNode, d: var TLoc) = of nkIntLit..nkUInt64Lit: i = int(e.sons[1].intVal) else: internalError(e.info, "genTupleElem") addf(r, ".Field$1", [rope(i)]) - putIntoDest(p, d, a.t.sons[i], r, a.s) + putIntoDest(p, d, tupType.sons[i], r, a.s) proc lookupFieldAgain(p: BProc, ty: PType; field: PSym; r: var Rope): PSym = var ty = ty diff --git a/compiler/ccgtypes.nim b/compiler/ccgtypes.nim index c77cbe284..0bb700f1c 100644 --- a/compiler/ccgtypes.nim +++ b/compiler/ccgtypes.nim @@ -916,6 +916,9 @@ proc genObjectFields(m: BModule, typ, origType: PType, n: PNode, expr: Rope) = var tmp = discriminatorTableName(m, typ, field) var L = lengthOrd(field.typ) assert L > 0 + if field.loc.r == nil: fillObjectFields(m, typ) + if field.loc.t == nil: + internalError(n.info, "genObjectFields") addf(m.s[cfsTypeInit3], "$1.kind = 3;$n" & "$1.offset = offsetof($2, $3);$n" & "$1.typ = $4;$n" & "$1.name = $5;$n" & "$1.sons = &$6[0];$n" & @@ -949,6 +952,9 @@ proc genObjectFields(m: BModule, typ, origType: PType, n: PNode, expr: Rope) = of nkSym: var field = n.sym if field.bitsize == 0: + if field.loc.r == nil: fillObjectFields(m, typ) + if field.loc.t == nil: + internalError(n.info, "genObjectFields") addf(m.s[cfsTypeInit3], "$1.kind = 1;$n" & "$1.offset = offsetof($2, $3);$n" & "$1.typ = $4;$n" & "$1.name = $5;$n", [expr, getTypeDesc(m, origType), |