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

Fixed generic assignment operators (ie +=)

This commit is contained in:
Brian Fiete 2025-05-30 11:20:04 +02:00
parent c23def10f1
commit 5b18e380a5
4 changed files with 56 additions and 4 deletions

View file

@ -21040,6 +21040,31 @@ BfTypedValue BfExprEvaluator::PerformAssignment_CheckOp(BfAssignmentExpression*
continue;
auto paramType = methodInst->GetParamType(0);
BfModuleMethodInstance moduleMethodInstance;
if (methodInst->mIsUnspecialized)
{
BfTypeVector checkMethodGenericArguments;
checkMethodGenericArguments.resize(methodInst->GetNumGenericArguments());
BfGenericInferContext genericInferContext;
genericInferContext.mModule = mModule;
genericInferContext.mCheckMethodGenericArguments = &checkMethodGenericArguments;
if (!genericInferContext.InferGenericArgument(methodInst, rightValue.mType, paramType, rightValue.mValue))
continue;
bool genericsInferred = true;
for (int i = 0; i < checkMethodGenericArguments.mSize; i++)
if ((checkMethodGenericArguments[i] == NULL) || (checkMethodGenericArguments[i]->IsVar()))
genericsInferred = false;
if (!genericsInferred)
continue;
moduleMethodInstance = mModule->GetMethodInstance(checkTypeInst, operatorDef, checkMethodGenericArguments);
paramType = moduleMethodInstance.mMethodInstance->GetParamType(0);
}
if (deferBinop)
{
if (argValues.mArguments == NULL)
@ -21073,7 +21098,8 @@ BfTypedValue BfExprEvaluator::PerformAssignment_CheckOp(BfAssignmentExpression*
autoComplete->SetDefinitionLocation(operatorDef->mOperatorDeclaration->mOpTypeToken);
}
auto moduleMethodInstance = mModule->GetMethodInstance(checkTypeInst, operatorDef, BfTypeVector());
if (!moduleMethodInstance)
moduleMethodInstance = mModule->GetMethodInstance(checkTypeInst, operatorDef, BfTypeVector());
BfExprEvaluator exprEvaluator(mModule);
SizedArray<BfIRValue, 1> args;