This commit is contained in:
flywind 2020-11-02 17:41:44 +08:00 • committed by GitHub
commit 544cb107c7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 17 additions and 0 deletions

View file

@ -865,6 +865,7 @@ proc genRaiseStmt(p: PProc, n: PNode) =
proc genCaseJS(p: PProc, n: PNode, r: var TCompRes) = proc genCaseJS(p: PProc, n: PNode, r: var TCompRes) =
var var
cond, stmt: TCompRes cond, stmt: TCompRes
totalRange = 0
genLineDir(p, n) genLineDir(p, n)
gen(p, n[0], cond) gen(p, n[0], cond)
let stringSwitch = skipTypes(n[0].typ, abstractVar).kind == tyString let stringSwitch = skipTypes(n[0].typ, abstractVar).kind == tyString
@ -884,6 +885,10 @@ proc genCaseJS(p: PProc, n: PNode, r: var TCompRes) =
let e = it[j] let e = it[j]
if e.kind == nkRange: if e.kind == nkRange:
var v = copyNode(e[0]) var v = copyNode(e[0])
inc(totalRange, int(e[1].intVal - v.intVal))
if totalRange > 65535:
localError(p.config, n.info,
"Your case statement contains too many branches, consider using if/else instead!")
while v.intVal <= e[1].intVal: while v.intVal <= e[1].intVal:
gen(p, v, cond) gen(p, v, cond)
lineF(p, "case $1:$n", [cond.rdLoc]) lineF(p, "case $1:$n", [cond.rdLoc])

12
tests/js/t8821.nim Normal file
View file

@ -0,0 +1,12 @@
discard """
errormsg: "Your case statement contains too many branches, consider using if/else instead!"
"""
proc isInt32(i: int): bool =
case i
of 1 .. 70000:
return true
else:
return false
discard isInt32(1)