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:
parent
c9b547dc88
commit
9db256f281
2 changed files with 8 additions and 2 deletions
|
@ -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()))
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue