Merge pull request #8108 from LemonBoy/fix-5958

Make `static` blocks introduce their own scope
This commit is contained in:
Andreas Rumpf
2018-06-26 23:16:40 +02:00
committed by GitHub
5 changed files with 23 additions and 15 deletions

View File

@@ -1779,7 +1779,9 @@ proc semStaticStmt(c: PContext, n: PNode): PNode =
#echo "semStaticStmt"
#writeStackTrace()
inc c.inStaticContext
openScope(c)
let a = semStmt(c, n.sons[0])
closeScope(c)
dec c.inStaticContext
n.sons[0] = a
evalStaticStmt(c.module, c.graph, a, c.p.owner)

9
tests/global/t5958.nim Normal file
View File

@@ -0,0 +1,9 @@
discard """
line: 9
errormsg: "undeclared identifier: 'a'"
"""
static:
var a = 1
echo a

View File

@@ -71,5 +71,4 @@ macro make(arg: untyped): untyped =
proc first(i: int): void =
make(second)
static:
var ss: string = ""
var ss {.compileTime.}: string = ""

View File

@@ -4,14 +4,12 @@ proc assertEq(arg0,arg1: string): void =
if arg0 != arg1:
raiseAssert("strings not equal:\n" & arg0 & "\n" & arg1)
static:
# a simple assignment of stmtList to another variable
var node: NimNode
# an assignment of stmtList into an array
var nodeArray: array[1, NimNode]
# an assignment of stmtList into a seq
var nodeSeq = newSeq[NimNode](2)
# a simple assignment of stmtList to another variable
var node {.compileTime.}: NimNode
# an assignment of stmtList into an array
var nodeArray {.compileTime.}: array[1, NimNode]
# an assignment of stmtList into a seq
var nodeSeq {.compileTime.} = newSeq[NimNode](2)
proc checkNode(arg: NimNode; name: string): void {. compileTime .} =
echo "checking ", name
@@ -35,10 +33,10 @@ proc checkNode(arg: NimNode; name: string): void {. compileTime .} =
echo "OK"
static:
# the root node that is used to generate the Ast
var stmtList: NimNode
# the root node that is used to generate the Ast
var stmtList {.compileTime.}: NimNode
static:
stmtList = newStmtList(nnkDiscardStmt.newTree(newEmptyNode()))
checkNode(stmtList, "direct construction")

View File

@@ -19,9 +19,9 @@ block:
var x = default(type(0))
# #6379
static:
import algorithm
import algorithm
static:
var numArray = [1, 2, 3, 4, -1]
numArray.sort(cmp)
assert numArray == [-1, 1, 2, 3, 4]