summary refs log tree commit diff stats
path: root/compiler
diff options
context:
space:
mode:
authorflywind <43030857+xflywind@users.noreply.github.com>2020-11-02 17:41:44 +0800
committerGitHub <noreply@github.com>2020-11-02 10:41:44 +0100
commit544cb107c75523196ceee9408f9b1d5d89c82e48 (patch)
tree89ed0e095f0f988c9abcc8b4624f9a1ac8d4aa24 /compiler
parent00b495de9520a91fe24d81e55da109960189a966 (diff)
downloadNim-544cb107c75523196ceee9408f9b1d5d89c82e48.tar.gz
fix #8821 (#15809)
Diffstat (limited to 'compiler')
-rw-r--r--compiler/jsgen.nim5
1 files changed, 5 insertions, 0 deletions
diff --git a/compiler/jsgen.nim b/compiler/jsgen.nim
index cd14f1cf9..10c072253 100644
--- a/compiler/jsgen.nim
+++ b/compiler/jsgen.nim
@@ -865,6 +865,7 @@ proc genRaiseStmt(p: PProc, n: PNode) =
 proc genCaseJS(p: PProc, n: PNode, r: var TCompRes) =
   var
     cond, stmt: TCompRes
+    totalRange = 0
   genLineDir(p, n)
   gen(p, n[0], cond)
   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]
         if e.kind == nkRange:
           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:
             gen(p, v, cond)
             lineF(p, "case $1:$n", [cond.rdLoc])