1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-08 19:48:20 +02:00

Fixed autocomplete crash with a generic delegate invocation

This commit is contained in:
Brian Fiete 2020-03-27 08:28:27 -07:00
parent 0720b9ad1a
commit 6f975686f7

View file

@ -7041,24 +7041,39 @@ void BfCompiler::GenerateAutocompleteInfo()
auto genericParamType = (BfGenericParamType*)type; auto genericParamType = (BfGenericParamType*)type;
if (genericParamType->mGenericParamKind == BfGenericParamKind_Method) if (genericParamType->mGenericParamKind == BfGenericParamKind_Method)
{ {
if (methodInstance->GetNumGenericParams() > 0) BfMethodInstance* checkMethodInstance = methodInstance;
if (checkMethodInstance->GetNumGenericParams() == 0)
checkMethodInstance = methodEntry.mCurMethodInstance;
if (genericParamType->mGenericParamIdx < checkMethodInstance->GetNumGenericParams())
{ {
auto genericParamInstance = methodInstance->mMethodInfoEx->mGenericParams[genericParamType->mGenericParamIdx]; auto genericParamInstance = checkMethodInstance->mMethodInfoEx->mGenericParams[genericParamType->mGenericParamIdx];
methodText += genericParamInstance->GetGenericParamDef()->mName; methodText += genericParamInstance->GetGenericParamDef()->mName;
} }
else else
{ {
BfMethodInstance* curMethodInstance = methodEntry.mCurMethodInstance; methodText += StrFormat("@M%d", genericParamType->mGenericParamIdx);
auto genericParamInstance = curMethodInstance->mMethodInfoEx->mGenericParams[genericParamType->mGenericParamIdx];
methodText += genericParamInstance->GetGenericParamDef()->mName;
} }
} }
else else
{ {
BfGenericTypeInstance* genericType = (BfGenericTypeInstance*)methodEntry.mTypeInstance; BfGenericTypeInstance* genericType = methodEntry.mTypeInstance->ToGenericTypeInstance();
if (genericType == NULL)
{
if (methodEntry.mCurMethodInstance != NULL)
genericType = methodEntry.mCurMethodInstance->GetOwner()->ToGenericTypeInstance();
}
if ((genericType != NULL) && (genericParamType->mGenericParamIdx < (int)genericType->mGenericParams.size()))
{
auto genericParamInstance = genericType->mGenericParams[genericParamType->mGenericParamIdx]; auto genericParamInstance = genericType->mGenericParams[genericParamType->mGenericParamIdx];
methodText += genericParamInstance->GetGenericParamDef()->mName; methodText += genericParamInstance->GetGenericParamDef()->mName;
} }
else
{
methodText += StrFormat("@T%d", genericParamType->mGenericParamIdx);
}
}
} }
else else
methodText += bfModule->TypeToString(type, BfTypeNameFlag_ResolveGenericParamNames, genericMethodNameOverridesPtr); methodText += bfModule->TypeToString(type, BfTypeNameFlag_ResolveGenericParamNames, genericMethodNameOverridesPtr);