enable,document,test getImplTransformed, very useful for understanding how nim transforms code (#14924)

* enable,document,test getImplTransformed, very useful for understanding how nim transforms code
This commit is contained in:
Timothee Cour 2020-07-18 01:49:36 -07:00 • committed by GitHub
commit 169ca37d26
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 25 additions and 2 deletions

View file

@ -202,3 +202,23 @@ block tupleNewLitTests:
# this `$` test is needed because tuple equality doesn't distinguish
# between named vs unnamed tuples
doAssert t() == (1, "foo", (), (1, ), (a1: 'x', a2: @["ba"]))
from strutils import contains
block getImplTransformed:
macro bar(a: typed): string =
# newLit a.getImpl.repr # this would be before code transformation
let b = a.getImplTransformed
newLit b.repr
template toExpand() =
for ai in 0..2: echo ai
proc baz(a=1): int =
defer: discard
toExpand()
12
const code = bar(baz)
# sanity check:
doAssert "finally" in code # `defer` is lowered to try/finally
doAssert "while" in code # `for` is lowered to `while`
doAssert "toExpand" notin code
# template is expanded (but that would already be the case with
# `a.getImpl.repr`, unlike the other transformations mentioned above