diff options
author | Araq <rumpf_a@web.de> | 2019-04-11 12:35:03 +0200 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2019-04-11 12:35:49 +0200 |
commit | 1c0b1e9d051685b702b2fe61c0d87c5a36072f3c (patch) | |
tree | 07681d20a5ba3e011d23c985e60a1dac3b450516 /compiler/semstmts.nim | |
parent | 8fb04b320adfe8f50ac2d7977d5dada5ca5fe30d (diff) | |
download | Nim-1c0b1e9d051685b702b2fe61c0d87c5a36072f3c.tar.gz |
sem'check understands 'owned procs'
Diffstat (limited to 'compiler/semstmts.nim')
-rw-r--r-- | compiler/semstmts.nim | 7 |
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") |