diff options
-rw-r--r-- | compiler/jsgen.nim | 3 | ||||
-rw-r--r-- | tests/stdlib/tmisc_issues.nim | 17 |
2 files changed, 19 insertions, 1 deletions
diff --git a/compiler/jsgen.nim b/compiler/jsgen.nim index 39009bd2f..bbc64a2f0 100644 --- a/compiler/jsgen.nim +++ b/compiler/jsgen.nim @@ -2272,6 +2272,7 @@ proc genObjConstr(p: PProc, n: PNode, r: var TCompRes) = r.kind = resExpr var initList : Rope var fieldIDs = initIntSet() + let nTyp = n.typ.skipTypes(abstractInst) for i in 1..<n.len: if i > 1: initList.add(", ") var it = n[i] @@ -2280,7 +2281,7 @@ proc genObjConstr(p: PProc, n: PNode, r: var TCompRes) = gen(p, val, a) var f = it[0].sym if f.loc.r == nil: f.loc.r = mangleName(p.module, f) - fieldIDs.incl(lookupFieldAgain(n.typ, f).id) + fieldIDs.incl(lookupFieldAgain(nTyp, f).id) let typ = val.typ.skipTypes(abstractInst) if a.typ == etyBaseIndex: diff --git a/tests/stdlib/tmisc_issues.nim b/tests/stdlib/tmisc_issues.nim new file mode 100644 index 000000000..ed57818b1 --- /dev/null +++ b/tests/stdlib/tmisc_issues.nim @@ -0,0 +1,17 @@ +discard """ + targets: "c cpp js" +""" + +# bug #20227 +type + Data = object + id: int + + Test = distinct Data + + Object = object + data: Test + + +var x: Object = Object(data: Test(Data(id: 12))) +doAssert Data(x.data).id == 12 |