summary refs log tree commit diff stats
path: root/compiler
diff options
context:
space:
mode:
authormetagn <metagngn@gmail.com>2024-09-08 23:50:30 +0300
committerGitHub <noreply@github.com>2024-09-08 22:50:30 +0200
commit79a65da22a56eaeafce24b7c08c9d7db017173ac (patch)
tree76eb68b5a9fc60060364dd72c88072f28d081d1b /compiler
parent29a7d60acbf7c4d74844884acc462fbd35cf5708 (diff)
downloadNim-79a65da22a56eaeafce24b7c08c9d7db017173ac.tar.gz
fix CI, sem whole `when` stmts as generic stmt (#24072)
fixes CI, refs #24066, refs #24065

The combination of #24065 and #24066 caused a CI failure where a `when`
branch that was never compiled gave an undeclared identifier error. This
is because the `when` branch was being semchecked with `semGenericStmt`
without `withinMixin`, which is the flag `semgnrc` normally gives to
`when` branch bodies. To fix this, just pass the whole `when` stmt to
`semGenericStmt` rather than the individual blocks.

The alternative would be to just replace the calls to `semGenericStmt`
with a new proc that does the same thing, just with the flags
`{withinMixin}`.
Diffstat (limited to 'compiler')
-rw-r--r--compiler/semexprs.nim5
1 files changed, 2 insertions, 3 deletions
diff --git a/compiler/semexprs.nim b/compiler/semexprs.nim
index 081eb6847..1307b0ab7 100644
--- a/compiler/semexprs.nim
+++ b/compiler/semexprs.nim
@@ -2706,7 +2706,6 @@ proc semWhen(c: PContext, n: PNode, semCheck = true): PNode =
           elif not cannotResolve and val.intVal != 0 and result == nil:
             setResult(it[1])
             return # we're not in nimvm and we already have a result
-        it[1] = semGenericStmt(c, it[1])
       else:
         let e = forceBool(c, semConstExpr(c, it[0]))
         if e.kind != nkIntLit:
@@ -2719,7 +2718,7 @@ proc semWhen(c: PContext, n: PNode, semCheck = true): PNode =
     of nkElse, nkElseExpr:
       checkSonsLen(it, 1, c.config)
       if cannotResolve:
-        it[0] = semGenericStmt(c, it[0])
+        discard
       elif result == nil or whenNimvm:
         if semCheck:
           it[0] = semExpr(c, it[0], flags)
@@ -2730,7 +2729,7 @@ proc semWhen(c: PContext, n: PNode, semCheck = true): PNode =
           result = it[0]
     else: illFormedAst(n, c.config)
   if cannotResolve:
-    result = n
+    result = semGenericStmt(c, n)
     result.typ = makeTypeFromExpr(c, result.copyTree)
     return
   if result == nil: