mirror of
https://github.com/nim-lang/Nim.git
synced 2026-06-06 20:04:18 +00:00
committed by
Andreas Rumpf
parent
9c6fe59b55
commit
ba61e7e3ac
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
42
tests/statictypes/tpassthruarith.nim
Normal file
42
tests/statictypes/tpassthruarith.nim
Normal 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)
|
||||
|
||||
Reference in New Issue
Block a user