1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-07-04 23:36:00 +02:00

Fixed lockup check iface conformance in failed type

This commit is contained in:
Brian Fiete 2020-09-27 22:21:15 -07:00
parent ec3ea6bd49
commit ef57930170

View file

@ -5337,8 +5337,8 @@ BfIRValue BfModule::CreateTypeData(BfType* type, Dictionary<int, int>& usedStrin
BfMethodInstance* declaringMethodInstance = (BfMethodInstance*)entry.mDeclaringMethod; BfMethodInstance* declaringMethodInstance = (BfMethodInstance*)entry.mDeclaringMethod;
if ((declaringMethodInstance != NULL) && (declaringMethodInstance->mMethodInstanceGroup->IsImplemented()) && (declaringMethodInstance->mIsReified)) if ((declaringMethodInstance != NULL) && (declaringMethodInstance->mMethodInstanceGroup->IsImplemented()) && (declaringMethodInstance->mIsReified))
{ {
BF_ASSERT(entry.mImplementingMethod.mTypeInstance->mMethodInstanceGroups[entry.mImplementingMethod.mMethodNum].IsImplemented()); BF_ASSERT(entry.mImplementingMethod.mTypeInstance->mMethodInstanceGroups[entry.mImplementingMethod.mMethodNum].IsImplemented());
BF_ASSERT(entry.mImplementingMethod.mTypeInstance->mMethodInstanceGroups[entry.mImplementingMethod.mMethodNum].mDefault->mIsReified); BF_ASSERT(entry.mImplementingMethod.mTypeInstance->mMethodInstanceGroups[entry.mImplementingMethod.mMethodNum].mDefault->mIsReified);
BfMethodInstance* methodInstance = (BfMethodInstance*)entry.mImplementingMethod; BfMethodInstance* methodInstance = (BfMethodInstance*)entry.mImplementingMethod;
if ((methodInstance != NULL) && (!methodInstance->mMethodDef->mIsAbstract)) if ((methodInstance != NULL) && (!methodInstance->mMethodDef->mIsAbstract))
{ {
@ -21974,7 +21974,10 @@ bool BfModule::SlotVirtualMethod(BfMethodInstance* methodInstance, BfAmbiguityCo
bool storeIFaceMethod = false; bool storeIFaceMethod = false;
if ((mCompiler->mPassInstance->HasFailed()) && (iMethodIdx >= (int)ifaceInst->mMethodInstanceGroups.size())) if ((mCompiler->mPassInstance->HasFailed()) && (iMethodIdx >= (int)ifaceInst->mMethodInstanceGroups.size()))
{
checkMethodDef = checkMethodDef->mNextWithSameName;
continue; continue;
}
auto& iMethodGroup = ifaceInst->mMethodInstanceGroups[iMethodIdx]; auto& iMethodGroup = ifaceInst->mMethodInstanceGroups[iMethodIdx];
auto iMethodInst = iMethodGroup.mDefault; auto iMethodInst = iMethodGroup.mDefault;
@ -21982,6 +21985,7 @@ bool BfModule::SlotVirtualMethod(BfMethodInstance* methodInstance, BfAmbiguityCo
{ {
if ((!ifaceInst->IsGenericTypeInstance()) || (!ifaceInst->mTypeDef->mIsCombinedPartial)) if ((!ifaceInst->IsGenericTypeInstance()) || (!ifaceInst->mTypeDef->mIsCombinedPartial))
AssertErrorState(); AssertErrorState();
checkMethodDef = checkMethodDef->mNextWithSameName;
continue; continue;
} }
if (iMethodInst->mMethodDef->mName == methodInstance->mMethodDef->mName) if (iMethodInst->mMethodDef->mName == methodInstance->mMethodDef->mName)