-
-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
allow full commands and blocks in type sections
- Loading branch information
Showing
3 changed files
with
229 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,210 @@ | ||
discard """ | ||
nimout: ''' | ||
StmtList | ||
TypeSection | ||
TypeDef | ||
Ident "A" | ||
Empty | ||
Call | ||
Ident "call" | ||
IntLit 1 | ||
TypeSection | ||
TypeDef | ||
Ident "B" | ||
Empty | ||
Command | ||
Ident "call" | ||
IntLit 2 | ||
TypeDef | ||
Ident "C" | ||
Empty | ||
Call | ||
Ident "call" | ||
StmtList | ||
IntLit 3 | ||
TypeDef | ||
Ident "D" | ||
Empty | ||
Call | ||
Ident "call" | ||
StmtList | ||
IntLit 4 | ||
TypeSection | ||
TypeDef | ||
Ident "E" | ||
Empty | ||
Call | ||
Ident "call" | ||
IntLit 5 | ||
IntLit 6 | ||
TypeDef | ||
Ident "F" | ||
Empty | ||
Command | ||
Ident "call" | ||
IntLit 7 | ||
IntLit 8 | ||
TypeDef | ||
Ident "G" | ||
Empty | ||
Call | ||
Ident "call" | ||
IntLit 9 | ||
StmtList | ||
IntLit 10 | ||
TypeDef | ||
Ident "H" | ||
Empty | ||
Call | ||
Ident "call" | ||
IntLit 11 | ||
StmtList | ||
IntLit 12 | ||
TypeDef | ||
Ident "I" | ||
Empty | ||
Command | ||
Ident "call" | ||
IntLit 13 | ||
StmtList | ||
IntLit 14 | ||
TypeDef | ||
Ident "J" | ||
Empty | ||
Command | ||
Ident "call" | ||
IntLit 15 | ||
StmtList | ||
IntLit 16 | ||
TypeSection | ||
TypeDef | ||
Ident "K" | ||
Empty | ||
Call | ||
Ident "call" | ||
IntLit 17 | ||
IntLit 18 | ||
IntLit 19 | ||
TypeDef | ||
Ident "L" | ||
Empty | ||
Command | ||
Ident "call" | ||
IntLit 20 | ||
IntLit 21 | ||
IntLit 22 | ||
TypeDef | ||
Ident "M" | ||
Empty | ||
Call | ||
Ident "call" | ||
IntLit 23 | ||
IntLit 24 | ||
StmtList | ||
IntLit 25 | ||
TypeDef | ||
Ident "N" | ||
Empty | ||
Command | ||
Ident "call" | ||
IntLit 26 | ||
IntLit 27 | ||
StmtList | ||
IntLit 28 | ||
TypeDef | ||
Ident "O" | ||
Empty | ||
Command | ||
Ident "call" | ||
IntLit 29 | ||
IntLit 30 | ||
StmtList | ||
IntLit 31 | ||
a: IntLit 1 | ||
a: IntLit 2 | ||
a: StmtList | ||
IntLit 3 | ||
a: StmtList | ||
IntLit 4 | ||
a: IntLit 5 | ||
b: IntLit 6 | ||
a: IntLit 7 | ||
b: IntLit 8 | ||
a: IntLit 9 | ||
b: StmtList | ||
IntLit 10 | ||
a: IntLit 11 | ||
b: StmtList | ||
IntLit 12 | ||
a: IntLit 13 | ||
b: StmtList | ||
IntLit 14 | ||
a: IntLit 15 | ||
b: StmtList | ||
IntLit 16 | ||
a: IntLit 17 | ||
b: IntLit 18 | ||
c: IntLit 19 | ||
a: IntLit 20 | ||
b: IntLit 21 | ||
c: IntLit 22 | ||
a: IntLit 23 | ||
b: IntLit 24 | ||
c: StmtList | ||
IntLit 25 | ||
a: IntLit 26 | ||
b: IntLit 27 | ||
c: StmtList | ||
IntLit 28 | ||
a: IntLit 29 | ||
b: IntLit 30 | ||
c: StmtList | ||
IntLit 31 | ||
''' | ||
""" | ||
import macros | ||
|
||
macro call(a): untyped = | ||
echo "a: ", a.treeRepr | ||
result = ident"int" | ||
macro call(a, b): untyped = | ||
echo "a: ", a.treeRepr | ||
echo "b: ", b.treeRepr | ||
result = ident"int" | ||
macro call(a, b, c): untyped = | ||
echo "a: ", a.treeRepr | ||
echo "b: ", b.treeRepr | ||
echo "c: ", c.treeRepr | ||
result = ident"int" | ||
|
||
macro sections(x): untyped = | ||
echo x.treeRepr | ||
result = newStmtList(x) | ||
for ts in x: | ||
for td in ts: | ||
let t = td[0] | ||
result.add quote do: | ||
doAssert `t` is int | ||
|
||
sections: | ||
type A = call(1) | ||
type | ||
B = call 2 | ||
C = call: 3 | ||
D = call(): 4 | ||
type | ||
E = call(5, 6) | ||
F = call 7, 8 | ||
G = call(9): 10 | ||
H = call(11): | ||
12 | ||
I = call 13: 14 | ||
J = call 15: | ||
16 | ||
type | ||
K = call(17, 18, 19) | ||
L = call 20, 21, 22 | ||
M = call(23, 24): 25 | ||
N = call 26, 27: 28 | ||
O = call 29, 30: | ||
31 |