'result/return' triggers a void context

This commit is contained in:
Araq 2013-05-06 18:30:54 +02:00
commit 6c0425d574
2 changed files with 60 additions and 23 deletions

View file

@ -1799,10 +1799,20 @@ proc expr(p: BProc, n: PNode, d: var TLoc) =
of nkCall, nkHiddenCallConv, nkInfix, nkPrefix, nkPostfix, nkCommand,
nkCallStrLit:
genLineDir(p, n)
if n.sons[0].kind == nkSym and n.sons[0].sym.magic != mNone:
genMagicExpr(p, n, d, n.sons[0].sym.magic)
let op = n.sons[0]
if n.typ.isNil:
# discard the value:
var a: TLoc
if op.kind == nkSym and op.sym.magic != mNone:
genMagicExpr(p, n, a, op.sym.magic)
else:
genCall(p, n, a)
else:
genCall(p, n, d)
# load it into 'd':
if op.kind == nkSym and op.sym.magic != mNone:
genMagicExpr(p, n, d, op.sym.magic)
else:
genCall(p, n, d)
of nkCurly:
if isDeepConstExpr(n) and n.len != 0:
putIntoDest(p, d, n.typ, genSetNode(p, n))