diff options
author | Jasper Jenkins <jasper.vs.jenkins@gmail.com> | 2019-05-26 22:59:22 -0700 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2019-05-27 07:59:22 +0200 |
commit | 1286ba34529d37432c146f73f24cc873ccd6adac (patch) | |
tree | ea8bd493e33a906f74bc5b26e3375f97afc28257 | |
parent | f7744260959bbdaefdc5172aaf7ff4770f8f8c03 (diff) | |
download | Nim-1286ba34529d37432c146f73f24cc873ccd6adac.tar.gz |
fix bool and range (#11336)
-rw-r--r-- | compiler/semobjconstr.nim | 10 |
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): |