Skip to content

Commit df8dd1b

Browse files
authored
Merge pull request #1 from planetis-m/fix
[WIP] Fixes
2 parents 49c5ba8 + 5f4f70b commit df8dd1b

File tree

1 file changed

+32
-33
lines changed

1 file changed

+32
-33
lines changed

breeze.nim

+32-33
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
import macros, strutils, sequtils, tables
2-
3-
const debugMacro = false
1+
import macros, sequtils
42

53
proc build(b: NimNode): NimNode
64

@@ -17,24 +15,21 @@ proc buildInline(args: NimNode): seq[NimNode] =
1715
isArg = true
1816

1917
proc labelOf(b: NimNode): string =
20-
assert b.kind in {nnkIdent, nnkAccQuoted}
18+
expectKind b, {nnkIdent, nnkAccQuoted}
2119
if b.kind == nnkAccQuoted:
2220
result = labelOf(b[0])
2321
else:
24-
result = $b.ident
22+
result = $b
2523

2624
proc buildIdent(b: NimNode): NimNode =
2725
result = nnkCall.newTree(
28-
newIdentNode(!"newIdentNode"),
29-
nnkPrefix.newTree(
30-
newIdentNode(!"!"),
31-
b))
26+
newIdentNode("newIdentNode"), b)
3227

3328
proc build(b: NimNode): NimNode =
34-
var resultNode = newIdentNode(!"result")
35-
var stmtsNode = newIdentNode(!"stmts")
36-
var lastNode = newIdentNode(!"last")
37-
var x = newIdentNode(!"x")
29+
var resultNode = newIdentNode("result")
30+
var stmtsNode = newIdentNode("stmts")
31+
var lastNode = newIdentNode("last")
32+
var x = newIdentNode("x")
3833
case b.kind:
3934
of nnkStmtList:
4035
result = nnkStmtList.newTree()
@@ -44,8 +39,7 @@ proc build(b: NimNode): NimNode =
4439
result = b
4540
of nnkCall:
4641
var label = labelOf(b[0])
47-
case label:
48-
of "ident":
42+
if label.eqIdent"ident":
4943
result = buildIdent(newLit($b[1]))
5044
result = quote:
5145
`lastNode`.add(`result`)
@@ -55,11 +49,11 @@ proc build(b: NimNode): NimNode =
5549
args = buildCall(b[1])
5650
else:
5751
args = buildInline(b)
58-
var callIdent = newIdentNode(!("nnk$1" % capitalizeAscii(label)))
52+
var callIdent = newIdentNode("nnk" & $label)
5953
result = nnkCall.newTree(
6054
nnkDotExpr.newTree(
6155
callIdent,
62-
newIdentNode(!"newTree")))
56+
newIdentNode("newTree")))
6357
result = quote:
6458
`x` = `result`
6559
`lastNode`.add(`x`)
@@ -72,14 +66,14 @@ proc build(b: NimNode): NimNode =
7266
result.add(b)
7367
of nnkCharLit..nnkUInt64Lit, nnkFloatLit..nnkFloat64Lit, nnkStrLit..nnkTripleStrLit:
7468
result = nnkCall.newTree(
75-
newIdentNode(!"newLit"),
69+
newIdentNode("newLit"),
7670
b)
7771
result = quote:
7872
`lastNode`.add(`result`)
7973
of nnkIdent:
8074
if $b == "true" or $b == "false":
8175
result = nnkCall.newTree(
82-
newIdentNode(!"newLit"),
76+
newIdentNode("newLit"),
8377
b)
8478
else:
8579
result = b
@@ -103,7 +97,7 @@ proc build(b: NimNode): NimNode =
10397
build(branch[0])))
10498
of nnkInfix:
10599
if b[1].kind == nnkStrLit:
106-
var newLitNode = newIdentNode(!"newLit")
100+
var newLitNode = newIdentNode("newLit")
107101
result = quote:
108102
`newLitNode`(`b`)
109103
else:
@@ -122,39 +116,44 @@ proc build(b: NimNode): NimNode =
122116
else:
123117
result = quote:
124118
`lastNode`.add(`b`)
125-
when debugMacro:
126-
echo treerepr(b)
127-
else:
128-
discard
119+
when defined(debugBreeze):
120+
echo treeRepr(b)
129121

130122
macro buildMacro*(b: untyped): untyped =
131-
var stmtsNode = newIdentNode(!"stmts")
132-
var lastNode = newIdentNode(!"last")
133-
var x = newIdentNode(!"x")
134-
var resultNode = newIdentNode(!"result")
123+
var stmtsNode = newIdentNode("stmts")
124+
var lastNode = newIdentNode("last")
125+
var x = newIdentNode("x")
126+
var resultNode = newIdentNode("result")
135127
var start = quote:
136128
var `stmtsNode` = nnkStmtList.newTree()
137129
var `lastNode` = `stmtsNode`
138130
var `x`: NimNode
139131
var finish = quote:
140132
`resultNode` = `stmtsNode`
141-
133+
142134
start.add(build(b))
143135
start.add(finish)
144136
var empty = newEmptyNode()
145-
137+
146138
result = nnkCall.newTree(
147139
nnkPar.newTree(
148140
nnkLambda.newTree(
149141
empty,
150142
empty,
151143
empty,
152144
nnkFormalParams.newTree(
153-
newIdentNode(!"NimNode")),
145+
newIdentNode("NimNode")),
154146
empty,
155147
empty,
156148
start)))
157149

158-
when debugMacro:
159-
echo "build: $1" % repr(result)
150+
when defined(debugBreeze):
151+
echo "build:\n", repr(result)
160152

153+
when isMainModule:
154+
macro s(b: untyped): untyped =
155+
var e = newIdentNode("e")
156+
result = buildMacro:
157+
call:
158+
dotExpr(e, ident("f"))
159+
infix(ident("+"), 2, 3)

0 commit comments

Comments
 (0)