diff options
author | Bung <crc32@qq.com> | 2022-10-14 18:21:02 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-14 12:21:02 +0200 |
commit | b286448a99f9c77333d9648ae5d3042fbaf5aa48 (patch) | |
tree | 2d3f0da2ed64f94274a93517979ef2d83128c8dd | |
parent | 07b645342abd06b2323df042c170eb847f51880d (diff) | |
download | Nim-b286448a99f9c77333d9648ae5d3042fbaf5aa48.tar.gz |
fix #8821 JS codegen can produce extreme switch statements with case … (#20548)
* fix #8821 JS codegen can produce extreme switch statements with case a of range * remove totalRange
-rw-r--r-- | compiler/jsgen.nim | 7 | ||||
-rw-r--r-- | tests/js/t8821.nim | 5 |
2 files changed, 2 insertions, 10 deletions
diff --git a/compiler/jsgen.nim b/compiler/jsgen.nim index de157ed49..267b9ba34 100644 --- a/compiler/jsgen.nim +++ b/compiler/jsgen.nim @@ -887,7 +887,6 @@ proc genRaiseStmt(p: PProc, n: PNode) = proc genCaseJS(p: PProc, n: PNode, r: var TCompRes) = var a, b, cond, stmt: TCompRes - totalRange = 0 genLineDir(p, n) gen(p, n[0], cond) let typeKind = skipTypes(n[0].typ, abstractVar).kind @@ -897,7 +896,7 @@ proc genCaseJS(p: PProc, n: PNode, r: var TCompRes) = of tyString: useMagic(p, "toJSStr") lineF(p, "switch (toJSStr($1)) {$n", [cond.rdLoc]) - of tyFloat..tyFloat128: + of tyFloat..tyFloat128, tyInt..tyInt64, tyUInt..tyUInt64: transferRange = true else: lineF(p, "switch ($1) {$n", [cond.rdLoc]) @@ -926,10 +925,6 @@ proc genCaseJS(p: PProc, n: PNode, r: var TCompRes) = lineF(p, "$1 >= $2 && $1 <= $3", [cond.rdLoc, a.rdLoc, b.rdLoc]) else: 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]) diff --git a/tests/js/t8821.nim b/tests/js/t8821.nim index 43cf3f6f2..38c88efa8 100644 --- a/tests/js/t8821.nim +++ b/tests/js/t8821.nim @@ -1,6 +1,3 @@ -discard """ - errormsg: "Your case statement contains too many branches, consider using if/else instead!" -""" proc isInt32(i: int): bool = case i @@ -9,4 +6,4 @@ proc isInt32(i: int): bool = else: return false -discard isInt32(1) \ No newline at end of file +doAssert isInt32(1) == true \ No newline at end of file |