summary refs log tree commit diff stats
path: root/tests/arc/topt_cursor.nim
diff options
context:
space:
mode:
authorAndreas Rumpf <rumpf_a@web.de>2020-07-15 23:00:06 +0200
committerGitHub <noreply@github.com>2020-07-15 23:00:06 +0200
commitc5358b0d4b1d27db04b974a0183c9b7312bc7bdc (patch)
treeca3a71953358c8f9475188045ba61c5dfb5caf87 /tests/arc/topt_cursor.nim
parent813dd1b670b953b0ac8348b04079faadace46c29 (diff)
downloadNim-c5358b0d4b1d27db04b974a0183c9b7312bc7bdc.tar.gz
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>
Diffstat (limited to 'tests/arc/topt_cursor.nim')
-rw-r--r--tests/arc/topt_cursor.nim35
1 files changed, 35 insertions, 0 deletions
diff --git a/tests/arc/topt_cursor.nim b/tests/arc/topt_cursor.nim
new file mode 100644
index 000000000..6b923cf76
--- /dev/null
+++ b/tests/arc/topt_cursor.nim
@@ -0,0 +1,35 @@
+discard """
+  output: '''("string here", 80)'''
+  cmd: '''nim c --gc:arc --expandArc:main --hint:Performance:off $file'''
+  nimout: '''--expandArc: main
+
+var
+  :tmpD
+  :tmpD_1
+  :tmpD_2
+try:
+  var x = ("hi", 5)
+  x = if cond:
+    :tmpD = ("different", 54)
+    :tmpD else:
+    :tmpD_1 = ("string here", 80)
+    :tmpD_1
+  echo [
+    :tmpD_2 = `$`(x)
+    :tmpD_2]
+finally:
+  `=destroy`(:tmpD_2)
+-- end of expandArc ------------------------'''
+"""
+
+proc main(cond: bool) =
+  var x = ("hi", 5) # goal: computed as cursor
+
+  x = if cond:
+        ("different", 54)
+      else:
+        ("string here", 80)
+
+  echo x
+
+main(false)