mirror of
https://github.com/nim-lang/Nim.git
synced 2026-04-21 14:55:24 +00:00
Merge tyUncheckedArray with tySeq in typeRel (#23866)
Ref https://github.com/nim-lang/Nim/issues/23836#issuecomment-2233957324 Their types are basically equivalent so they should behave the same way for type relations.
This commit is contained in:
@@ -1305,11 +1305,6 @@ proc typeRel(c: var TCandidate, f, aOrig: PType,
|
||||
else:
|
||||
if lengthOrd(c.c.config, fRange) != lengthOrd(c.c.config, aRange):
|
||||
result = isNone
|
||||
of tyUncheckedArray:
|
||||
if a.kind == tyUncheckedArray:
|
||||
result = typeRel(c, elementType(f), elementType(a), flags)
|
||||
if result < isGeneric: result = isNone
|
||||
else: discard
|
||||
of tyOpenArray, tyVarargs:
|
||||
# varargs[untyped] is special too but handled earlier. So we only need to
|
||||
# handle varargs[typed]:
|
||||
@@ -1350,9 +1345,8 @@ proc typeRel(c: var TCandidate, f, aOrig: PType,
|
||||
typeRel(c, base(f), base(a), flags) >= isGeneric:
|
||||
result = isConvertible
|
||||
else: discard
|
||||
of tySequence:
|
||||
case a.kind
|
||||
of tySequence:
|
||||
of tySequence, tyUncheckedArray:
|
||||
if a.kind == f.kind:
|
||||
if (f[0].kind != tyGenericParam) and (a.elementType.kind == tyEmpty):
|
||||
result = isSubtype
|
||||
else:
|
||||
@@ -1367,8 +1361,8 @@ proc typeRel(c: var TCandidate, f, aOrig: PType,
|
||||
result = isSubtype
|
||||
else:
|
||||
result = isNone
|
||||
of tyNil: result = isNone
|
||||
else: discard
|
||||
elif a.kind == tyNil:
|
||||
result = isNone
|
||||
of tyOrdinal:
|
||||
if isOrdinalType(a):
|
||||
var x = if a.kind == tyOrdinal: a.elementType else: a
|
||||
|
||||
2
tests/typerel/tuncheckedarray_eq.nim
Normal file
2
tests/typerel/tuncheckedarray_eq.nim
Normal file
@@ -0,0 +1,2 @@
|
||||
type p = ptr UncheckedArray[char]
|
||||
doAssert p is ptr UncheckedArray
|
||||
Reference in New Issue
Block a user