diff options
author | Zahary Karadjov <zahary@gmail.com> | 2017-10-07 22:17:16 +0300 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2017-12-21 11:06:36 +0100 |
commit | 057d5789ba6cf7e1f0cef681ffba77b0c4788110 (patch) | |
tree | 847aeb3ca7418792af594ff209f9641de0c3dfeb | |
parent | 70380882c54a6eea08c715b015399673b55e9bc0 (diff) | |
download | Nim-057d5789ba6cf7e1f0cef681ffba77b0c4788110.tar.gz |
fix #6277
-rw-r--r-- | compiler/ccgexprs.nim | 2 | ||||
-rw-r--r-- | tests/concepts/titerable.nim | 20 |
2 files changed, 21 insertions, 1 deletions
diff --git a/compiler/ccgexprs.nim b/compiler/ccgexprs.nim index dd526c5fb..da92b281e 100644 --- a/compiler/ccgexprs.nim +++ b/compiler/ccgexprs.nim @@ -849,7 +849,7 @@ proc genArrayElem(p: BProc, n, x, y: PNode, d: var TLoc) = var a, b: TLoc initLocExpr(p, x, a) initLocExpr(p, y, b) - var ty = skipTypes(skipTypes(a.t, abstractVarRange), abstractPtrs) + var ty = skipTypes(a.t, abstractVarRange + abstractPtrs + tyUserTypeClasses) var first = intLiteral(firstOrd(ty)) # emit range check: if optBoundsCheck in p.options and tfUncheckedArray notin ty.flags: diff --git a/tests/concepts/titerable.nim b/tests/concepts/titerable.nim new file mode 100644 index 000000000..b18658b2a --- /dev/null +++ b/tests/concepts/titerable.nim @@ -0,0 +1,20 @@ +discard """ + nimout: "int\nint" + output: 15 +""" + +import typetraits + +type + Iterable[T] = concept x + for value in x: + type(value) is T + +proc sum*[T](iter: Iterable[T]): T = + static: echo T.name + for element in iter: + static: echo element.type.name + result += element + +echo sum([1, 2, 3, 4, 5]) + |