mirror of
https://github.com/nim-lang/Nim.git
synced 2026-02-12 22:33:49 +00:00
* 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
55 lines
905 B
Nim
55 lines
905 B
Nim
discard """
|
|
output: ''''''
|
|
cmd: '''nim c --gc:arc --expandArc:traverse --hint:Performance:off $file'''
|
|
nimout: '''
|
|
--expandArc: traverse
|
|
|
|
var
|
|
it_cursor
|
|
jt
|
|
try:
|
|
it_cursor = root
|
|
block :tmp:
|
|
while (
|
|
not (it_cursor == nil)):
|
|
echo [it_cursor.s]
|
|
it_cursor = it_cursor.ri
|
|
`=copy`(jt, root)
|
|
block :tmp_1:
|
|
while (
|
|
not (jt == nil)):
|
|
var ri_1
|
|
try:
|
|
`=copy`(ri_1, jt.ri)
|
|
echo [jt.s]
|
|
`=sink`(jt, ri_1)
|
|
`=wasMoved`(ri_1)
|
|
finally:
|
|
`=destroy`(ri_1)
|
|
finally:
|
|
`=destroy`(jt)
|
|
-- end of expandArc ------------------------
|
|
'''
|
|
"""
|
|
|
|
type
|
|
Node = ref object
|
|
le, ri: Node
|
|
s: string
|
|
|
|
proc traverse(root: Node) =
|
|
var it = root
|
|
while it != nil:
|
|
echo it.s
|
|
it = it.ri
|
|
|
|
var jt = root
|
|
while jt != nil:
|
|
let ri = jt.ri
|
|
echo jt.s
|
|
jt = ri
|
|
|
|
traverse(nil)
|
|
|
|
# XXX: This optimization is not sound
|