1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-09 20:12:21 +02:00

Fixed sized array const-lookup dependency issue

This commit is contained in:
Brian Fiete 2021-10-13 12:09:12 -07:00
parent 1e3d0308bf
commit 8a32ce5a69
6 changed files with 18 additions and 4 deletions

View file

@ -1156,9 +1156,11 @@ void BfContext::TypeDataChanged(BfDependedType* dType, bool isNonStaticDataChang
{ {
bool hadChange = false; bool hadChange = false;
if ((dependencyFlags & BfDependencyMap::DependencyFlag_DerivedFrom) || if ((dependencyFlags &
(dependencyFlags & BfDependencyMap::DependencyFlag_ValueTypeMemberData) || (BfDependencyMap::DependencyFlag_DerivedFrom |
(dependencyFlags & BfDependencyMap::DependencyFlag_NameReference)) BfDependencyMap::DependencyFlag_ValueTypeMemberData) |
BfDependencyMap::DependencyFlag_NameReference |
BfDependencyMap::DependencyFlag_ValueTypeSizeDep) != 0)
{ {
hadChange = true; hadChange = true;
} }

View file

@ -131,6 +131,7 @@ public:
ResolveKind_UnionInnerType, ResolveKind_UnionInnerType,
ResolveKind_LocalVariable, ResolveKind_LocalVariable,
ResolveKind_Attributes, ResolveKind_Attributes,
ResolveKind_FieldType,
ResolveKind_ConstField ResolveKind_ConstField
}; };

View file

@ -4422,7 +4422,7 @@ BfTypedValue BfExprEvaluator::LookupField(BfAstNode* targetSrc, BfTypedValue tar
} }
mModule->PopulateType(resolvedFieldType, BfPopulateType_Data); 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) if (fieldInstance->mHadConstEval)
{ {
mModule->AddDependency(curCheckType, mModule->mCurTypeInstance, BfDependencyMap::DependencyFlag_ConstEvalConstField); mModule->AddDependency(curCheckType, mModule->mCurTypeInstance, BfDependencyMap::DependencyFlag_ConstEvalConstField);

View file

@ -3365,6 +3365,12 @@ void BfModule::AddDependency(BfType* usedType, BfType* userType, BfDependencyMap
if (usedType == userType) if (usedType == userType)
return; 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 ((mCurMethodInstance != NULL) && (mCurMethodInstance->mIsAutocompleteMethod))
{ {
if (userType->IsMethodRef()) if (userType->IsMethodRef())

View file

@ -2597,6 +2597,8 @@ void BfModule::DoPopulateType(BfType* resolvedTypeRef, BfPopulateType populateTy
DoTypeInstanceMethodProcessing(typeInstance); DoTypeInstanceMethodProcessing(typeInstance);
return true; return true;
} }
if (typeInstance->mDefineState == BfTypeDefineState_DefinedAndMethodsSlotted)
return true;
return false; return false;
}; };
@ -3641,6 +3643,7 @@ void BfModule::DoPopulateType(BfType* resolvedTypeRef, BfPopulateType populateTy
continue; continue;
SetAndRestoreValue<BfFieldDef*> prevTypeRef(mContext->mCurTypeState->mCurFieldDef, field); SetAndRestoreValue<BfFieldDef*> prevTypeRef(mContext->mCurTypeState->mCurFieldDef, field);
SetAndRestoreValue<BfTypeState::ResolveKind> prevResolveKind(mContext->mCurTypeState->mResolveKind, BfTypeState::ResolveKind_FieldType);
BfType* resolvedFieldType = NULL; BfType* resolvedFieldType = NULL;
@ -4427,6 +4430,7 @@ void BfModule::DoPopulateType(BfType* resolvedTypeRef, BfPopulateType populateTy
CheckAddFailType(); CheckAddFailType();
BF_ASSERT_REL(typeInstance->mDefineState != BfTypeDefineState_DefinedAndMethodsSlotting); BF_ASSERT_REL(typeInstance->mDefineState != BfTypeDefineState_DefinedAndMethodsSlotting);
BF_ASSERT_REL(typeInstance->mDefineState != BfTypeDefineState_DefinedAndMethodsSlotted);
BfLogSysM("Setting mNeedsMethodProcessing=true on %p\n", typeInstance); BfLogSysM("Setting mNeedsMethodProcessing=true on %p\n", typeInstance);
typeInstance->mNeedsMethodProcessing = true; typeInstance->mNeedsMethodProcessing = true;

View file

@ -115,6 +115,7 @@ public:
DependencyFlag_NameReference = 0x1000000, DependencyFlag_NameReference = 0x1000000,
DependencyFlag_VirtualCall = 0x2000000, DependencyFlag_VirtualCall = 0x2000000,
DependencyFlag_WeakReference = 0x4000000, // Keeps alive but won't rebuild DependencyFlag_WeakReference = 0x4000000, // Keeps alive but won't rebuild
DependencyFlag_ValueTypeSizeDep = 0x8000000, // IE: int32[DepType.cVal]
DependencyFlag_DependentUsageMask = ~(DependencyFlag_UnspecializedType | DependencyFlag_MethodGenericArg | DependencyFlag_GenericArgRef) DependencyFlag_DependentUsageMask = ~(DependencyFlag_UnspecializedType | DependencyFlag_MethodGenericArg | DependencyFlag_GenericArgRef)
}; };