summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorringabout <43030857+ringabout@users.noreply.github.com>2024-09-03 00:10:01 +0800
committerGitHub <noreply@github.com>2024-09-02 18:10:01 +0200
commit4789af71fe107e137524bc7746b902e644aca2dc (patch)
tree7bbd6dc669e4f0c3062c5f1bc9e3d4d09b794d73
parentfc853cb7268b74d87932fb08553dfbd5864d8f81 (diff)
downloadNim-4789af71fe107e137524bc7746b902e644aca2dc.tar.gz
fixes #24031; js codegen bug for case statement with just else branch (#24047)
fixes #24031
-rw-r--r--compiler/jsgen.nim9
-rw-r--r--tests/casestmt/tcase_issues.nim7
2 files changed, 14 insertions, 2 deletions
diff --git a/compiler/jsgen.nim b/compiler/jsgen.nim
index d6310d584..e3c0b1f46 100644
--- a/compiler/jsgen.nim
+++ b/compiler/jsgen.nim
@@ -1098,14 +1098,19 @@ proc genCaseJS(p: PProc, n: PNode, r: var TCompRes) =
           lineF(p, "break;$n", [])
     of nkElse:
       if transferRange:
-         lineF(p, "else{$n", [])
+        if n.len == 2: # a dangling else for a case statement
+          transferRange = false
+          lineF(p, "switch ($1) {$n", [cond.rdLoc])
+          lineF(p, "default: $n", [])
+        else:
+          lineF(p, "else{$n", [])
       else:
         lineF(p, "default: $n", [])
       p.nested:
         gen(p, it[0], stmt)
         moveInto(p, stmt, r)
         if transferRange:
-           lineF(p, "}$n", [])
+          lineF(p, "}$n", [])
         else:
           lineF(p, "break;$n", [])
     else: internalError(p.config, it.info, "jsgen.genCaseStmt")
diff --git a/tests/casestmt/tcase_issues.nim b/tests/casestmt/tcase_issues.nim
new file mode 100644
index 000000000..20a79df2c
--- /dev/null
+++ b/tests/casestmt/tcase_issues.nim
@@ -0,0 +1,7 @@
+discard """
+  targets: "c js"
+"""
+
+block: # bug #24031
+  case 0
+  else: discard
\ No newline at end of file