summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAraq <rumpf_a@web.de>2014-07-01 23:41:25 +0200
committerAraq <rumpf_a@web.de>2014-07-01 23:41:25 +0200
commitd02cc41596602ac8039517add1c453a45a7c3558 (patch)
tree1a3adda4caf1115a77fe0724a9e100212e4ef915
parentb119dc2f3b35f6fb84bc9661ea0fbbd006fba433 (diff)
downloadNim-d02cc41596602ac8039517add1c453a45a7c3558.tar.gz
fixes #1275
-rw-r--r--compiler/ccgexprs.nim7
-rw-r--r--tests/objects/tobjconstr2.nim12
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))