summary refs log tree commit diff stats
path: root/tests/macros/tmacrogetimpl.nim
diff options
context:
space:
mode:
authorDylan Modesitt <dylanmodesitt@gmail.com>2021-05-31 16:51:32 -0400
committerGitHub <noreply@github.com>2021-05-31 22:51:32 +0200
commit06d50bfd4cac6611c5fc775c8130cad87e4dcee1 (patch)
tree646cd0670f67dfbcbcc1db445dac5bb3f96a4e8e /tests/macros/tmacrogetimpl.nim
parent369a7d12467831295c12f5f51aa8c69ec3b3596a (diff)
downloadNim-06d50bfd4cac6611c5fc775c8130cad87e4dcee1.tar.gz
Fixes #5034 illformed AST from getImpl with proc returning value (#17976)
* Fixes 5034

* address comments
Diffstat (limited to 'tests/macros/tmacrogetimpl.nim')
-rw-r--r--tests/macros/tmacrogetimpl.nim31
1 files changed, 31 insertions, 0 deletions
diff --git a/tests/macros/tmacrogetimpl.nim b/tests/macros/tmacrogetimpl.nim
new file mode 100644
index 000000000..1d996ff29
--- /dev/null
+++ b/tests/macros/tmacrogetimpl.nim
@@ -0,0 +1,31 @@
+import macros
+
+# bug #5034
+
+macro copyImpl(srsProc: typed, toSym: untyped) =
+  result = copyNimTree(getImplTransformed(srsProc))
+  result[0] = ident $toSym.toStrLit()
+
+proc foo1(x: float, one: bool = true): float =
+  if one:
+    return 1'f
+  result = x
+
+proc bar1(what: string): string =
+  ## be a little more adversarial with `skResult`
+  proc buzz: string =
+    result = "lightyear"
+  if what == "buzz":
+    result = "buzz " & buzz()
+  else:
+    result = what
+  return result
+
+copyImpl(foo1, foo2)
+doAssert foo1(1'f) == 1.0
+doAssert foo2(10.0, false) == 10.0
+doAssert foo2(10.0) == 1.0
+
+copyImpl(bar1, bar2)
+doAssert bar1("buzz") == "buzz lightyear"
+doAssert bar1("macros") == "macros"