better error messages for illegal captures
This commit is contained in:
parent
e83bce3f13
commit
d738ed9c92
1 changed files with 6 additions and 2 deletions
|
|
@ -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
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue