mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-09 03:52:19 +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;
|
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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -131,6 +131,7 @@ public:
|
||||||
ResolveKind_UnionInnerType,
|
ResolveKind_UnionInnerType,
|
||||||
ResolveKind_LocalVariable,
|
ResolveKind_LocalVariable,
|
||||||
ResolveKind_Attributes,
|
ResolveKind_Attributes,
|
||||||
|
ResolveKind_FieldType,
|
||||||
ResolveKind_ConstField
|
ResolveKind_ConstField
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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())
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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)
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue