1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-22 09:38:01 +02:00

Fix for CheckMethod vtable check in autocomplete

This commit is contained in:
Brian Fiete 2022-07-02 12:09:33 -07:00
parent 066a83e60b
commit 32cfb8733f

View file

@ -1673,11 +1673,19 @@ bool BfMethodMatcher::CheckMethod(BfTypeInstance* targetTypeInstance, BfTypeInst
if ((methodInstance->mVirtualTableIdx < targetTypeInstance->mVirtualMethodTable.mSize) && (methodInstance->mVirtualTableIdx >= 0)) if ((methodInstance->mVirtualTableIdx < targetTypeInstance->mVirtualMethodTable.mSize) && (methodInstance->mVirtualTableIdx >= 0))
{ {
BfVirtualMethodEntry& vEntry = targetTypeInstance->mVirtualMethodTable[methodInstance->mVirtualTableIdx]; BfVirtualMethodEntry& vEntry = targetTypeInstance->mVirtualMethodTable[methodInstance->mVirtualTableIdx];
auto implMethod = (BfMethodInstance*)vEntry.mImplementingMethod; if ((vEntry.mImplementingMethod.mTypeInstance != NULL) && (vEntry.mImplementingMethod.mTypeInstance->mDefineState < BfTypeDefineState_DefinedAndMethodsSlotted) &&
if ((implMethod != methodInstance) && (implMethod != NULL)) (mModule->mCompiler->IsAutocomplete()))
{ {
SetAndRestoreValue<bool> prevBypassVirtual(mBypassVirtual, true); // Silently ignore
return CheckMethod(targetTypeInstance, implMethod->GetOwner(), implMethod->mMethodDef, isFailurePass); }
else
{
auto implMethod = (BfMethodInstance*)vEntry.mImplementingMethod;
if ((implMethod != methodInstance) && (implMethod != NULL))
{
SetAndRestoreValue<bool> prevBypassVirtual(mBypassVirtual, true);
return CheckMethod(targetTypeInstance, implMethod->GetOwner(), implMethod->mMethodDef, isFailurePass);
}
} }
} }
else else