Add sym owner to macros (#8253)

This commit is contained in:
cooldome 2018-09-03 12:25:59 +01:00 • committed by Andreas Rumpf
commit e63c66b810
7 changed files with 50 additions and 3 deletions

View file

@ -1,6 +1,7 @@
discard """
msg: '''"muhaha"
proc poo(x, y: int) =
let y = x
echo ["poo"]'''
"""
@ -10,11 +11,39 @@ const
foo = "muhaha"
proc poo(x, y: int) =
let y = x
echo "poo"
macro m(x: typed): untyped =
echo repr x.symbol.getImpl
echo repr x.getImpl
result = x
discard m foo
discard m poo
#------------
macro checkOwner(x: typed, check_id: static[int]): untyped =
let sym = case check_id:
of 0: x
of 1: x.getImpl.body[0][0][0]
of 2: x.getImpl.body[0][0][^1]
of 3: x.getImpl.body[1][0]
else: x
result = newStrLitNode($sym.owner.symKind)
macro isSameOwner(x, y: typed): untyped =
result =
if x.owner == y.owner: bindSym"true"
else: bindSym"false"
static:
doAssert checkOwner(foo, 0) == "nskModule"
doAssert checkOwner(poo, 0) == "nskModule"
doAssert checkOwner(poo, 1) == "nskProc"
doAssert checkOwner(poo, 2) == "nskProc"
doAssert checkOwner(poo, 3) == "nskModule"
doAssert isSameOwner(foo, poo)
doAssert isSameOwner(foo, echo) == false
doAssert isSameOwner(poo, len) == false