blob: 706281d133cf6d5b03b2f07d9ef0f92036ca0eb5 (
plain) (
tree)
|
|
discard """
output: '''Got: 'nnkCall' hi
{a}
{b}
{a, b}'''
"""
import
macros, strutils
macro outterMacro*(n, blck: untyped): untyped =
let n = callsite()
var j : string = "hi"
proc innerProc(i: int): string =
echo "Using arg ! " & n.repr
result = "Got: '" & $n.kind & "' " & $j
var callNode = n[0]
expectKind(n, NimNodeKind.nnkCall)
if n.len != 3 or n[1].kind != NimNodeKind.nnkIdent:
error("Macro " & callNode.repr &
" requires the ident passed as parameter (eg: " & callNode.repr &
"(the_name_you_want)): statements.")
result = newNimNode(NimNodeKind.nnkStmtList)
var ass : NimNode = newNimNode(nnkAsgn)
ass.add(newIdentNode(n[1].ident))
ass.add(newStrLitNode(innerProc(4)))
result.add(ass)
var str: string
outterMacro(str):
"hellow"
echo str
type E = enum a b
macro enumerators1(): set[E] = newLit({a})
macro enumerators2(): set[E] =
return newLit({b})
macro enumerators3(): set[E] =
result = newLit({E.low .. E.high})
var myEnums: set[E]
myEnums = enumerators1()
echo myEnums
myEnums = enumerators2()
echo myEnums
myEnums = enumerators3()
echo myEnums
#10751
type Tuple = tuple
a: string
b: int
macro foo(t: static Tuple): untyped =
doAssert t.a == "foo"
doAssert t.b == 12345
foo((a: "foo", b: 12345))
|