mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-09 12:02:21 +02:00
Fixed sized array const-lookup dependency issue
This commit is contained in:
parent
1e3d0308bf
commit
8a32ce5a69
6 changed files with 18 additions and 4 deletions
|
@ -1156,9 +1156,11 @@ void BfContext::TypeDataChanged(BfDependedType* dType, bool isNonStaticDataChang
|
|||
{
|
||||
bool hadChange = false;
|
||||
|
||||
if ((dependencyFlags & BfDependencyMap::DependencyFlag_DerivedFrom) ||
|
||||
(dependencyFlags & BfDependencyMap::DependencyFlag_ValueTypeMemberData) ||
|
||||
(dependencyFlags & BfDependencyMap::DependencyFlag_NameReference))
|
||||
if ((dependencyFlags &
|
||||
(BfDependencyMap::DependencyFlag_DerivedFrom |
|
||||
BfDependencyMap::DependencyFlag_ValueTypeMemberData) |
|
||||
BfDependencyMap::DependencyFlag_NameReference |
|
||||
BfDependencyMap::DependencyFlag_ValueTypeSizeDep) != 0)
|
||||
{
|
||||
hadChange = true;
|
||||
}
|
||||
|
|
|
@ -131,6 +131,7 @@ public:
|
|||
ResolveKind_UnionInnerType,
|
||||
ResolveKind_LocalVariable,
|
||||
ResolveKind_Attributes,
|
||||
ResolveKind_FieldType,
|
||||
ResolveKind_ConstField
|
||||
};
|
||||
|
||||
|
|
|
@ -4422,7 +4422,7 @@ BfTypedValue BfExprEvaluator::LookupField(BfAstNode* targetSrc, BfTypedValue tar
|
|||
}
|
||||
|
||||
mModule->PopulateType(resolvedFieldType, BfPopulateType_Data);
|
||||
mModule->AddDependency(curCheckType, mModule->mCurTypeInstance, BfDependencyMap::DependencyFlag_ReadFields);
|
||||
mModule->AddDependency(curCheckType, mModule->mCurTypeInstance, field->mIsConst ? BfDependencyMap::DependencyFlag_ConstValue : BfDependencyMap::DependencyFlag_ReadFields);
|
||||
if (fieldInstance->mHadConstEval)
|
||||
{
|
||||
mModule->AddDependency(curCheckType, mModule->mCurTypeInstance, BfDependencyMap::DependencyFlag_ConstEvalConstField);
|
||||
|
|
|
@ -3365,6 +3365,12 @@ void BfModule::AddDependency(BfType* usedType, BfType* userType, BfDependencyMap
|
|||
if (usedType == userType)
|
||||
return;
|
||||
|
||||
if (((flags & BfDependencyMap::DependencyFlag_ConstValue) != 0) && (mContext->mCurTypeState != NULL) && (mContext->mCurTypeState->mResolveKind == BfTypeState::ResolveKind_FieldType))
|
||||
{
|
||||
// This can be an `int32[UsedType.cVal]` type reference
|
||||
flags = (BfDependencyMap::DependencyFlags)(flags | BfDependencyMap::DependencyFlag_ValueTypeSizeDep);
|
||||
}
|
||||
|
||||
if ((mCurMethodInstance != NULL) && (mCurMethodInstance->mIsAutocompleteMethod))
|
||||
{
|
||||
if (userType->IsMethodRef())
|
||||
|
|
|
@ -2597,6 +2597,8 @@ void BfModule::DoPopulateType(BfType* resolvedTypeRef, BfPopulateType populateTy
|
|||
DoTypeInstanceMethodProcessing(typeInstance);
|
||||
return true;
|
||||
}
|
||||
if (typeInstance->mDefineState == BfTypeDefineState_DefinedAndMethodsSlotted)
|
||||
return true;
|
||||
return false;
|
||||
};
|
||||
|
||||
|
@ -3641,6 +3643,7 @@ void BfModule::DoPopulateType(BfType* resolvedTypeRef, BfPopulateType populateTy
|
|||
continue;
|
||||
|
||||
SetAndRestoreValue<BfFieldDef*> prevTypeRef(mContext->mCurTypeState->mCurFieldDef, field);
|
||||
SetAndRestoreValue<BfTypeState::ResolveKind> prevResolveKind(mContext->mCurTypeState->mResolveKind, BfTypeState::ResolveKind_FieldType);
|
||||
|
||||
BfType* resolvedFieldType = NULL;
|
||||
|
||||
|
@ -4427,6 +4430,7 @@ void BfModule::DoPopulateType(BfType* resolvedTypeRef, BfPopulateType populateTy
|
|||
CheckAddFailType();
|
||||
|
||||
BF_ASSERT_REL(typeInstance->mDefineState != BfTypeDefineState_DefinedAndMethodsSlotting);
|
||||
BF_ASSERT_REL(typeInstance->mDefineState != BfTypeDefineState_DefinedAndMethodsSlotted);
|
||||
|
||||
BfLogSysM("Setting mNeedsMethodProcessing=true on %p\n", typeInstance);
|
||||
typeInstance->mNeedsMethodProcessing = true;
|
||||
|
|
|
@ -115,6 +115,7 @@ public:
|
|||
DependencyFlag_NameReference = 0x1000000,
|
||||
DependencyFlag_VirtualCall = 0x2000000,
|
||||
DependencyFlag_WeakReference = 0x4000000, // Keeps alive but won't rebuild
|
||||
DependencyFlag_ValueTypeSizeDep = 0x8000000, // IE: int32[DepType.cVal]
|
||||
|
||||
DependencyFlag_DependentUsageMask = ~(DependencyFlag_UnspecializedType | DependencyFlag_MethodGenericArg | DependencyFlag_GenericArgRef)
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue