diff --git a/compiler/semstmts.nim b/compiler/semstmts.nim index 3d9363d773..ffda6a1bb9 100644 --- a/compiler/semstmts.nim +++ b/compiler/semstmts.nim @@ -1220,6 +1220,9 @@ proc semProcAux(c: PContext, n: PNode, kind: TSymKind, if n.sons[patternPos].kind != nkEmpty: c.patterns.add(s) if isAnon: result.typ = s.typ + if isTopLevel(c) and s.kind != skClosureIterator and + s.typ.callConv == ccClosure: + message(s.info, warnDeprecated, "top level '.closure' calling convention") proc determineType(c: PContext, s: PSym) = if s.typ != nil: return diff --git a/todo.txt b/todo.txt index f9abed8910..57cbc83bf0 100644 --- a/todo.txt +++ b/todo.txt @@ -1,7 +1,6 @@ version 0.11.4 ============== -- deprecate toplevel .closure procs - deprecate closure iterator construction via ``var cl = foo`` - document special cased varargs[untyped] and varargs[typed] diff --git a/web/news.txt b/web/news.txt index 16ac286ae6..c93bb821f2 100644 --- a/web/news.txt +++ b/web/news.txt @@ -46,6 +46,10 @@ News overloaded, so we removed it with no deprecation cycle. - To use the ``parallel`` statement you now have to use the ``--experimental`` mode. + - Toplevel procs of calling convention ``closure`` never worked reliably + and are now deprecated and will be removed from the language. Instead you + have to insert type conversions + like ``(proc (a, b: int) {.closure.})(myToplevelProc)`` if necessary.