summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAraq <rumpf_a@web.de>2016-12-04 22:10:58 +0100
committerAraq <rumpf_a@web.de>2016-12-04 22:10:58 +0100
commit862a32fe85329096eb2af254f8b361cab04c9f3c (patch)
treea01de1a63498990085ed4c6a531a329a921c6c70
parentfeb0d21b22bfc678208efd9e84fbe3d33b888f58 (diff)
downloadNim-862a32fe85329096eb2af254f8b361cab04c9f3c.tar.gz
make tmissing_ccgtrav_unique_type green again
-rw-r--r--compiler/ccgexprs.nim4
-rw-r--r--compiler/ccgtypes.nim6
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),