123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- discard """
- output: '''Got: 'nnkCall' hi
- {a}
- {b}
- {a, b}'''
- """
- import macros
- 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))
|