diff options
author | Araq <rumpf_a@web.de> | 2014-07-01 23:41:25 +0200 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2014-07-01 23:41:25 +0200 |
commit | d02cc41596602ac8039517add1c453a45a7c3558 (patch) | |
tree | 1a3adda4caf1115a77fe0724a9e100212e4ef915 | |
parent | b119dc2f3b35f6fb84bc9661ea0fbbd006fba433 (diff) | |
download | Nim-d02cc41596602ac8039517add1c453a45a7c3558.tar.gz |
fixes #1275
-rw-r--r-- | compiler/ccgexprs.nim | 7 | ||||
-rw-r--r-- | tests/objects/tobjconstr2.nim | 12 |
2 files changed, 16 insertions, 3 deletions
diff --git a/compiler/ccgexprs.nim b/compiler/ccgexprs.nim index 1874e33b8..4698082f1 100644 --- a/compiler/ccgexprs.nim +++ b/compiler/ccgexprs.nim @@ -714,11 +714,12 @@ proc genFieldCheck(p: BProc, e: PNode, obj: PRope, field: PSym) = assert(it.sons[0].kind == nkSym) let op = it.sons[0].sym if op.magic == mNot: it = it.sons[1] - assert(it.sons[2].kind == nkSym) + let disc = it.sons[2].skipConv + assert(disc.kind == nkSym) initLoc(test, locNone, it.typ, OnStack) initLocExpr(p, it.sons[1], u) - initLoc(v, locExpr, it.sons[2].typ, OnUnknown) - v.r = ropef("$1.$2", [obj, it.sons[2].sym.loc.r]) + initLoc(v, locExpr, disc.typ, OnUnknown) + v.r = ropef("$1.$2", [obj, disc.sym.loc.r]) genInExprAux(p, it, u, v, test) let id = nodeTableTestOrSet(p.module.dataCache, newStrNode(nkStrLit, field.name.s), gBackendId) diff --git a/tests/objects/tobjconstr2.nim b/tests/objects/tobjconstr2.nim index cb47e146d..8ef7004e4 100644 --- a/tests/objects/tobjconstr2.nim +++ b/tests/objects/tobjconstr2.nim @@ -20,3 +20,15 @@ type var a = Bar(y: 100, x: 200) # works var b = Bar(x: 100, y: 200) # used to fail + +# bug 1275 + +type + Graphic = object of TObject + case kind: range[0..1] + of 0: + radius: float + of 1: + size: tuple[w, h: float] + +var d = Graphic(kind: 1, size: (12.9, 6.9)) |