summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorJasper Jenkins <jasper.vs.jenkins@gmail.com>2019-05-26 22:59:22 -0700
committerAndreas Rumpf <rumpf_a@web.de>2019-05-27 07:59:22 +0200
commit1286ba34529d37432c146f73f24cc873ccd6adac (patch)
treeea8bd493e33a906f74bc5b26e3375f97afc28257
parentf7744260959bbdaefdc5172aaf7ff4770f8f8c03 (diff)
downloadNim-1286ba34529d37432c146f73f24cc873ccd6adac.tar.gz
fix bool and range (#11336)
-rw-r--r--compiler/semobjconstr.nim10
1 files changed, 6 insertions, 4 deletions
diff --git a/compiler/semobjconstr.nim b/compiler/semobjconstr.nim
index 1597faa70..4b4c5de02 100644
--- a/compiler/semobjconstr.nim
+++ b/compiler/semobjconstr.nim
@@ -95,7 +95,8 @@ template processBranchVals(b, op) =
 
 proc allPossibleValues(c: PContext, t: PType): IntSet =
   result = initIntSet()
-  if t.kind == tyEnum:
+  if t.enumHasHoles:
+    let t = t.skipTypes(abstractRange)
     for field in t.n.sons:
       result.incl(field.sym.position)
   else:
@@ -112,10 +113,11 @@ proc branchVals(c: PContext, caseNode: PNode, caseIdx: int,
     for i in 1 .. caseNode.len-2:
       processBranchVals(caseNode[i], excl)
 
-proc formatUnsafeBranchVals(c: PContext, t: PType, diffVals: IntSet): string =
+proc formatUnsafeBranchVals(t: PType, diffVals: IntSet): string =
   if diffVals.len <= 32:
     var strs: seq[string]
-    if t.kind == tyEnum:
+    let t = t.skipTypes(abstractRange)
+    if t.kind in {tyEnum, tyBool}:
       var i = 0
       for val in diffVals:
         while t.n.sons[i].sym.position < val: inc(i)
@@ -272,7 +274,7 @@ proc semConstructFields(c: PContext, recNode: PNode,
             localError(c.config, discriminatorVal.info, ("possible values " &
               "$2are in conflict with discriminator values for " &
               "selected object branch $1.") % [$selectedBranch,
-              formatUnsafeBranchVals(c, recNode.sons[0].typ, branchValsDiff)])
+              formatUnsafeBranchVals(recNode.sons[0].typ, branchValsDiff)])
       else:
         if branchNode.kind != nkElse:
           if not branchNode.caseBranchMatchesExpr(discriminatorVal):