summary refs log tree commit diff stats
path: root/compiler/semstmts.nim
diff options
context:
space:
mode:
authorAraq <rumpf_a@web.de>2019-04-11 12:35:03 +0200
committerAraq <rumpf_a@web.de>2019-04-11 12:35:49 +0200
commit1c0b1e9d051685b702b2fe61c0d87c5a36072f3c (patch)
tree07681d20a5ba3e011d23c985e60a1dac3b450516 /compiler/semstmts.nim
parent8fb04b320adfe8f50ac2d7977d5dada5ca5fe30d (diff)
downloadNim-1c0b1e9d051685b702b2fe61c0d87c5a36072f3c.tar.gz
sem'check understands 'owned procs'
Diffstat (limited to 'compiler/semstmts.nim')
-rw-r--r--compiler/semstmts.nim7
1 files changed, 6 insertions, 1 deletions
diff --git a/compiler/semstmts.nim b/compiler/semstmts.nim
index 93af6ddbb..fe43c0c36 100644
--- a/compiler/semstmts.nim
+++ b/compiler/semstmts.nim
@@ -1486,6 +1486,8 @@ proc semLambda(c: PContext, n: PNode, flags: TExprFlags): PNode =
   closeScope(c)           # close scope for parameters
   popOwner(c)
   result.typ = s.typ
+  if optNimV2 in c.config.globalOptions:
+    result.typ = makeVarType(c, result.typ, tyOwned)
 
 proc semInferredLambda(c: PContext, pt: TIdTable, n: PNode): PNode =
   var n = n
@@ -1521,7 +1523,8 @@ proc semInferredLambda(c: PContext, pt: TIdTable, n: PNode): PNode =
   popProcCon(c)
   popOwner(c)
   closeScope(c)
-
+  if optNimV2 in c.config.globalOptions and result.typ != nil:
+    result.typ = makeVarType(c, result.typ, tyOwned)
   # alternative variant (not quite working):
   # var prc = arg[0].sym
   # let inferred = c.semGenerateInstance(c, prc, m.bindings, arg.info)
@@ -1900,6 +1903,8 @@ proc semProcAux(c: PContext, n: PNode, kind: TSymKind,
   if isAnon:
     n.kind = nkLambda
     result.typ = s.typ
+    if optNimV2 in c.config.globalOptions:
+      result.typ = makeVarType(c, result.typ, tyOwned)
   if isTopLevel(c) and s.kind != skIterator and
       s.typ.callConv == ccClosure:
     localError(c.config, s.info, "'.closure' calling convention for top level routines is invalid")