diff options
author | Jasper Jenkins <jasper.vs.jenkins@gmail.com> | 2019-05-08 14:29:42 -0700 |
---|---|---|
committer | Jasper Jenkins <jasper.vs.jenkins@gmail.com> | 2019-05-08 14:29:42 -0700 |
commit | 55a3b51e40a7d3301a114a66712c5daebae0ac6d (patch) | |
tree | 99ad0221540ef618e21c34aea14e917ed845ec4a | |
parent | aa768574620c46b1ecc4c63f202a4fdb24c4b3f1 (diff) | |
download | Nim-55a3b51e40a7d3301a114a66712c5daebae0ac6d.tar.gz |
fix complex typdesc iterators
-rw-r--r-- | compiler/transf.nim | 1 | ||||
-rw-r--r-- | tests/iter/titertypedesc.nim | 17 |
2 files changed, 18 insertions, 0 deletions
diff --git a/compiler/transf.nim b/compiler/transf.nim index 0e788b833..c4da48d53 100644 --- a/compiler/transf.nim +++ b/compiler/transf.nim @@ -560,6 +560,7 @@ type proc putArgInto(arg: PNode, formal: PType): TPutArgInto = # This analyses how to treat the mapping "formal <-> arg" in an # inline context. + if formal.kind == tyTypeDesc: return paDirectMapping if skipTypes(formal, abstractInst).kind in {tyOpenArray, tyVarargs}: if arg.kind == nkStmtListExpr: return paComplexOpenarray diff --git a/tests/iter/titertypedesc.nim b/tests/iter/titertypedesc.nim new file mode 100644 index 000000000..a69f703c6 --- /dev/null +++ b/tests/iter/titertypedesc.nim @@ -0,0 +1,17 @@ +discard """ + output: '''0 +(id: 0) +@[] +[0, 0, 0]''' +""" + +iterator foo*(T: typedesc): T = + var x: T + yield x + +for a in foo(int): echo a +for b in foo(tuple[id: int]): echo b +for c in foo(seq[int]): echo c + +type Generic[T] = T +for d in foo(Generic[array[0..2, int]]): echo d |