mirror of
https://github.com/nim-lang/Nim.git
synced 2026-01-04 04:02:41 +00:00
fixes a regression about indexing into UncheckedArray
This commit is contained in:
@@ -1358,7 +1358,7 @@ proc semSubscript(c: PContext, n: PNode, flags: TExprFlags): PNode =
|
||||
|
||||
case arr.kind
|
||||
of tyArray, tyOpenArray, tyVarargs, tySequence, tyString,
|
||||
tyCString, tyUncheckedArray:
|
||||
tyCString:
|
||||
if n.len != 2: return nil
|
||||
n.sons[0] = makeDeref(n.sons[0])
|
||||
for i in countup(1, sonsLen(n) - 1):
|
||||
@@ -1371,6 +1371,17 @@ proc semSubscript(c: PContext, n: PNode, flags: TExprFlags): PNode =
|
||||
result = n
|
||||
result.typ = elemType(arr)
|
||||
#GlobalError(n.info, errIndexTypesDoNotMatch)
|
||||
of tyUncheckedArray:
|
||||
if n.len != 2: return nil
|
||||
n.sons[0] = makeDeref(n.sons[0])
|
||||
for i in countup(1, sonsLen(n) - 1):
|
||||
n.sons[i] = semExprWithType(c, n.sons[i],
|
||||
flags*{efInTypeof, efDetermineType})
|
||||
# index into unchecked array must be some integer type:
|
||||
if n.sons[1].typ.skipTypes(abstractRange-{tyDistinct}).kind in
|
||||
{tyInt..tyInt64, tyUInt..tyUInt64}:
|
||||
result = n
|
||||
result.typ = elemType(arr)
|
||||
of tyTypeDesc:
|
||||
# The result so far is a tyTypeDesc bound
|
||||
# a tyGenericBody. The line below will substitute
|
||||
|
||||
@@ -532,3 +532,7 @@ block t7818:
|
||||
|
||||
doAssert(testOpenArray(@[u.addr, v.addr, w.addr]) == "123")
|
||||
doAssert(testOpenArray(@[w.addr, u.addr, v.addr]) == "312")
|
||||
|
||||
# regression regarding unchecked array indexing:
|
||||
proc foo(x: ptr UncheckedArray[int]; idx: uint64) =
|
||||
echo x[idx]
|
||||
|
||||
Reference in New Issue
Block a user