diff --git a/compiler/semmagic.nim b/compiler/semmagic.nim index 7838466501..87e7497361 100644 --- a/compiler/semmagic.nim +++ b/compiler/semmagic.nim @@ -512,12 +512,14 @@ proc magicsAfterOverloadResolution(c: PContext, n: PNode, if n[^1].kind == nkSym and n[^1].sym.kind notin {skProc, skFunc}: localError(c.config, n.info, "finalizer must be a direct reference to a proc") elif optTinyRtti in c.config.globalOptions: + let fin = if n[^1].kind == nkLambda: n[^1][namePos].sym + else: n[^1].sym # check if we converted this finalizer into a destructor already: - let t = whereToBindTypeHook(c, n[^1].sym.typ[1].skipTypes(abstractInst+{tyRef})) - if t != nil and t.attachedOps[attachedDestructor] != nil and t.attachedOps[attachedDestructor].owner == n[^1].sym: + let t = whereToBindTypeHook(c, fin.typ[1].skipTypes(abstractInst+{tyRef})) + if t != nil and t.attachedOps[attachedDestructor] != nil and t.attachedOps[attachedDestructor].owner == fin: discard "already turned this one into a finalizer" else: - bindTypeHook(c, turnFinalizerIntoDestructor(c, n[^1].sym, n.info), n, attachedDestructor) + bindTypeHook(c, turnFinalizerIntoDestructor(c, fin, n.info), n, attachedDestructor) result = n of mDestroy: result = n