diff options
author | solo989 <solo989@yahoo.com> | 2020-06-16 13:35:41 -0700 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2020-06-19 09:53:06 +0200 |
commit | 408518c9fed9757fd1cc246e3ced05ecbb3bcaab (patch) | |
tree | 6411af58c1b02a0f5732187c8ddefd105a520c6d /lib | |
parent | 99ad65fdd616e2bc21a688acffb9f5f310b70066 (diff) | |
download | Nim-408518c9fed9757fd1cc246e3ced05ecbb3bcaab.tar.gz |
Update tuple newLit
Diffstat (limited to 'lib')
-rw-r--r-- | lib/core/macros.nim | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/lib/core/macros.nim b/lib/core/macros.nim index 856c4f2c1..04a85d355 100644 --- a/lib/core/macros.nim +++ b/lib/core/macros.nim @@ -760,7 +760,7 @@ proc newLit*(arg: enum): NimNode {.compileTime.} = proc newLit*[N,T](arg: array[N,T]): NimNode {.compileTime.} proc newLit*[T](arg: seq[T]): NimNode {.compileTime.} proc newLit*[T](s: set[T]): NimNode {.compileTime.} -proc newLit*(arg: tuple): NimNode {.compileTime.} +proc newLit*[T: tuple](arg: T): NimNode {.compileTime.} proc newLit*(arg: object): NimNode {.compileTime.} = result = nnkObjConstr.newTree(arg.type.getTypeInst[1]) @@ -800,10 +800,17 @@ proc newLit*[T](s: set[T]): NimNode {.compileTime.} = var typ = getTypeInst(typeof(s))[1] result = newCall(typ,result) -proc newLit*(arg: tuple): NimNode {.compileTime.} = - result = nnkPar.newTree - for a,b in arg.fieldPairs: - result.add nnkExprColonExpr.newTree(newIdentNode(a), newLit(b)) +proc isNamedTuple(T: typedesc): bool {.magic: "TypeTrait".} + ## See typetraits.isNamedTuple + +proc newLit*[T: tuple](arg: T): NimNode {.compileTime.} = + result = nnkTupleConstr.newTree + when isNamedTuple(T): + for a,b in arg.fieldPairs: + result.add nnkExprColonExpr.newTree(newIdentNode(a), newLit(b)) + else: + for b in arg.fields: + result.add newLit(b) proc nestList*(op: NimNode; pack: NimNode): NimNode {.compileTime.} = ## Nests the list `pack` into a tree of call expressions: |