fixed incorrect implicit conversion between arrays of different sizes; see #202

This commit is contained in:
Zahary Karadjov
2012-09-13 03:02:36 +03:00
parent 254bc714dd
commit b2814df5cd
2 changed files with 25 additions and 13 deletions

View File

@@ -370,23 +370,22 @@ proc typeRel(c: var TCandidate, f, a: PType): TTypeRelation =
of tyVar:
if a.kind == f.kind: result = typeRel(c, base(f), base(a))
else: result = typeRel(c, base(f), a)
of tyArray, tyArrayConstr:
of tyArray, tyArrayConstr:
# tyArrayConstr cannot happen really, but
# we wanna be safe here
case a.kind
of tyArray:
result = minRel(typeRel(c, f.sons[0], a.sons[0]),
typeRel(c, f.sons[1], a.sons[1]))
if result < isGeneric: result = isNone
of tyArrayConstr:
of tyArray, tyArrayConstr:
var fRange = f.sons[0]
if fRange.kind == tyGenericParam:
var prev = PType(idTableGet(c.bindings, fRange))
if prev == nil:
put(c.bindings, fRange, a.sons[0])
fRange = a
else:
fRange = prev
result = typeRel(c, f.sons[1], a.sons[1])
if result < isGeneric:
result = isNone
else:
if (result != isGeneric) and (lengthOrd(f) != lengthOrd(a)):
result = isNone
elif f.sons[0].kind in GenericTypes:
result = minRel(result, typeRel(c, f.sons[0], a.sons[0]))
if result < isGeneric: result = isNone
elif lengthOrd(fRange) != lengthOrd(a): result = isNone
else: nil
of tyOpenArray, tyVarargs:
case a.Kind

View File

@@ -0,0 +1,13 @@
discard """
msg: "type mismatch: got (array[0..2, float], array[0..1, float])"
"""
proc `+`*[R, T] (v1, v2: array[R, T]): array[R, T] =
for i in low(v1)..high(v1):
result[i] = v1[i] + v2[i]
var
v1: array[0..2, float] = [3.0, 1.2, 3.0]
v2: array[0..1, float] = [2.0, 1.0]
v3 = v1 + v2