diff options
author | Araq <rumpf_a@web.de> | 2019-06-04 11:16:11 +0200 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2019-06-04 11:16:30 +0200 |
commit | 5f4e8dc4c9f4a7046b79c247c5b0f0198b74b60b (patch) | |
tree | 253963340a38748000ab899bc82bd296009cb7bb /tests | |
parent | 55af21c6620a4e80f1a0de67e09760ba5ba08278 (diff) | |
download | Nim-5f4e8dc4c9f4a7046b79c247c5b0f0198b74b60b.tar.gz |
added a nice test case for macro based lookup tables
Diffstat (limited to 'tests')
-rw-r--r-- | tests/macros/tmacros_various.nim | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/tests/macros/tmacros_various.nim b/tests/macros/tmacros_various.nim index b722298dc..e40309174 100644 --- a/tests/macros/tmacros_various.nim +++ b/tests/macros/tmacros_various.nim @@ -19,6 +19,8 @@ proc foo[T; N: static[int]]() a[0]: 42 a[1]: 45 x: some string +([("key", "val"), ("keyB", "2")], [("val", "key"), ("2", "keyB")]) +([("key", "val"), ("keyB", "2")], [("val", "key"), ("2", "keyB")]) ''' """ @@ -114,3 +116,29 @@ block tdebugstmt: a[1] = 45 debug(a[0], a[1], x) + +const + pairs = {"key": "val", "keyB": "2"} + +macro bilookups(arg: static[openArray[(string, string)]]): untyped = + var a = newTree(nnkBracket) + var b = newTree(nnkBracket) + for (k, v) in items(arg): + a.add(newTree(nnkTupleConstr, newLit k, newLit v)) + b.add(newTree(nnkTupleConstr, newLit v, newLit k)) + result = newTree(nnkTupleConstr, a, b) + +macro bilookups2(arg: untyped): untyped = + var a = newTree(nnkBracket) + var b = newTree(nnkBracket) + arg.expectKind(nnkTableConstr) + for x in items(arg): + x.expectKind(nnkExprColonExpr) + a.add(newTree(nnkTupleConstr, x[0], x[1])) + b.add(newTree(nnkTupleConstr, x[1], x[0])) + result = newTree(nnkTupleConstr, a, b) + +const cnst1 = bilookups(pairs) +echo cnst1 +const cnst2 = bilookups2({"key": "val", "keyB": "2"}) +echo cnst2 |