diff options
author | metagn <metagngn@gmail.com> | 2024-09-08 23:50:30 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-09-08 22:50:30 +0200 |
commit | 79a65da22a56eaeafce24b7c08c9d7db017173ac (patch) | |
tree | 76eb68b5a9fc60060364dd72c88072f28d081d1b /compiler | |
parent | 29a7d60acbf7c4d74844884acc462fbd35cf5708 (diff) | |
download | Nim-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.nim | 5 |
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: |