mirror of
https://github.com/nim-lang/Nim.git
synced 2026-01-04 20:17:42 +00:00
* fixes #12883 * fix comment * add normalize * fix
This commit is contained in:
@@ -758,6 +758,19 @@ proc track(tracked: PEffects, n: PNode) =
|
||||
if n[1].typ.len > 0:
|
||||
createTypeBoundOps(tracked, n[1].typ.lastSon, n.info)
|
||||
createTypeBoundOps(tracked, n[1].typ, n.info)
|
||||
|
||||
if a.kind == nkSym and a.sym.name.s.len > 0 and a.sym.name.s[0] == '=' and
|
||||
tracked.owner.kind != skMacro:
|
||||
let opKind = find(AttachedOpToStr, a.sym.name.s.normalize)
|
||||
if opKind != -1:
|
||||
# rebind type bounds operations after createTypeBoundOps call
|
||||
let t = n[1].typ.skipTypes({tyAlias, tyVar})
|
||||
if a.sym != t.attachedOps[TTypeAttachedOp(opKind)]:
|
||||
createTypeBoundOps(tracked, t, n.info)
|
||||
let op = t.attachedOps[TTypeAttachedOp(opKind)]
|
||||
if op != nil:
|
||||
n[0].sym = op
|
||||
|
||||
for i in 0..<n.safeLen:
|
||||
track(tracked, n[i])
|
||||
of nkDotExpr:
|
||||
|
||||
@@ -7,7 +7,13 @@ destroy
|
||||
destroy Foo: 123
|
||||
destroy Foo: 5
|
||||
(x1: (val: ...))
|
||||
destroy'''
|
||||
destroy
|
||||
---------------
|
||||
app begin
|
||||
(val: ...)
|
||||
destroy
|
||||
app end
|
||||
'''
|
||||
joinable: false
|
||||
"""
|
||||
|
||||
@@ -93,3 +99,30 @@ proc test =
|
||||
echo obj2
|
||||
|
||||
test()
|
||||
|
||||
|
||||
#------------------------------------------------------------
|
||||
# Issue #12883
|
||||
|
||||
type
|
||||
TopObject = object
|
||||
internal: UniquePtr[int]
|
||||
|
||||
proc deleteTop(p: ptr TopObject) =
|
||||
if p != nil:
|
||||
`=destroy`(p[]) # !!! this operation used to leak the integer
|
||||
deallocshared(p)
|
||||
|
||||
proc createTop(): ptr TopObject =
|
||||
result = cast[ptr TopObject](allocShared0(sizeof(TopObject)))
|
||||
result.internal = newUniquePtr(1)
|
||||
|
||||
proc test2() =
|
||||
let x = createTop()
|
||||
echo $x.internal
|
||||
deleteTop(x)
|
||||
|
||||
echo "---------------"
|
||||
echo "app begin"
|
||||
test2()
|
||||
echo "app end"
|
||||
Reference in New Issue
Block a user