Allow use of typedesc as type converters (#8409)

Fixes #8403
This commit is contained in:
LemonBoy
2018-07-24 08:25:08 +02:00
committed by Andreas Rumpf
parent 13df807576
commit d5c9255cab
2 changed files with 19 additions and 2 deletions

View File

@@ -1577,8 +1577,14 @@ proc semTypeNode(c: PContext, n: PNode, prev: PType): PType =
result = prev
of nkSym:
let s = getGenSym(c, n.sym)
if s.kind == skType and s.typ != nil:
var t = s.typ
if s.kind == skType and s.typ != nil or
s.kind == skParam and s.typ.kind == tyTypeDesc:
var t =
if s.kind == skType:
s.typ
else:
internalAssert c.config, s.typ.base.kind != tyNone and prev == nil
s.typ.base
let alias = maybeAliasType(c, t, prev)
if alias != nil:
result = alias

11
tests/generics/t8403.nim Normal file
View File

@@ -0,0 +1,11 @@
discard """
output: "6.0"
"""
proc sum*[T](s: seq[T], R: typedesc): R =
var sum: R = 0
for x in s:
sum += R(x)
return sum
echo @[1, 2, 3].sum(float)