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
|
|
@ -93,6 +93,7 @@ destroy
|
|||
destroy
|
||||
destroy
|
||||
sink
|
||||
sink
|
||||
destroy
|
||||
copy
|
||||
(f: 1)
|
||||
|
|
@ -767,8 +768,7 @@ proc initC(): C =
|
|||
C(o: initO())
|
||||
|
||||
proc pair(): tuple[a: C, b: C] =
|
||||
result.a = initC() # <- when firstWrite tries to find this node to start its analysis it fails, because injectdestructors uses copyTree/shallowCopy
|
||||
result.b = initC()
|
||||
result = (a: initC(), b: initC())# <- when firstWrite tries to find this node to start its analysis it fails, because injectdestructors uses copyTree/shallowCopy
|
||||
|
||||
discard pair()
|
||||
|
||||
|
|
@ -818,3 +818,24 @@ proc atomicClosureOp =
|
|||
|
||||
atomicClosureOp()
|
||||
|
||||
|
||||
template assertEq(a, b: untyped): untyped =
|
||||
block:
|
||||
let
|
||||
aval = a
|
||||
bval = b
|
||||
|
||||
if aval != bval:
|
||||
quit "bug!"
|
||||
|
||||
proc convoluted =
|
||||
let _ = (;
|
||||
var val1: string;
|
||||
if true: val1 = "22"
|
||||
true
|
||||
)
|
||||
|
||||
assertEq val1, "22"
|
||||
assertEq val1, "22"
|
||||
|
||||
convoluted()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue