parent
0149e418be
commit
367d232351
3 changed files with 27 additions and 1 deletions
|
|
@ -446,7 +446,8 @@ proc explicitGenericSym(c: PContext, n: PNode, s: PSym): PNode =
|
||||||
proc explicitGenericInstantiation(c: PContext, n: PNode, s: PSym): PNode =
|
proc explicitGenericInstantiation(c: PContext, n: PNode, s: PSym): PNode =
|
||||||
assert n.kind == nkBracketExpr
|
assert n.kind == nkBracketExpr
|
||||||
for i in 1..sonsLen(n)-1:
|
for i in 1..sonsLen(n)-1:
|
||||||
n.sons[i].typ = semTypeNode(c, n.sons[i], nil)
|
let e = semExpr(c, n.sons[i])
|
||||||
|
n.sons[i].typ = e.typ.skipTypes({tyTypeDesc})
|
||||||
var s = s
|
var s = s
|
||||||
var a = n.sons[0]
|
var a = n.sons[0]
|
||||||
if a.kind == nkSym:
|
if a.kind == nkSym:
|
||||||
|
|
|
||||||
|
|
@ -1578,6 +1578,12 @@ proc typeRelImpl(c: var TCandidate, f, aOrig: PType,
|
||||||
if not exprStructuralEquivalent(f.n, aOrig.n):
|
if not exprStructuralEquivalent(f.n, aOrig.n):
|
||||||
result = isNone
|
result = isNone
|
||||||
if result != isNone: put(c, f, aOrig)
|
if result != isNone: put(c, f, aOrig)
|
||||||
|
elif aOrig.n != nil:
|
||||||
|
result = typeRel(c, f.lastSon, aOrig.n.typ)
|
||||||
|
if result != isNone:
|
||||||
|
var boundType = newTypeWithSons(c.c, tyStatic, @[aOrig.n.typ])
|
||||||
|
boundType.n = aOrig.n
|
||||||
|
put(c, f, boundType)
|
||||||
else:
|
else:
|
||||||
result = isNone
|
result = isNone
|
||||||
elif prev.kind == tyStatic:
|
elif prev.kind == tyStatic:
|
||||||
|
|
|
||||||
19
tests/statictypes/texplicitprocparams.nim
Normal file
19
tests/statictypes/texplicitprocparams.nim
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
discard """
|
||||||
|
output: '''
|
||||||
|
(x: 100)
|
||||||
|
5
|
||||||
|
'''
|
||||||
|
"""
|
||||||
|
|
||||||
|
type
|
||||||
|
OdArray*[As: static[int], T] = object
|
||||||
|
x: int
|
||||||
|
|
||||||
|
proc initOdArray*[As: static[int], T](len: int): OdArray[As, T] =
|
||||||
|
result.l = len
|
||||||
|
|
||||||
|
echo initOdArray[10, int](100)
|
||||||
|
|
||||||
|
proc doStatic[N: static[int]](): int = N
|
||||||
|
echo doStatic[5]()
|
||||||
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue