From 9db256f28160ffafc52aab4591ef9cb80230ea27 Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Mon, 28 Sep 2020 13:15:48 -0700 Subject: [PATCH] Fixed autocomplete invoke info issue with arguments with binary operator --- IDEHelper/Compiler/BfExprEvaluator.cpp | 9 ++++++++- IDEHelper/Compiler/BfModule.cpp | 1 - 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/IDEHelper/Compiler/BfExprEvaluator.cpp b/IDEHelper/Compiler/BfExprEvaluator.cpp index e1e16131..ece79337 100644 --- a/IDEHelper/Compiler/BfExprEvaluator.cpp +++ b/IDEHelper/Compiler/BfExprEvaluator.cpp @@ -17979,6 +17979,7 @@ BfTypedValue BfExprEvaluator::PerformUnaryOperation_TryOperator(const BfTypedVal resolvedArg.mTypedValue = inValue; args.push_back(resolvedArg); BfMethodMatcher methodMatcher(opToken, mModule, "", args, NULL); + methodMatcher.mBfEvalExprFlags = BfEvalExprFlags_NoAutoComplete; BfBaseClassWalker baseClassWalker(inValue.mType, NULL, mModule); BfUnaryOp findOp = unaryOp; @@ -18115,7 +18116,10 @@ BfTypedValue BfExprEvaluator::PerformUnaryOperation_TryOperator(const BfTypedVal result = BfTypedValue(mModule->mBfIRBuilder->GetFakeVal(), operatorConstraintReturnType); } else + { + SetAndRestoreValue prevFlags(mBfEvalExprFlags, (BfEvalExprFlags)(mBfEvalExprFlags | BfEvalExprFlags_NoAutoComplete)); result = CreateCall(&methodMatcher, callTarget); + } if (!methodMatcher.mBestMethodDef->mIsStatic) { @@ -19382,6 +19386,7 @@ void BfExprEvaluator::PerformBinaryOperation(BfAstNode* leftExpression, BfAstNod args.push_back(leftArg); } BfMethodMatcher methodMatcher(opToken, mModule, "", args, NULL); + methodMatcher.mBfEvalExprFlags = BfEvalExprFlags_NoAutoComplete; BfBaseClassWalker baseClassWalker(leftValue.mType, rightValue.mType, mModule); bool invertResult = false; @@ -19482,12 +19487,13 @@ void BfExprEvaluator::PerformBinaryOperation(BfAstNode* leftExpression, BfAstNod if (hadMatch) { methodMatcher.FlushAmbiguityError(); - + auto matchedOp = ((BfOperatorDeclaration*)methodMatcher.mBestMethodDef->mMethodDeclaration)->mBinOp; bool invertResult = matchedOp == oppositeBinaryOp; auto methodDef = methodMatcher.mBestMethodDef; auto autoComplete = GetAutoComplete(); + bool wasCapturingMethodInfo = false; if ((autoComplete != NULL) && (autoComplete->IsAutocompleteNode(opToken))) { auto operatorDecl = BfNodeDynCast(methodDef->mMethodDeclaration); @@ -19506,6 +19512,7 @@ void BfExprEvaluator::PerformBinaryOperation(BfAstNode* leftExpression, BfAstNod } else { + SetAndRestoreValue prevFlags(mBfEvalExprFlags, (BfEvalExprFlags)(mBfEvalExprFlags | BfEvalExprFlags_NoAutoComplete)); mResult = CreateCall(&methodMatcher, BfTypedValue()); } if ((mResult.mType != NULL) && (methodMatcher.mSelfType != NULL) && (mResult.mType->IsSelf())) diff --git a/IDEHelper/Compiler/BfModule.cpp b/IDEHelper/Compiler/BfModule.cpp index e1796623..5d259d7c 100644 --- a/IDEHelper/Compiler/BfModule.cpp +++ b/IDEHelper/Compiler/BfModule.cpp @@ -4767,7 +4767,6 @@ BfIRValue BfModule::CreateTypeData(BfType* type, Dictionary& usedStrin } BfTypeInstance* typeInstance = type->ToTypeInstance(); - BfType* typeInstanceType = ResolveTypeDef(mCompiler->mReflectTypeInstanceTypeDef); mBfIRBuilder->PopulateType(typeInstanceType, BfIRPopulateType_Full_ForceDefinition);