summary refs log tree commit diff stats
path: root/compiler/destroyer.nim
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/destroyer.nim')
-rw-r--r--compiler/destroyer.nim18
1 files changed, 7 insertions, 11 deletions
diff --git a/compiler/destroyer.nim b/compiler/destroyer.nim
index a868a64ba..36839bf0b 100644
--- a/compiler/destroyer.nim
+++ b/compiler/destroyer.nim
@@ -164,26 +164,22 @@ proc isHarmlessVar*(s: PSym; c: Con): bool =
 template interestingSym(s: PSym): bool =
   s.owner == c.owner and s.kind in InterestingSyms and hasDestructor(s.typ)
 
-proc patchHead(n: PNode; alreadyPatched: var IntSet) =
+proc patchHead(n: PNode) =
   if n.kind in nkCallKinds and n[0].kind == nkSym and n.len > 1:
     let s = n[0].sym
-    if sfFromGeneric in s.flags or true:
-      if s.name.s[0] == '=' and not containsOrIncl(alreadyPatched, s.id):
-        patchHead(s.getBody, alreadyPatched)
+    if sfFromGeneric in s.flags and s.name.s[0] == '=' and
+        s.name.s in ["=sink", "=", "=destroy"]:
+      excl(s.flags, sfFromGeneric)
+      patchHead(s.getBody)
       let t = n[1].typ.skipTypes({tyVar, tyGenericInst, tyAlias, tyInferred})
       template patch(op, field) =
-        if s.name.s == op and field != nil: #and field != s:
+        if s.name.s == op and field != nil and field != s:
           n.sons[0].sym = field
       patch "=sink", t.sink
       patch "=", t.assignment
       patch "=destroy", t.destructor
   for x in n:
-    patchHead(x, alreadyPatched)
-
-template patchHead(n: PNode) =
-  when false:
-    var alreadyPatched = initIntSet()
-    patchHead(n, alreadyPatched)
+    patchHead(x)
 
 proc genSink(t: PType; dest: PNode): PNode =
   let t = t.skipTypes({tyGenericInst, tyAlias})