mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-09 20:12:21 +02:00
Properly detecting circular data references in sized arrays
This commit is contained in:
parent
87ca2f71af
commit
a457ebcbc5
1 changed files with 19 additions and 3 deletions
|
@ -991,11 +991,26 @@ bool BfModule::PopulateType(BfType* resolvedTypeRef, BfPopulateType populateType
|
|||
{
|
||||
resolvedTypeRef->mRevision = mRevision;
|
||||
|
||||
bool typeFailed = false;
|
||||
|
||||
BfSizedArrayType* arrayType = (BfSizedArrayType*)resolvedTypeRef;
|
||||
auto elementType = arrayType->mElementType;
|
||||
if (elementType->IsValueType())
|
||||
{
|
||||
resolvedTypeRef->mDefineState = BfTypeDefineState_ResolvingBaseType;
|
||||
BfTypeState typeState(mCurTypeInstance, mContext->mCurTypeState);
|
||||
typeState.mPopulateType = populateType;
|
||||
SetAndRestoreValue<BfTypeState*> prevTypeState(mContext->mCurTypeState, &typeState);
|
||||
|
||||
if (!CheckCircularDataError())
|
||||
{
|
||||
PopulateType(arrayType->mElementType, BfPopulateType_Data);
|
||||
}
|
||||
else
|
||||
{
|
||||
typeFailed = true;
|
||||
PopulateType(arrayType->mElementType, BfPopulateType_Identity);
|
||||
}
|
||||
resolvedTypeRef->mDefineState = arrayType->mElementType->mDefineState;
|
||||
AddDependency(elementType, resolvedTypeRef, BfDependencyMap::DependencyFlag_ValueTypeMemberData);
|
||||
}
|
||||
|
@ -1016,6 +1031,7 @@ bool BfModule::PopulateType(BfType* resolvedTypeRef, BfPopulateType populateType
|
|||
arrayType->mAlign = 1;
|
||||
}
|
||||
|
||||
if (!typeFailed)
|
||||
arrayType->mWantsGCMarking = elementType->WantsGCMarking();
|
||||
resolvedTypeRef->mDefineState = BfTypeDefineState_DefinedAndMethodsSlotted;
|
||||
resolvedTypeRef->mRebuildFlags = BfTypeRebuildFlag_None;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue