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
37
tests/arc/topt_no_cursor.nim
Normal file
37
tests/arc/topt_no_cursor.nim
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
discard """
|
||||
output: '''(repo: "", package: "meo", ext: "")'''
|
||||
cmd: '''nim c --gc:arc --expandArc:newTarget --hint:Performance:off $file'''
|
||||
nimout: '''--expandArc: newTarget
|
||||
|
||||
var
|
||||
splat
|
||||
:tmp
|
||||
:tmp_1
|
||||
:tmp_2
|
||||
splat = splitFile(path)
|
||||
:tmp = splat.dir
|
||||
wasMoved(splat.dir)
|
||||
:tmp_1 = splat.name
|
||||
wasMoved(splat.name)
|
||||
:tmp_2 = splat.ext
|
||||
wasMoved(splat.ext)
|
||||
result = (
|
||||
let blitTmp = :tmp
|
||||
blitTmp,
|
||||
let blitTmp_1 = :tmp_1
|
||||
blitTmp_1,
|
||||
let blitTmp_2 = :tmp_2
|
||||
blitTmp_2)
|
||||
`=destroy`(splat)
|
||||
-- end of expandArc ------------------------'''
|
||||
"""
|
||||
|
||||
import os
|
||||
|
||||
type Target = tuple[repo, package, ext: string]
|
||||
|
||||
proc newTarget*(path: string): Target =
|
||||
let splat = path.splitFile
|
||||
result = (repo: splat.dir, package: splat.name, ext: splat.ext)
|
||||
|
||||
echo newTarget("meo")
|
||||
Loading…
Add table
Add a link
Reference in a new issue