From 1286ba34529d37432c146f73f24cc873ccd6adac Mon Sep 17 00:00:00 2001 From: Jasper Jenkins Date: Sun, 26 May 2019 22:59:22 -0700 Subject: fix bool and range (#11336) --- compiler/semobjconstr.nim | 10 ++++++---- 1 file 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): -- cgit 1.4.1-2-gfad0