Skip to content

Commit 5f4f70b

Browse files
committed
it works sort of
1 parent be94444 commit 5f4f70b

File tree

1 file changed

+14
-17
lines changed

1 file changed

+14
-17
lines changed

breeze.nim

+14-17
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import macros, strutils, sequtils
1+
import macros, sequtils
22

33
proc build(b: NimNode): NimNode
44

@@ -14,6 +14,13 @@ proc buildInline(args: NimNode): seq[NimNode] =
1414
else:
1515
isArg = true
1616

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+
1724
proc buildIdent(b: NimNode): NimNode =
1825
result = nnkCall.newTree(
1926
newIdentNode("newIdentNode"), b)
@@ -31,7 +38,7 @@ proc build(b: NimNode): NimNode =
3138
of nnkVarSection:
3239
result = b
3340
of nnkCall:
34-
var label = name(b[0])
41+
var label = labelOf(b[0])
3542
if label.eqIdent"ident":
3643
result = buildIdent(newLit($b[1]))
3744
result = quote:
@@ -144,19 +151,9 @@ macro buildMacro*(b: untyped): untyped =
144151
echo "build:\n", repr(result)
145152

146153
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")
149156
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

Comments
 (0)