new move analyser2 (#20471)
* produce better code for closure environment creation * new 'first write' analysis; * scope based move analyser * code cleanup Co-authored-by: ringabout <43030857+ringabout@users.noreply.github.com>
This commit is contained in:
parent
cfff454cf9
commit
8d47bf1822
19 changed files with 472 additions and 684 deletions
|
|
@ -21,21 +21,21 @@ proc merge(lower, greater: owned Node): owned Node =
|
|||
elif greater.isNil:
|
||||
result = lower
|
||||
elif lower.y < greater.y:
|
||||
lower.right = merge(lower.right, greater)
|
||||
lower.right = merge(move lower.right, greater)
|
||||
result = lower
|
||||
else:
|
||||
greater.left = merge(lower, greater.left)
|
||||
greater.left = merge(lower, move greater.left)
|
||||
result = greater
|
||||
|
||||
proc splitBinary(orig: owned Node, value: int32): (owned Node, owned Node) =
|
||||
if orig.isNil:
|
||||
result = (nil, nil)
|
||||
elif orig.x < value:
|
||||
let splitPair = splitBinary(orig.right, value)
|
||||
let splitPair = splitBinary(move orig.right, value)
|
||||
orig.right = splitPair[0]
|
||||
result = (orig, splitPair[1])
|
||||
else:
|
||||
let splitPair = splitBinary(orig.left, value)
|
||||
let splitPair = splitBinary(move orig.left, value)
|
||||
orig.left = splitPair[1]
|
||||
result = (splitPair[0], orig)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue