mark user defined destructors with sfOverriden to simplify the logic

This commit is contained in:
Andreas Rumpf 2019-03-16 10:38:06 +01:00
commit d3df1b8eda

View file

@ -1579,6 +1579,7 @@ proc semOverride(c: PContext, s: PSym, n: PNode) =
localError(c.config, n.info, errGenerated, localError(c.config, n.info, errGenerated,
"signature for '" & s.name.s & "' must be proc[T: object](x: var T)") "signature for '" & s.name.s & "' must be proc[T: object](x: var T)")
incl(s.flags, sfUsed) incl(s.flags, sfUsed)
incl(s.flags, sfOverriden)
of "deepcopy", "=deepcopy": of "deepcopy", "=deepcopy":
if s.typ.len == 2 and if s.typ.len == 2 and
s.typ.sons[1].skipTypes(abstractInst).kind in {tyRef, tyPtr} and s.typ.sons[1].skipTypes(abstractInst).kind in {tyRef, tyPtr} and
@ -1607,9 +1608,11 @@ proc semOverride(c: PContext, s: PSym, n: PNode) =
localError(c.config, n.info, errGenerated, localError(c.config, n.info, errGenerated,
"signature for 'deepCopy' must be proc[T: ptr|ref](x: T): T") "signature for 'deepCopy' must be proc[T: ptr|ref](x: T): T")
incl(s.flags, sfUsed) incl(s.flags, sfUsed)
incl(s.flags, sfOverriden)
of "=", "=sink": of "=", "=sink":
if s.magic == mAsgn: return if s.magic == mAsgn: return
incl(s.flags, sfUsed) incl(s.flags, sfUsed)
incl(s.flags, sfOverriden)
let t = s.typ let t = s.typ
if t.len == 3 and t.sons[0] == nil and t.sons[1].kind == tyVar: if t.len == 3 and t.sons[0] == nil and t.sons[1].kind == tyVar:
var obj = t.sons[1].sons[0] var obj = t.sons[1].sons[0]