From e865e675a7363ecf822a23b36fa678fc06485360 Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Sat, 20 Jun 2020 05:19:28 -0700 Subject: [PATCH] Fixed resolve-only property devirtualize check --- IDEHelper/Compiler/BfExprEvaluator.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/IDEHelper/Compiler/BfExprEvaluator.cpp b/IDEHelper/Compiler/BfExprEvaluator.cpp index b63f06b8..4afcb38a 100644 --- a/IDEHelper/Compiler/BfExprEvaluator.cpp +++ b/IDEHelper/Compiler/BfExprEvaluator.cpp @@ -14636,14 +14636,19 @@ BfModuleMethodInstance BfExprEvaluator::GetPropertyMethodInstance(BfMethodDef* m } } else - { + { auto propTypeInst = mPropTarget.mType->ToTypeInstance(); + mModule->PopulateType(propTypeInst, BfPopulateType_DataAndMethods); auto rawMethodInstance = mModule->GetRawMethodInstance(propTypeInst, methodDef); - - BF_ASSERT(rawMethodInstance->mVirtualTableIdx != -1); + if (rawMethodInstance->mVirtualTableIdx == -1) { - mModule->Fail(StrFormat("Failed to devirtualize %s", mModule->MethodToString(rawMethodInstance).c_str())); + if (!mModule->mCompiler->mIsResolveOnly) + { + // ResolveOnly does not force methods to slot + BF_ASSERT(rawMethodInstance->mVirtualTableIdx != -1); + mModule->Fail(StrFormat("Failed to devirtualize %s", mModule->MethodToString(rawMethodInstance).c_str())); + } } else {