* 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>
55 lines
1.1 KiB
Nim
55 lines
1.1 KiB
Nim
discard """
|
|
errormsg: "'=copy' is not available for type <Foo>; requires a copy because it's not the last read of 'otherTree'"
|
|
file: "tprevent_assign2.nim"
|
|
line: 48
|
|
"""
|
|
|
|
type
|
|
Foo = object
|
|
x: int
|
|
|
|
proc `=destroy`(f: var Foo) = f.x = 0
|
|
proc `=`(a: var Foo; b: Foo) {.error.} # = a.x = b.x
|
|
proc `=sink`(a: var Foo; b: Foo) = a.x = b.x
|
|
|
|
proc createTree(x: int): Foo =
|
|
Foo(x: x)
|
|
|
|
proc take2(a, b: sink Foo) =
|
|
echo a.x, " ", b.x
|
|
|
|
when false:
|
|
var otherTree: Foo
|
|
try:
|
|
for i in 0..3:
|
|
while true:
|
|
#if i == 0:
|
|
otherTree = createTree(44)
|
|
case i
|
|
of 0:
|
|
echo otherTree
|
|
take2(createTree(34), otherTree)
|
|
of 1:
|
|
take2(createTree(34), otherTree)
|
|
else:
|
|
discard
|
|
finally:
|
|
discard
|
|
|
|
proc preventThis() =
|
|
var otherTree: Foo
|
|
for i in 0..3:
|
|
while true:
|
|
if i == 0:
|
|
otherTree = createTree(44)
|
|
case i
|
|
of 0:
|
|
echo otherTree
|
|
take2(createTree(34), otherTree)
|
|
of 1:
|
|
take2(createTree(34), otherTree)
|
|
else:
|
|
discard
|
|
|
|
#allowThis()
|
|
preventThis()
|