An optimizer for ARC (#14962)
* 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>
This commit is contained in:
parent
813dd1b670
commit
c5358b0d4b
19 changed files with 895 additions and 62 deletions
39
tests/arc/topt_refcursors.nim
Normal file
39
tests/arc/topt_refcursors.nim
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
discard """
|
||||
output: ''''''
|
||||
cmd: '''nim c --gc:arc --expandArc:traverse --hint:Performance:off $file'''
|
||||
nimout: '''--expandArc: traverse
|
||||
|
||||
var it = root
|
||||
block :tmp:
|
||||
while (
|
||||
not (it == nil)):
|
||||
echo [it.s]
|
||||
it = it.ri
|
||||
var jt = root
|
||||
block :tmp_1:
|
||||
while (
|
||||
not (jt == nil)):
|
||||
let ri_1 = jt.ri
|
||||
echo [jt.s]
|
||||
jt = ri_1
|
||||
-- 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)
|
||||
Loading…
Add table
Add a link
Reference in a new issue