Open a new scope for static: expr blocks (#10649)
Bring this in line with how plain blocks are analysed and avoids codegen errors if one references variables defined in such a block.
This commit is contained in:
parent
f86835ce77
commit
e89aaaeaab
3 changed files with 21 additions and 1 deletions
|
|
@ -735,7 +735,11 @@ proc evalAtCompileTime(c: PContext, n: PNode): PNode =
|
|||
# echo "SUCCESS evaluated at compile time: ", call.renderTree
|
||||
|
||||
proc semStaticExpr(c: PContext, n: PNode): PNode =
|
||||
let a = semExpr(c, n)
|
||||
inc c.inStaticContext
|
||||
openScope(c)
|
||||
let a = semExprWithType(c, n)
|
||||
closeScope(c)
|
||||
dec c.inStaticContext
|
||||
if a.findUnresolvedStatic != nil: return a
|
||||
result = evalStaticExpr(c.module, c.graph, a, c.p.owner)
|
||||
if result.isNil:
|
||||
|
|
|
|||
5
tests/errmsgs/tstaticexprnotype.nim
Normal file
5
tests/errmsgs/tstaticexprnotype.nim
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
discard """
|
||||
action: reject
|
||||
"""
|
||||
|
||||
let x = static: discard
|
||||
11
tests/errmsgs/tstaticexprscope.nim
Normal file
11
tests/errmsgs/tstaticexprscope.nim
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
discard """
|
||||
errmsg: "undeclared identifier: 'z'"
|
||||
line: 11
|
||||
"""
|
||||
|
||||
# Open a new scope for static expr blocks
|
||||
block:
|
||||
let a = static:
|
||||
var z = 123
|
||||
33
|
||||
echo z
|
||||
Loading…
Add table
Add a link
Reference in a new issue