This commit is contained in:
Zahary Karadjov
2017-06-10 22:03:35 +03:00
committed by Andreas Rumpf
parent 9c6fe59b55
commit ba61e7e3ac
3 changed files with 51 additions and 1 deletions

View File

@@ -127,7 +127,8 @@ proc replaceTypeVarsT*(cl: var TReplTypeVars, t: PType): PType =
proc prepareNode(cl: var TReplTypeVars, n: PNode): PNode =
let t = replaceTypeVarsT(cl, n.typ)
if t != nil and t.kind == tyStatic and t.n != nil:
return t.n
return if tfUnresolved in t.flags: prepareNode(cl, t.n)
else: t.n
result = copyNode(n)
result.typ = t
if result.kind == nkSym: result.sym = replaceTypeVarsS(cl, n.sym)

View File

@@ -1781,6 +1781,13 @@ proc paramTypesMatchAux(m: var TCandidate, f, a: PType,
arg.typ.sons = @[evaluated.typ]
arg.typ.n = evaluated
a = arg.typ
else:
if m.callee.kind == tyGenericBody:
if f.kind == tyStatic and typeRel(m, f.base, a) != isNone:
result = makeStaticExpr(m.c, arg)
result.typ.flags.incl tfUnresolved
result.typ.n = arg
return
var r = typeRel(m, f, a)

View File

@@ -0,0 +1,42 @@
discard """
output: '''
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
'''
"""
# https://github.com/nim-lang/Nim/issues/4880
proc `^^`(x: int): int = x * 2
type
Foo[x: static[int]] = array[x, int]
Bar[a, b: static[int]] = array[b, Foo[^^a]]
var x: Bar[2, 3]
echo repr(x)
# https://github.com/nim-lang/Nim/issues/2730
type
Matrix[M,N: static[int]] = distinct array[0..(M*N - 1), int]
proc bigger[M,N](m: Matrix[M,N]): Matrix[(M * N) div 8, (M * N)] =
discard
proc bigger2[M,N](m: Matrix[M,N]): Matrix[M * 2, N * 2] =
discard
var m : Matrix[4, 4]
var n = bigger(m)
var o = bigger2(m)
echo repr(m)
echo repr(n)
echo repr(o)