mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-08 19:48:20 +02:00
Const generic arg fixes
This commit is contained in:
parent
b9a9a4bfac
commit
2b9443744b
3 changed files with 34 additions and 7 deletions
|
@ -18646,12 +18646,22 @@ void BfModule::ProcessMethod_SetupParams(BfMethodInstance* methodInstance, BfTyp
|
||||||
paramVar->mResolvedType = genericParamInst->mTypeConstraint;
|
paramVar->mResolvedType = genericParamInst->mTypeConstraint;
|
||||||
paramVar->mConstValue = exprEvaluator.mResult.mValue;
|
paramVar->mConstValue = exprEvaluator.mResult.mValue;
|
||||||
BF_ASSERT(paramVar->mConstValue.IsConst());
|
BF_ASSERT(paramVar->mConstValue.IsConst());
|
||||||
|
paramVar->mIsConst = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
AssertErrorState();
|
AssertErrorState();
|
||||||
paramVar->mResolvedType = genericParamInst->mTypeConstraint;
|
paramVar->mResolvedType = genericParamInst->mTypeConstraint;
|
||||||
paramVar->mConstValue = GetDefaultValue(genericParamInst->mTypeConstraint);
|
paramVar->mConstValue = GetDefaultValue(genericParamInst->mTypeConstraint);
|
||||||
|
paramVar->mIsConst = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (paramVar->mResolvedType->IsObject())
|
||||||
|
{
|
||||||
|
BfTypedValue typedVal(paramVar->mConstValue, paramVar->mResolvedType);
|
||||||
|
FixValueActualization(typedVal);
|
||||||
|
if (typedVal.mValue.IsConst())
|
||||||
|
paramVar->mConstValue = typedVal.mValue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18664,6 +18674,7 @@ void BfModule::ProcessMethod_SetupParams(BfMethodInstance* methodInstance, BfTyp
|
||||||
//AssertErrorState();
|
//AssertErrorState();
|
||||||
paramVar->mResolvedType = GetPrimitiveType(BfTypeCode_IntPtr);
|
paramVar->mResolvedType = GetPrimitiveType(BfTypeCode_IntPtr);
|
||||||
paramVar->mConstValue = GetDefaultValue(paramVar->mResolvedType);
|
paramVar->mConstValue = GetDefaultValue(paramVar->mResolvedType);
|
||||||
|
paramVar->mIsConst = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20057,6 +20068,7 @@ void BfModule::ProcessMethod(BfMethodInstance* methodInstance, bool isInlineDup,
|
||||||
BF_ASSERT(localIdx < methodState.mLocals.size());
|
BF_ASSERT(localIdx < methodState.mLocals.size());
|
||||||
paramVar = methodState.mLocals[localIdx];
|
paramVar = methodState.mLocals[localIdx];
|
||||||
if ((paramVar->mCompositeCount == -1) &&
|
if ((paramVar->mCompositeCount == -1) &&
|
||||||
|
(!paramVar->mIsConst) &&
|
||||||
((!paramVar->mResolvedType->IsValuelessType()) || (paramVar->mResolvedType->IsMethodRef())))
|
((!paramVar->mResolvedType->IsValuelessType()) || (paramVar->mResolvedType->IsMethodRef())))
|
||||||
break;
|
break;
|
||||||
localIdx++;
|
localIdx++;
|
||||||
|
@ -20214,6 +20226,9 @@ void BfModule::ProcessMethod(BfMethodInstance* methodInstance, bool isInlineDup,
|
||||||
|
|
||||||
int curLocalIdx = localIdx++;
|
int curLocalIdx = localIdx++;
|
||||||
BfLocalVariable* paramVar = methodState.mLocals[curLocalIdx];
|
BfLocalVariable* paramVar = methodState.mLocals[curLocalIdx];
|
||||||
|
|
||||||
|
if (paramVar->mIsConst)
|
||||||
|
continue;
|
||||||
if (!paramVar->IsParam())
|
if (!paramVar->IsParam())
|
||||||
continue;
|
continue;
|
||||||
if (paramVar->mCompositeCount != -1)
|
if (paramVar->mCompositeCount != -1)
|
||||||
|
|
|
@ -108,14 +108,14 @@ enum BfCastFlags
|
||||||
BfCastFlags_WantsConst = 0x4000
|
BfCastFlags_WantsConst = 0x4000
|
||||||
};
|
};
|
||||||
|
|
||||||
enum BfCastResultFlags
|
enum BfCastResultFlags : int8
|
||||||
{
|
{
|
||||||
BfCastResultFlags_None = 0,
|
BfCastResultFlags_None = 0,
|
||||||
BfCastResultFlags_IsAddr = 1,
|
BfCastResultFlags_IsAddr = 1,
|
||||||
BfCastResultFlags_IsTemp = 2
|
BfCastResultFlags_IsTemp = 2
|
||||||
};
|
};
|
||||||
|
|
||||||
enum BfAllocFlags
|
enum BfAllocFlags : int8
|
||||||
{
|
{
|
||||||
BfAllocFlags_None = 0,
|
BfAllocFlags_None = 0,
|
||||||
BfAllocFlags_RawArray = 1,
|
BfAllocFlags_RawArray = 1,
|
||||||
|
@ -124,7 +124,7 @@ enum BfAllocFlags
|
||||||
BfAllocFlags_NoDefaultToMalloc = 8
|
BfAllocFlags_NoDefaultToMalloc = 8
|
||||||
};
|
};
|
||||||
|
|
||||||
enum BfProtectionCheckFlags
|
enum BfProtectionCheckFlags : int8
|
||||||
{
|
{
|
||||||
BfProtectionCheckFlag_None = 0,
|
BfProtectionCheckFlag_None = 0,
|
||||||
BfProtectionCheckFlag_CheckedProtected = 1,
|
BfProtectionCheckFlag_CheckedProtected = 1,
|
||||||
|
@ -134,7 +134,7 @@ enum BfProtectionCheckFlags
|
||||||
BfProtectionCheckFlag_InstanceLookup = 0x10
|
BfProtectionCheckFlag_InstanceLookup = 0x10
|
||||||
};
|
};
|
||||||
|
|
||||||
enum BfEmbeddedStatementFlags
|
enum BfEmbeddedStatementFlags : int8
|
||||||
{
|
{
|
||||||
BfEmbeddedStatementFlags_None = 0,
|
BfEmbeddedStatementFlags_None = 0,
|
||||||
BfEmbeddedStatementFlags_IsConditional = 1,
|
BfEmbeddedStatementFlags_IsConditional = 1,
|
||||||
|
@ -142,7 +142,7 @@ enum BfEmbeddedStatementFlags
|
||||||
BfEmbeddedStatementFlags_Unscoped = 4
|
BfEmbeddedStatementFlags_Unscoped = 4
|
||||||
};
|
};
|
||||||
|
|
||||||
enum BfLocalVarAssignKind
|
enum BfLocalVarAssignKind : int8
|
||||||
{
|
{
|
||||||
BfLocalVarAssignKind_None = 0,
|
BfLocalVarAssignKind_None = 0,
|
||||||
BfLocalVarAssignKind_Conditional = 1,
|
BfLocalVarAssignKind_Conditional = 1,
|
||||||
|
@ -183,7 +183,8 @@ public:
|
||||||
bool mAllowAddr;
|
bool mAllowAddr;
|
||||||
bool mIsShadow;
|
bool mIsShadow;
|
||||||
bool mUsedImplicitly; // Passed implicitly to a local method, capture by ref if we can
|
bool mUsedImplicitly; // Passed implicitly to a local method, capture by ref if we can
|
||||||
bool mNotCaptured;
|
bool mNotCaptured;
|
||||||
|
bool mIsConst;
|
||||||
BfLocalVariable* mShadowedLocal;
|
BfLocalVariable* mShadowedLocal;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@ -212,8 +213,9 @@ public:
|
||||||
mIsLowered = false;
|
mIsLowered = false;
|
||||||
mAllowAddr = false;
|
mAllowAddr = false;
|
||||||
mIsShadow = false;
|
mIsShadow = false;
|
||||||
mUsedImplicitly = false;
|
mUsedImplicitly = false;
|
||||||
mNotCaptured = false;
|
mNotCaptured = false;
|
||||||
|
mIsConst = false;
|
||||||
mShadowedLocal = NULL;
|
mShadowedLocal = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -112,6 +112,15 @@ namespace Tests
|
||||||
public const int N = CalculateN();
|
public const int N = CalculateN();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static int Test<T>(T param1, params Span<int> param2)
|
||||||
|
where T : const String
|
||||||
|
{
|
||||||
|
int total = param1.Length;
|
||||||
|
for (int val in param2)
|
||||||
|
total += val;
|
||||||
|
return total;
|
||||||
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public static void TestBasics()
|
public static void TestBasics()
|
||||||
{
|
{
|
||||||
|
@ -126,6 +135,7 @@ namespace Tests
|
||||||
Test.Assert(!iList.SequenceEquals(iSpan));
|
Test.Assert(!iList.SequenceEquals(iSpan));
|
||||||
|
|
||||||
Test.Assert(BigNum<const 3>.N == 3);
|
Test.Assert(BigNum<const 3>.N == 3);
|
||||||
|
Test.Assert(Test("test", 1, 2, 3) == 10);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue