newLit emty seq fix (#6091)

* the type of the empty seq is still the correct type
* updated test
This commit is contained in:
Arne Döring
2017-07-13 17:07:33 +02:00
committed by Andreas Rumpf
parent 03e0aa37e3
commit 52cab78ae5
2 changed files with 19 additions and 3 deletions

View File

@@ -527,10 +527,17 @@ proc newLit*[N,T](arg: array[N,T]): NimNode {.compileTime.} =
result.add newLit(x)
proc newLit*[T](arg: seq[T]): NimNode {.compileTime.} =
result = nnkBracket.newTree
var bracket = nnkBracket.newTree
for x in arg:
result.add newLit(x)
result = nnkPrefix.newTree(bindSym"@", result)
bracket.add newLit(x)
result = nnkCall.newTree(
nnkBracketExpr.newTree(
nnkAccQuoted.newTree( bindSym"@" ),
getTypeInst( bindSym"T" )
),
bracket
)
proc newLit*(arg: tuple): NimNode {.compileTime.} =
result = nnkPar.newTree

View File

@@ -138,3 +138,12 @@ macro test_newLit_ComposedType: untyped =
result = newLit(ct)
doAssert test_newLit_ComposedType == ComposedType(mt: MyType(a: 123, b:"abc"), arr: [1,2,3,4], data: @[1.byte, 3, 7, 127])
macro test_newLit_empty_seq_string: untyped =
var strSeq = newSeq[string](0)
result = newLit(strSeq)
block:
# x needs to be of type seq[string]
var x = test_newLit_empty_seq_string
x.add("xyz")