1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-10 12:32:20 +02:00

Fixed error messages for methods with extern constraints in variations

This commit is contained in:
Brian Fiete 2020-08-04 10:30:25 -07:00
parent c7393865b4
commit 92d3ab6ca9
3 changed files with 64 additions and 10 deletions

View file

@ -196,6 +196,12 @@ void BfMethodMatcher::Init(/*SizedArrayImpl<BfResolvedArg>& arguments, */BfSized
for (BfTypeReference* genericArg : *methodGenericArguments)
{
auto genericArgType = mModule->ResolveTypeRef(genericArg);
if (genericArgType->IsGenericParam())
{
auto genericParamInstance = mModule->GetGenericParamInstance((BfGenericParamType*)genericArgType);
if ((genericParamInstance->mGenericParamFlags & BfGenericParamFlag_Var) != 0)
mHasVarArguments = true;
}
mExplicitMethodGenericArguments.push_back(genericArgType);
}
mHadExplicitGenericArguments = true;
@ -13023,7 +13029,12 @@ BfModuleMethodInstance BfExprEvaluator::GetSelectedMethod(BfAstNode* targetSrc,
{
checkMethodGenericArgs = &methodMatcher.mBestMethodGenericArguments;
genericArg = genericParams->mExternType;
genericArg = mModule->ResolveGenericType(genericArg, NULL, checkMethodGenericArgs);
auto owner = methodInstance.mMethodInstance->GetOwner();
BfTypeVector* typeGenericArguments = NULL;
if (owner->mGenericTypeInfo != NULL)
typeGenericArguments = &owner->mGenericTypeInfo->mTypeGenericArguments;
genericArg = mModule->ResolveGenericType(genericArg, typeGenericArguments, checkMethodGenericArgs);
}
if (genericArg->IsVar())
@ -13039,8 +13050,8 @@ BfModuleMethodInstance BfExprEvaluator::GetSelectedMethod(BfAstNode* targetSrc,
// Note: don't pass methodMatcher.mBestMethodGenericArguments into here, this method is already specialized
BfError* error = NULL;
if (!mModule->CheckGenericConstraints(BfGenericParamSource(methodInstance.mMethodInstance), genericArg, paramSrc, genericParams, checkMethodGenericArgs,
failed ? NULL : &error))
if (!mModule->CheckGenericConstraints(BfGenericParamSource(methodInstance.mMethodInstance), genericArg, paramSrc, genericParams, NULL,
failed ? NULL : &error))
{
if (methodInstance.mMethodInstance->IsSpecializedGenericMethod())
{