diff options
Diffstat (limited to 'compiler/sempass2.nim')
-rw-r--r-- | compiler/sempass2.nim | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/compiler/sempass2.nim b/compiler/sempass2.nim index 042cd9a6e..82287c675 100644 --- a/compiler/sempass2.nim +++ b/compiler/sempass2.nim @@ -906,16 +906,26 @@ proc track(tracked: PEffects, n: PNode) = of nkTypeSection, nkProcDef, nkConverterDef, nkMethodDef, nkIteratorDef, nkMacroDef, nkTemplateDef, nkLambda, nkDo, nkFuncDef: discard - of nkCast, nkHiddenStdConv, nkHiddenSubConv, nkConv: + of nkCast: if n.len == 2: track(tracked, n[1]) if tracked.owner.kind != skMacro: createTypeBoundOps(tracked, n.typ, n.info) + of nkHiddenStdConv, nkHiddenSubConv, nkConv: + if n.len == 2: + track(tracked, n[1]) + if tracked.owner.kind != skMacro: + createTypeBoundOps(tracked, n.typ, n.info) + # This is a hacky solution in order to fix bug #13110. Hopefully + # a better solution will come up eventually. + if n[1].typ.kind != tyString: + createTypeBoundOps(tracked, n[1].typ, n[1].info) of nkObjUpConv, nkObjDownConv, nkChckRange, nkChckRangeF, nkChckRange64: if n.len == 1: track(tracked, n[0]) if tracked.owner.kind != skMacro: createTypeBoundOps(tracked, n.typ, n.info) + createTypeBoundOps(tracked, n[0].typ, n[0].info) of nkBracket: for i in 0..<n.safeLen: track(tracked, n[i]) if tracked.owner.kind != skMacro: |