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:
LemonBoy
2019-02-23 12:05:07 +01:00
committed by Andreas Rumpf
parent f86835ce77
commit e89aaaeaab
3 changed files with 21 additions and 1 deletions

View File

@@ -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:

View File

@@ -0,0 +1,5 @@
discard """
action: reject
"""
let x = static: discard

View 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