summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorLemonBoy <thatlemon@gmail.com>2018-06-24 18:27:40 +0200
committerLemonBoy <thatlemon@gmail.com>2018-06-24 18:27:40 +0200
commit95436893061176d51b1c11fdf5418b3ed17a8455 (patch)
tree7da71a2d383c24a9fe9c6c4abc4e2630c34f1c95
parent105a472dc5eb239c68d7e13d8eef93c8dc0311be (diff)
downloadNim-95436893061176d51b1c11fdf5418b3ed17a8455.tar.gz
Make `static` blocks introduce their own scope
Treat the static block as a normal block, don't leak any identifier in
the outer scope.

Fixes #5958
-rw-r--r--compiler/semstmts.nim2
-rw-r--r--tests/global/t5958.nim9
2 files changed, 11 insertions, 0 deletions
diff --git a/compiler/semstmts.nim b/compiler/semstmts.nim
index 292238dc9..fe4318de5 100644
--- a/compiler/semstmts.nim
+++ b/compiler/semstmts.nim
@@ -1772,7 +1772,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)
diff --git a/tests/global/t5958.nim b/tests/global/t5958.nim
new file mode 100644
index 000000000..5abcad4a9
--- /dev/null
+++ b/tests/global/t5958.nim
@@ -0,0 +1,9 @@
+discard """
+  line: 9
+  errormsg: "undeclared identifier: 'a'"
+"""
+
+static:
+  var a = 1
+
+echo a