1
- import macros, strutils, sequtils
1
+ import macros, sequtils
2
2
3
3
proc build (b: NimNode ): NimNode
4
4
@@ -14,6 +14,13 @@ proc buildInline(args: NimNode): seq[NimNode] =
14
14
else :
15
15
isArg = true
16
16
17
+ proc labelOf (b: NimNode ): string =
18
+ expectKind b, {nnkIdent, nnkAccQuoted}
19
+ if b.kind == nnkAccQuoted:
20
+ result = labelOf (b[0 ])
21
+ else :
22
+ result = $ b
23
+
17
24
proc buildIdent (b: NimNode ): NimNode =
18
25
result = nnkCall.newTree (
19
26
newIdentNode (" newIdentNode" ), b)
@@ -31,7 +38,7 @@ proc build(b: NimNode): NimNode =
31
38
of nnkVarSection:
32
39
result = b
33
40
of nnkCall:
34
- var label = name (b[0 ])
41
+ var label = labelOf (b[0 ])
35
42
if label.eqIdent " ident" :
36
43
result = buildIdent (newLit ($ b[1 ]))
37
44
result = quote:
@@ -144,19 +151,9 @@ macro buildMacro*(b: untyped): untyped =
144
151
echo " build:\n " , repr (result )
145
152
146
153
when isMainModule :
147
- macro cases (state, event, table : untyped ): untyped =
148
- expectKind (table[ 0 ], nnkBracket )
154
+ macro s (b : untyped ): untyped =
155
+ var e = newIdentNode ( " e " )
149
156
result = buildMacro:
150
- caseStmt (state):
151
- for n in table[0 ]:
152
- expectKind (n, nnkExprColonExpr)
153
- expectKind (n[1 ], nnkBracket)
154
- expectMinLen (n[1 ], 1 )
155
- ofBranch (n[0 ]):
156
- ifStmt:
157
- for m in n[1 ]:
158
- expectKind (m, nnkExprColonExpr)
159
- elifBranch (call (ident " ==" , m[0 ], event)):
160
- asgn (state, call (m[1 ]))
161
- `else`:
162
- discardStmt (empty)
157
+ call:
158
+ dotExpr (e, ident (" f" ))
159
+ infix (ident (" +" ), 2 , 3 )
0 commit comments