mirror of
https://github.com/nim-lang/Nim.git
synced 2026-02-18 17:08:32 +00:00
fixes #544
This commit is contained in:
@@ -625,6 +625,10 @@ proc getConstExpr(m: PSym, n: PNode): PNode =
|
||||
result = newIntNodeT(sonsLen(a), n)
|
||||
else:
|
||||
result = magicCall(m, n)
|
||||
of mLengthArray:
|
||||
# It doesn't matter if the argument is const or not for mLengthArray.
|
||||
# This fixes bug #544.
|
||||
result = newIntNodeT(lengthOrd(n.sons[1].typ), n)
|
||||
of mAstToStr:
|
||||
result = newStrNodeT(renderTree(n[1], {renderNoComments}), n)
|
||||
of mConStrStr:
|
||||
|
||||
@@ -841,7 +841,9 @@ proc semTypeNode(c: PContext, n: PNode, prev: PType): PType =
|
||||
LocalError(n.info, errTypeExpected)
|
||||
result = newOrPrevType(tyError, prev, c)
|
||||
of nkCallKinds:
|
||||
if n[0].kind == nkIdent:
|
||||
if isRange(n):
|
||||
result = semRangeAux(c, n, prev)
|
||||
elif n[0].kind == nkIdent:
|
||||
let op = n.sons[0].ident
|
||||
if op.id in {ord(wAnd), ord(wOr)} or op.s == "|":
|
||||
checkSonsLen(n, 3)
|
||||
|
||||
@@ -959,8 +959,8 @@ proc skipGenericAlias*(t: PType): PType =
|
||||
proc matchTypeClass*(bindings: var TIdTable, typeClass, t: PType): bool =
|
||||
for i in countup(0, typeClass.sonsLen - 1):
|
||||
let req = typeClass.sons[i]
|
||||
var match = req.kind == skipTypes(t, {tyRange, tyGenericInst}).kind
|
||||
|
||||
var match = req.kind == skipTypes(t, {tyGenericInst, tyRange}).kind or
|
||||
req.kind == skipTypes(t, {tyGenericInst}).kind
|
||||
if not match:
|
||||
case req.kind
|
||||
of tyGenericBody:
|
||||
|
||||
@@ -46,3 +46,15 @@ while i < s.len:
|
||||
i = i + 1
|
||||
|
||||
write(stdout, "Du heißt " & s)
|
||||
|
||||
# bug #544
|
||||
|
||||
type Bar [T; I:range] = array[I, T]
|
||||
proc foo*[T; I:range](a, b: Bar[T, I]): Bar[T, I] =
|
||||
when len(a) != 3:
|
||||
# Error: constant expression expected
|
||||
{.fatal:"Dimensions have to be 3".}
|
||||
#...
|
||||
block:
|
||||
var a, b: Bar[int, 0..2]
|
||||
discard foo(a, b)
|
||||
|
||||
Reference in New Issue
Block a user