mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-13 22:04:09 +02:00
^
From End index is relative to length instead of length-1
This commit is contained in:
parent
fa3198f82a
commit
299bea0eaa
6 changed files with 30 additions and 27 deletions
|
@ -269,7 +269,7 @@ namespace System
|
||||||
switch (index)
|
switch (index)
|
||||||
{
|
{
|
||||||
case .FromFront(let offset): idx = offset;
|
case .FromFront(let offset): idx = offset;
|
||||||
case .FromEnd(let offset): idx = mLength - 1 - offset;
|
case .FromEnd(let offset): idx = mLength - offset;
|
||||||
}
|
}
|
||||||
if ((uint)idx >= (uint)mLength)
|
if ((uint)idx >= (uint)mLength)
|
||||||
Internal.ThrowIndexOutOfRange(1);
|
Internal.ThrowIndexOutOfRange(1);
|
||||||
|
@ -283,7 +283,7 @@ namespace System
|
||||||
switch (index)
|
switch (index)
|
||||||
{
|
{
|
||||||
case .FromFront(let offset): idx = offset;
|
case .FromFront(let offset): idx = offset;
|
||||||
case .FromEnd(let offset): idx = mLength - 1 - offset;
|
case .FromEnd(let offset): idx = mLength - offset;
|
||||||
}
|
}
|
||||||
return ref (&mFirstElement)[idx];
|
return ref (&mFirstElement)[idx];
|
||||||
}
|
}
|
||||||
|
|
|
@ -220,7 +220,7 @@ namespace System.Collections
|
||||||
switch (index)
|
switch (index)
|
||||||
{
|
{
|
||||||
case .FromFront(let offset): idx = offset;
|
case .FromFront(let offset): idx = offset;
|
||||||
case .FromEnd(let offset): idx = mSize - 1 - offset;
|
case .FromEnd(let offset): idx = mSize - offset;
|
||||||
}
|
}
|
||||||
Runtime.Assert((uint)idx < (uint)mSize);
|
Runtime.Assert((uint)idx < (uint)mSize);
|
||||||
return ref mItems[idx];
|
return ref mItems[idx];
|
||||||
|
@ -233,7 +233,7 @@ namespace System.Collections
|
||||||
switch (index)
|
switch (index)
|
||||||
{
|
{
|
||||||
case .FromFront(let offset): idx = offset;
|
case .FromFront(let offset): idx = offset;
|
||||||
case .FromEnd(let offset): idx = mSize - 1 - offset;
|
case .FromEnd(let offset): idx = mSize - offset;
|
||||||
}
|
}
|
||||||
return ref mItems[idx];
|
return ref mItems[idx];
|
||||||
}
|
}
|
||||||
|
@ -245,7 +245,7 @@ namespace System.Collections
|
||||||
switch (index)
|
switch (index)
|
||||||
{
|
{
|
||||||
case .FromFront(let offset): idx = offset;
|
case .FromFront(let offset): idx = offset;
|
||||||
case .FromEnd(let offset): idx = mSize - 1 - offset;
|
case .FromEnd(let offset): idx = mSize - offset;
|
||||||
}
|
}
|
||||||
Runtime.Assert((uint)idx < (uint)mSize);
|
Runtime.Assert((uint)idx < (uint)mSize);
|
||||||
mItems[idx] = value;
|
mItems[idx] = value;
|
||||||
|
@ -261,7 +261,7 @@ namespace System.Collections
|
||||||
switch (index)
|
switch (index)
|
||||||
{
|
{
|
||||||
case .FromFront(let offset): idx = offset;
|
case .FromFront(let offset): idx = offset;
|
||||||
case .FromEnd(let offset): idx = mSize - 1 - offset;
|
case .FromEnd(let offset): idx = mSize - offset;
|
||||||
}
|
}
|
||||||
mItems[idx] = value;
|
mItems[idx] = value;
|
||||||
#if VERSION_LIST
|
#if VERSION_LIST
|
||||||
|
|
|
@ -150,7 +150,7 @@ namespace System
|
||||||
switch (index)
|
switch (index)
|
||||||
{
|
{
|
||||||
case .FromFront(let offset): idx = offset;
|
case .FromFront(let offset): idx = offset;
|
||||||
case .FromEnd(let offset): idx = mLength - 1 - offset;
|
case .FromEnd(let offset): idx = mLength - offset;
|
||||||
}
|
}
|
||||||
Runtime.Assert((uint)idx < (uint)mLength);
|
Runtime.Assert((uint)idx < (uint)mLength);
|
||||||
return ref mPtr[idx];
|
return ref mPtr[idx];
|
||||||
|
@ -163,7 +163,7 @@ namespace System
|
||||||
switch (index)
|
switch (index)
|
||||||
{
|
{
|
||||||
case .FromFront(let offset): idx = offset;
|
case .FromFront(let offset): idx = offset;
|
||||||
case .FromEnd(let offset): idx = mLength - 1 - offset;
|
case .FromEnd(let offset): idx = mLength - offset;
|
||||||
}
|
}
|
||||||
return ref mPtr[idx];
|
return ref mPtr[idx];
|
||||||
}
|
}
|
||||||
|
@ -184,7 +184,7 @@ namespace System
|
||||||
start = mPtr + offset;
|
start = mPtr + offset;
|
||||||
case .FromEnd(let offset):
|
case .FromEnd(let offset):
|
||||||
Debug.Assert((uint)offset <= (uint)mLength);
|
Debug.Assert((uint)offset <= (uint)mLength);
|
||||||
start = mPtr + mLength - 1 - offset;
|
start = mPtr + mLength - offset;
|
||||||
}
|
}
|
||||||
T* end;
|
T* end;
|
||||||
if (range.[Friend]mIsClosed)
|
if (range.[Friend]mIsClosed)
|
||||||
|
@ -195,8 +195,8 @@ namespace System
|
||||||
Debug.Assert((uint)offset < (uint)mLength);
|
Debug.Assert((uint)offset < (uint)mLength);
|
||||||
end = mPtr + offset + 1;
|
end = mPtr + offset + 1;
|
||||||
case .FromEnd(let offset):
|
case .FromEnd(let offset):
|
||||||
Debug.Assert((uint)offset < (uint)mLength);
|
Debug.Assert((uint)(offset - 1) <= (uint)mLength);
|
||||||
end = mPtr + mLength - offset;
|
end = mPtr + mLength - offset + 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -208,7 +208,7 @@ namespace System
|
||||||
end = mPtr + offset;
|
end = mPtr + offset;
|
||||||
case .FromEnd(let offset):
|
case .FromEnd(let offset):
|
||||||
Debug.Assert((uint)offset <= (uint)mLength);
|
Debug.Assert((uint)offset <= (uint)mLength);
|
||||||
end = mPtr + mLength - 1 - offset;
|
end = mPtr + mLength - offset;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1046,7 +1046,7 @@ namespace System
|
||||||
switch (index)
|
switch (index)
|
||||||
{
|
{
|
||||||
case .FromFront(let offset): idx = offset;
|
case .FromFront(let offset): idx = offset;
|
||||||
case .FromEnd(let offset): idx = mLength - 1 - offset;
|
case .FromEnd(let offset): idx = mLength - offset;
|
||||||
}
|
}
|
||||||
Debug.Assert((uint)idx < (uint)mLength);
|
Debug.Assert((uint)idx < (uint)mLength);
|
||||||
return ref Ptr[idx];
|
return ref Ptr[idx];
|
||||||
|
@ -1059,7 +1059,7 @@ namespace System
|
||||||
switch (index)
|
switch (index)
|
||||||
{
|
{
|
||||||
case .FromFront(let offset): idx = offset;
|
case .FromFront(let offset): idx = offset;
|
||||||
case .FromEnd(let offset): idx = mLength - 1 - offset;
|
case .FromEnd(let offset): idx = mLength - offset;
|
||||||
}
|
}
|
||||||
return ref Ptr[idx];
|
return ref Ptr[idx];
|
||||||
}
|
}
|
||||||
|
@ -1071,7 +1071,7 @@ namespace System
|
||||||
switch (index)
|
switch (index)
|
||||||
{
|
{
|
||||||
case .FromFront(let offset): idx = offset;
|
case .FromFront(let offset): idx = offset;
|
||||||
case .FromEnd(let offset): idx = mLength - 1 - offset;
|
case .FromEnd(let offset): idx = mLength - offset;
|
||||||
}
|
}
|
||||||
Debug.Assert((uint)idx < (uint)mLength);
|
Debug.Assert((uint)idx < (uint)mLength);
|
||||||
Ptr[idx] = value;
|
Ptr[idx] = value;
|
||||||
|
@ -1084,7 +1084,7 @@ namespace System
|
||||||
switch (index)
|
switch (index)
|
||||||
{
|
{
|
||||||
case .FromFront(let offset): idx = offset;
|
case .FromFront(let offset): idx = offset;
|
||||||
case .FromEnd(let offset): idx = mLength - 1 - offset;
|
case .FromEnd(let offset): idx = mLength - offset;
|
||||||
}
|
}
|
||||||
Ptr[idx] = value;
|
Ptr[idx] = value;
|
||||||
}
|
}
|
||||||
|
@ -2994,7 +2994,7 @@ namespace System
|
||||||
switch (index)
|
switch (index)
|
||||||
{
|
{
|
||||||
case .FromFront(let offset): idx = offset;
|
case .FromFront(let offset): idx = offset;
|
||||||
case .FromEnd(let offset): idx = mLength - 1 - offset;
|
case .FromEnd(let offset): idx = mLength - offset;
|
||||||
}
|
}
|
||||||
Runtime.Assert((uint)idx < (uint)mLength);
|
Runtime.Assert((uint)idx < (uint)mLength);
|
||||||
return ref mPtr[idx];
|
return ref mPtr[idx];
|
||||||
|
@ -3007,7 +3007,7 @@ namespace System
|
||||||
switch (index)
|
switch (index)
|
||||||
{
|
{
|
||||||
case .FromFront(let offset): idx = offset;
|
case .FromFront(let offset): idx = offset;
|
||||||
case .FromEnd(let offset): idx = mLength - 1 - offset;
|
case .FromEnd(let offset): idx = mLength - offset;
|
||||||
}
|
}
|
||||||
return ref mPtr[idx];
|
return ref mPtr[idx];
|
||||||
}
|
}
|
||||||
|
@ -3028,7 +3028,7 @@ namespace System
|
||||||
start = mPtr + offset;
|
start = mPtr + offset;
|
||||||
case .FromEnd(let offset):
|
case .FromEnd(let offset):
|
||||||
Debug.Assert((uint)offset <= (uint)mLength);
|
Debug.Assert((uint)offset <= (uint)mLength);
|
||||||
start = mPtr + mLength - 1 - offset;
|
start = mPtr + mLength - offset;
|
||||||
}
|
}
|
||||||
char8* end;
|
char8* end;
|
||||||
if (range.[Friend]mIsClosed)
|
if (range.[Friend]mIsClosed)
|
||||||
|
@ -3039,8 +3039,8 @@ namespace System
|
||||||
Debug.Assert((uint)offset < (uint)mLength);
|
Debug.Assert((uint)offset < (uint)mLength);
|
||||||
end = mPtr + offset + 1;
|
end = mPtr + offset + 1;
|
||||||
case .FromEnd(let offset):
|
case .FromEnd(let offset):
|
||||||
Debug.Assert((uint)offset < (uint)mLength);
|
Debug.Assert((uint)(offset - 1) <= (uint)mLength);
|
||||||
end = mPtr + mLength - offset;
|
end = mPtr + mLength - offset + 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -3052,7 +3052,7 @@ namespace System
|
||||||
end = mPtr + offset;
|
end = mPtr + offset;
|
||||||
case .FromEnd(let offset):
|
case .FromEnd(let offset):
|
||||||
Debug.Assert((uint)offset <= (uint)mLength);
|
Debug.Assert((uint)offset <= (uint)mLength);
|
||||||
end = mPtr + mLength - 1 - offset;
|
end = mPtr + mLength - offset;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -20859,7 +20859,7 @@ void BfExprEvaluator::PerformBinaryOperation(BfExpression* leftExpression, BfExp
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Add as a `^0`
|
// Add as a `^1`
|
||||||
auto indexType = mModule->ResolveTypeDef(mModule->mCompiler->mIndexTypeDef)->ToTypeInstance();
|
auto indexType = mModule->ResolveTypeDef(mModule->mCompiler->mIndexTypeDef)->ToTypeInstance();
|
||||||
rightTypedValueExpr.mRefNode = opToken;
|
rightTypedValueExpr.mRefNode = opToken;
|
||||||
|
|
||||||
|
@ -20867,7 +20867,7 @@ void BfExprEvaluator::PerformBinaryOperation(BfExpression* leftExpression, BfExp
|
||||||
|
|
||||||
SizedArray<BfIRValue, 8> tupleMembers;
|
SizedArray<BfIRValue, 8> tupleMembers;
|
||||||
tupleMembers.Add(valueTypeEmpty);
|
tupleMembers.Add(valueTypeEmpty);
|
||||||
tupleMembers.Add(mModule->mBfIRBuilder->CreateConst(BfTypeCode_IntPtr, 0));
|
tupleMembers.Add(mModule->mBfIRBuilder->CreateConst(BfTypeCode_IntPtr, 1));
|
||||||
auto tupleValue = mModule->mBfIRBuilder->CreateConstAgg(mModule->mBfIRBuilder->MapType(indexType->mFieldInstances[0].mResolvedType), tupleMembers);
|
auto tupleValue = mModule->mBfIRBuilder->CreateConstAgg(mModule->mBfIRBuilder->MapType(indexType->mFieldInstances[0].mResolvedType), tupleMembers);
|
||||||
|
|
||||||
SizedArray<BfIRValue, 8> indexMembers;
|
SizedArray<BfIRValue, 8> indexMembers;
|
||||||
|
|
|
@ -145,23 +145,26 @@ namespace Tests
|
||||||
Test.Assert(total == 20+30+40+50+60+70+80+90+100);
|
Test.Assert(total == 20+30+40+50+60+70+80+90+100);
|
||||||
|
|
||||||
total = 0;
|
total = 0;
|
||||||
for (int i in iList[...^1])
|
for (int i in iList[...^2])
|
||||||
total += i;
|
total += i;
|
||||||
Test.Assert(total == 10+20+30+40+50+60+70+80+90);
|
Test.Assert(total == 10+20+30+40+50+60+70+80+90);
|
||||||
|
|
||||||
total = 0;
|
total = 0;
|
||||||
for (int i in iList[..<^1])
|
for (int i in iList[..<^2])
|
||||||
total += i;
|
total += i;
|
||||||
Test.Assert(total == 10+20+30+40+50+60+70+80);
|
Test.Assert(total == 10+20+30+40+50+60+70+80);
|
||||||
|
|
||||||
total = 0;
|
total = 0;
|
||||||
for (int i in iList[...^1][1...^1])
|
for (int i in iList[...^2][1...^2])
|
||||||
total += i;
|
total += i;
|
||||||
Test.Assert(total == 20+30+40+50+60+70+80);
|
Test.Assert(total == 20+30+40+50+60+70+80);
|
||||||
|
|
||||||
var str = scope String();
|
var str = scope String();
|
||||||
(2...^3).ToString(str);
|
(2...^3).ToString(str);
|
||||||
Test.Assert(str == "2...^3");
|
Test.Assert(str == "2...^3");
|
||||||
|
|
||||||
|
int[] iEmptyArr = scope .();
|
||||||
|
var emptySpan = iEmptyArr[...];
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void TestEnumerator1(EnumeratorTest e)
|
public static void TestEnumerator1(EnumeratorTest e)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue