fixes #19291; implements wasMoved hook (#21303)

* fixes #19291; implements `wasMoved` hook

* basics

* checkpoint

* finish `wasMoved`

* add a test for #19291

* add documentation and changelog

* work `attachedWasMoved` with generics

* fixes optimizer

* register `=wasMoved`

* handle wasMoved magcis

* check another round

* some patches

* try `op == nil`

* nicer

* generate `wasMoved` before `destroy`

* try again

* fixes tests

* default wasMoved

* Update tests/destructor/tv2_cast.nim

* Update tests/destructor/tv2_cast.nim

* Update tests/arc/topt_refcursors.nim
This commit is contained in:
ringabout 2023-03-02 12:29:40 +08:00 • committed by GitHub
commit a137e50150
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
12 changed files with 131 additions and 39 deletions

View file

@ -4,7 +4,8 @@ discard """
@[1953719668, 875770417]
destroying O1'''
cmd: '''nim c --gc:arc --expandArc:main --expandArc:main1 --expandArc:main2 --expandArc:main3 --hints:off --assertions:off $file'''
nimout: '''--expandArc: main
nimout: '''
--expandArc: main
var
data
@ -12,7 +13,7 @@ var
:tmpD_1
:tmpD_2
data =
wasMoved(:tmpD)
`=wasMoved`(:tmpD)
`=copy`(:tmpD, cast[string](
:tmpD_2 = encode(cast[seq[byte]](
:tmpD_1 = newString(100)
@ -32,7 +33,7 @@ var
:tmpD_1
s = newString(100)
data =
wasMoved(:tmpD)
`=wasMoved`(:tmpD)
`=copy`(:tmpD, cast[string](
:tmpD_1 = encode(toOpenArrayByte(s, 0, len(s) - 1))
:tmpD_1))
@ -50,7 +51,7 @@ var
:tmpD_1
s = newSeq(100)
data =
wasMoved(:tmpD)
`=wasMoved`(:tmpD)
`=copy`(:tmpD, cast[string](
:tmpD_1 = encode(s)
:tmpD_1))
@ -67,7 +68,7 @@ var
:tmpD_1
:tmpD_2
data =
wasMoved(:tmpD)
`=wasMoved`(:tmpD)
`=copy`(:tmpD, cast[string](
:tmpD_2 = encode do:
:tmpD_1 = newSeq(100)
@ -77,7 +78,8 @@ data =
`=destroy`(:tmpD_2)
`=destroy`(:tmpD_1)
`=destroy_1`(data)
-- end of expandArc ------------------------'''
-- end of expandArc ------------------------
'''
"""
func encode*(src: openArray[byte]): seq[byte] =