Fix defer not not-working at top level (#10191)

This commit is contained in:
Neelesh Chandola
2019-01-07 05:21:17 +05:30
committed by Andreas Rumpf
parent 15773c455a
commit e77dd683eb
4 changed files with 4 additions and 13 deletions

View File

@@ -556,8 +556,6 @@ proc isEmptyTree(n: PNode): bool =
else: result = false
proc semStmtAndGenerateGenerics(c: PContext, n: PNode): PNode =
if n.kind == nkDefer:
localError(c.config, n.info, "defer statement not supported at top level")
if c.topStmts == 0 and not isImportSystemStmt(c.graph, n):
if sfSystemModule notin c.module.flags and not isEmptyTree(n):
c.importTable.addSym c.graph.systemModule # import the "System" identifier

View File

@@ -2624,6 +2624,8 @@ proc semExpr(c: PContext, n: PNode, flags: TExprFlags = {}): PNode =
of nkStaticStmt:
result = semStaticStmt(c, n)
of nkDefer:
if c.currentScope == c.topLevelScope:
localError(c.config, n.info, "defer statement not supported at top level")
n.sons[0] = semExpr(c, n.sons[0])
if not n.sons[0].typ.isEmptyType and not implicitlyDiscardable(n.sons[0]):
localError(c.config, n.info, "'defer' takes a 'void' expression")

View File

@@ -9,7 +9,6 @@ import os, asyncfile, asyncdispatch
const F = "test_async.txt"
removeFile(F)
defer: removeFile(F)
let f = openAsync(F, fmWrite)
var futs = newSeq[Future[void]]()
for i in 1..3:
@@ -17,4 +16,4 @@ for i in 1..3:
waitFor(all(futs))
f.close()
echo readFile(F)
removeFile(F)

View File

@@ -1,6 +1,5 @@
discard """
output: '''hi
hi
1
hi
2
@@ -10,13 +9,6 @@ A'''
# bug #1742
template test(): untyped =
let a = 0
defer: echo "hi"
a
let i = test()
import strutils
let x = try: parseInt("133a")
except: -1
@@ -31,7 +23,7 @@ template atFuncEnd =
template testB(): untyped =
let a = 0
defer: echo "hi" # Delete this line to make it work
defer: echo "hi"
a
proc main =