1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-25 02:58:02 +02:00

Fixed autocomplete invoke info issue with arguments with binary operator

This commit is contained in:
Brian Fiete 2020-09-28 13:15:48 -07:00
parent c9b547dc88
commit 9db256f281
2 changed files with 8 additions and 2 deletions

View file

@ -17979,6 +17979,7 @@ BfTypedValue BfExprEvaluator::PerformUnaryOperation_TryOperator(const BfTypedVal
resolvedArg.mTypedValue = inValue; resolvedArg.mTypedValue = inValue;
args.push_back(resolvedArg); args.push_back(resolvedArg);
BfMethodMatcher methodMatcher(opToken, mModule, "", args, NULL); BfMethodMatcher methodMatcher(opToken, mModule, "", args, NULL);
methodMatcher.mBfEvalExprFlags = BfEvalExprFlags_NoAutoComplete;
BfBaseClassWalker baseClassWalker(inValue.mType, NULL, mModule); BfBaseClassWalker baseClassWalker(inValue.mType, NULL, mModule);
BfUnaryOp findOp = unaryOp; BfUnaryOp findOp = unaryOp;
@ -18115,7 +18116,10 @@ BfTypedValue BfExprEvaluator::PerformUnaryOperation_TryOperator(const BfTypedVal
result = BfTypedValue(mModule->mBfIRBuilder->GetFakeVal(), operatorConstraintReturnType); result = BfTypedValue(mModule->mBfIRBuilder->GetFakeVal(), operatorConstraintReturnType);
} }
else else
{
SetAndRestoreValue<BfEvalExprFlags> prevFlags(mBfEvalExprFlags, (BfEvalExprFlags)(mBfEvalExprFlags | BfEvalExprFlags_NoAutoComplete));
result = CreateCall(&methodMatcher, callTarget); result = CreateCall(&methodMatcher, callTarget);
}
if (!methodMatcher.mBestMethodDef->mIsStatic) if (!methodMatcher.mBestMethodDef->mIsStatic)
{ {
@ -19382,6 +19386,7 @@ void BfExprEvaluator::PerformBinaryOperation(BfAstNode* leftExpression, BfAstNod
args.push_back(leftArg); args.push_back(leftArg);
} }
BfMethodMatcher methodMatcher(opToken, mModule, "", args, NULL); BfMethodMatcher methodMatcher(opToken, mModule, "", args, NULL);
methodMatcher.mBfEvalExprFlags = BfEvalExprFlags_NoAutoComplete;
BfBaseClassWalker baseClassWalker(leftValue.mType, rightValue.mType, mModule); BfBaseClassWalker baseClassWalker(leftValue.mType, rightValue.mType, mModule);
bool invertResult = false; bool invertResult = false;
@ -19482,12 +19487,13 @@ void BfExprEvaluator::PerformBinaryOperation(BfAstNode* leftExpression, BfAstNod
if (hadMatch) if (hadMatch)
{ {
methodMatcher.FlushAmbiguityError(); methodMatcher.FlushAmbiguityError();
auto matchedOp = ((BfOperatorDeclaration*)methodMatcher.mBestMethodDef->mMethodDeclaration)->mBinOp; auto matchedOp = ((BfOperatorDeclaration*)methodMatcher.mBestMethodDef->mMethodDeclaration)->mBinOp;
bool invertResult = matchedOp == oppositeBinaryOp; bool invertResult = matchedOp == oppositeBinaryOp;
auto methodDef = methodMatcher.mBestMethodDef; auto methodDef = methodMatcher.mBestMethodDef;
auto autoComplete = GetAutoComplete(); auto autoComplete = GetAutoComplete();
bool wasCapturingMethodInfo = false;
if ((autoComplete != NULL) && (autoComplete->IsAutocompleteNode(opToken))) if ((autoComplete != NULL) && (autoComplete->IsAutocompleteNode(opToken)))
{ {
auto operatorDecl = BfNodeDynCast<BfOperatorDeclaration>(methodDef->mMethodDeclaration); auto operatorDecl = BfNodeDynCast<BfOperatorDeclaration>(methodDef->mMethodDeclaration);
@ -19506,6 +19512,7 @@ void BfExprEvaluator::PerformBinaryOperation(BfAstNode* leftExpression, BfAstNod
} }
else else
{ {
SetAndRestoreValue<BfEvalExprFlags> prevFlags(mBfEvalExprFlags, (BfEvalExprFlags)(mBfEvalExprFlags | BfEvalExprFlags_NoAutoComplete));
mResult = CreateCall(&methodMatcher, BfTypedValue()); mResult = CreateCall(&methodMatcher, BfTypedValue());
} }
if ((mResult.mType != NULL) && (methodMatcher.mSelfType != NULL) && (mResult.mType->IsSelf())) if ((mResult.mType != NULL) && (methodMatcher.mSelfType != NULL) && (mResult.mType->IsSelf()))

View file

@ -4767,7 +4767,6 @@ BfIRValue BfModule::CreateTypeData(BfType* type, Dictionary<int, int>& usedStrin
} }
BfTypeInstance* typeInstance = type->ToTypeInstance(); BfTypeInstance* typeInstance = type->ToTypeInstance();
BfType* typeInstanceType = ResolveTypeDef(mCompiler->mReflectTypeInstanceTypeDef); BfType* typeInstanceType = ResolveTypeDef(mCompiler->mReflectTypeInstanceTypeDef);
mBfIRBuilder->PopulateType(typeInstanceType, BfIRPopulateType_Full_ForceDefinition); mBfIRBuilder->PopulateType(typeInstanceType, BfIRPopulateType_Full_ForceDefinition);