mirror of
https://github.com/nim-lang/Nim.git
synced 2026-01-05 20:47:53 +00:00
* WIP: an optimizer for ARC * do not optimize away destructors in 'finally' if unstructured control flow is involved * optimized the optimizer * minor code cleanup * first steps to .cursor inference * cursor inference: big steps to a working solution * baby steps * better .cursor inference * new feature: expandArc for easy inspection of the AST after ARC transformations * added topt_cursor test * adapt tests * cleanups, make tests green * optimize common traversal patterns * moved test case * fixes .cursor inference so that npeg compiles once again * cursor inference: more bugfixes Co-authored-by: Clyybber <darkmine956@gmail.com>
41 lines
641 B
Nim
41 lines
641 B
Nim
discard """
|
|
cmd: '''nim c --newruntime $file'''
|
|
output: '''2
|
|
2'''
|
|
"""
|
|
|
|
type
|
|
ObjWithDestructor = object
|
|
a: int
|
|
proc `=destroy`(self: var ObjWithDestructor) =
|
|
echo "destroyed"
|
|
|
|
proc `=`(self: var ObjWithDestructor, other: ObjWithDestructor) =
|
|
echo "copied"
|
|
|
|
proc test(a: range[0..1], arg: ObjWithDestructor) =
|
|
var iteration = 0
|
|
while true:
|
|
{.computedGoto.}
|
|
|
|
let
|
|
b = int(a) * 2
|
|
c = a
|
|
d = arg
|
|
e = arg
|
|
|
|
discard c
|
|
discard d
|
|
discard e
|
|
|
|
inc iteration
|
|
|
|
case a
|
|
of 0:
|
|
assert false
|
|
of 1:
|
|
echo b
|
|
if iteration == 2:
|
|
break
|
|
|
|
test(1, ObjWithDestructor()) |