mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-08 11:38:21 +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->mConstValue = exprEvaluator.mResult.mValue;
|
||||
BF_ASSERT(paramVar->mConstValue.IsConst());
|
||||
paramVar->mIsConst = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
AssertErrorState();
|
||||
paramVar->mResolvedType = 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();
|
||||
paramVar->mResolvedType = GetPrimitiveType(BfTypeCode_IntPtr);
|
||||
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());
|
||||
paramVar = methodState.mLocals[localIdx];
|
||||
if ((paramVar->mCompositeCount == -1) &&
|
||||
(!paramVar->mIsConst) &&
|
||||
((!paramVar->mResolvedType->IsValuelessType()) || (paramVar->mResolvedType->IsMethodRef())))
|
||||
break;
|
||||
localIdx++;
|
||||
|
@ -20214,6 +20226,9 @@ void BfModule::ProcessMethod(BfMethodInstance* methodInstance, bool isInlineDup,
|
|||
|
||||
int curLocalIdx = localIdx++;
|
||||
BfLocalVariable* paramVar = methodState.mLocals[curLocalIdx];
|
||||
|
||||
if (paramVar->mIsConst)
|
||||
continue;
|
||||
if (!paramVar->IsParam())
|
||||
continue;
|
||||
if (paramVar->mCompositeCount != -1)
|
||||
|
|
|
@ -108,14 +108,14 @@ enum BfCastFlags
|
|||
BfCastFlags_WantsConst = 0x4000
|
||||
};
|
||||
|
||||
enum BfCastResultFlags
|
||||
enum BfCastResultFlags : int8
|
||||
{
|
||||
BfCastResultFlags_None = 0,
|
||||
BfCastResultFlags_IsAddr = 1,
|
||||
BfCastResultFlags_IsTemp = 2
|
||||
};
|
||||
|
||||
enum BfAllocFlags
|
||||
enum BfAllocFlags : int8
|
||||
{
|
||||
BfAllocFlags_None = 0,
|
||||
BfAllocFlags_RawArray = 1,
|
||||
|
@ -124,7 +124,7 @@ enum BfAllocFlags
|
|||
BfAllocFlags_NoDefaultToMalloc = 8
|
||||
};
|
||||
|
||||
enum BfProtectionCheckFlags
|
||||
enum BfProtectionCheckFlags : int8
|
||||
{
|
||||
BfProtectionCheckFlag_None = 0,
|
||||
BfProtectionCheckFlag_CheckedProtected = 1,
|
||||
|
@ -134,7 +134,7 @@ enum BfProtectionCheckFlags
|
|||
BfProtectionCheckFlag_InstanceLookup = 0x10
|
||||
};
|
||||
|
||||
enum BfEmbeddedStatementFlags
|
||||
enum BfEmbeddedStatementFlags : int8
|
||||
{
|
||||
BfEmbeddedStatementFlags_None = 0,
|
||||
BfEmbeddedStatementFlags_IsConditional = 1,
|
||||
|
@ -142,7 +142,7 @@ enum BfEmbeddedStatementFlags
|
|||
BfEmbeddedStatementFlags_Unscoped = 4
|
||||
};
|
||||
|
||||
enum BfLocalVarAssignKind
|
||||
enum BfLocalVarAssignKind : int8
|
||||
{
|
||||
BfLocalVarAssignKind_None = 0,
|
||||
BfLocalVarAssignKind_Conditional = 1,
|
||||
|
@ -184,6 +184,7 @@ public:
|
|||
bool mIsShadow;
|
||||
bool mUsedImplicitly; // Passed implicitly to a local method, capture by ref if we can
|
||||
bool mNotCaptured;
|
||||
bool mIsConst;
|
||||
BfLocalVariable* mShadowedLocal;
|
||||
|
||||
public:
|
||||
|
@ -214,6 +215,7 @@ public:
|
|||
mIsShadow = false;
|
||||
mUsedImplicitly = false;
|
||||
mNotCaptured = false;
|
||||
mIsConst = false;
|
||||
mShadowedLocal = NULL;
|
||||
}
|
||||
|
||||
|
|
|
@ -112,6 +112,15 @@ namespace Tests
|
|||
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]
|
||||
public static void TestBasics()
|
||||
{
|
||||
|
@ -126,6 +135,7 @@ namespace Tests
|
|||
Test.Assert(!iList.SequenceEquals(iSpan));
|
||||
|
||||
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