fixes #1838
This commit is contained in:
parent
b5a8e34ae7
commit
9d0ae03918
4 changed files with 30 additions and 7 deletions
|
|
@ -1317,18 +1317,20 @@ proc semYield(c: PContext, n: PNode): PNode =
|
|||
elif n.sons[0].kind != nkEmpty:
|
||||
n.sons[0] = semExprWithType(c, n.sons[0]) # check for type compatibility:
|
||||
var iterType = c.p.owner.typ
|
||||
var restype = iterType.sons[0]
|
||||
let restype = iterType.sons[0]
|
||||
if restype != nil:
|
||||
let adjustedRes = if c.p.owner.kind == skIterator: restype.base
|
||||
let adjustedRes = if restype.kind == tyIter: restype.base
|
||||
else: restype
|
||||
n.sons[0] = fitNode(c, adjustedRes, n.sons[0])
|
||||
if adjustedRes.kind != tyExpr:
|
||||
n.sons[0] = fitNode(c, adjustedRes, n.sons[0])
|
||||
if n.sons[0].typ == nil: internalError(n.info, "semYield")
|
||||
|
||||
if resultTypeIsInferrable(adjustedRes):
|
||||
let inferred = n.sons[0].typ
|
||||
if c.p.owner.kind == skIterator:
|
||||
iterType.sons[0].sons[0] = inferred
|
||||
if restype.kind == tyIter:
|
||||
restype.sons[0] = inferred
|
||||
else:
|
||||
debug inferred
|
||||
iterType.sons[0] = inferred
|
||||
|
||||
semYieldVarResult(c, n, adjustedRes)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue