better error messages for illegal captures

This commit is contained in:
Araq 2018-03-19 19:39:44 +01:00
commit d738ed9c92

View file

@ -275,8 +275,12 @@ proc freshVarForClosureIter*(s, owner: PSym): PNode =
proc markAsClosure(owner: PSym; n: PNode) = proc markAsClosure(owner: PSym; n: PNode) =
let s = n.sym let s = n.sym
if illegalCapture(s) or owner.typ.callConv notin {ccClosure, ccDefault}: if illegalCapture(s):
localError(n.info, errIllegalCaptureX, s.name.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) incl(owner.typ.flags, tfCapturesEnv)
owner.typ.callConv = ccClosure owner.typ.callConv = ccClosure