mirror of
https://github.com/nim-lang/Nim.git
synced 2026-08-28 17:41:45 +00:00
better error messages for illegal captures
This commit is contained in:
@@ -275,8 +275,12 @@ proc freshVarForClosureIter*(s, owner: PSym): PNode =
|
||||
|
||||
proc markAsClosure(owner: PSym; n: PNode) =
|
||||
let s = n.sym
|
||||
if illegalCapture(s) or owner.typ.callConv notin {ccClosure, ccDefault}:
|
||||
localError(n.info, errIllegalCaptureX, s.name.s)
|
||||
if illegalCapture(s):
|
||||
localError(n.info, "illegal capture '$1' of type <$2> which is declared here: $3" %
|
||||
[s.name.s, typeToString(s.typ), $s.info])
|
||||
elif owner.typ.callConv notin {ccClosure, ccDefault}:
|
||||
localError(n.info, "illegal capture '$1' because '$2' has the calling convention: <$3>" %
|
||||
[s.name.s, owner.name.s, CallingConvToStr[owner.typ.callConv]])
|
||||
incl(owner.typ.flags, tfCapturesEnv)
|
||||
owner.typ.callConv = ccClosure
|
||||
|
||||
|
||||
Reference in New Issue
Block a user