mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-08 11:38:21 +02:00
UnspecializedVariation fixes for delegates/tuples
This commit is contained in:
parent
448716c40b
commit
47e0cff3a0
1 changed files with 52 additions and 1 deletions
|
@ -5839,6 +5839,18 @@ BfType* BfModule::ResolveGenericType(BfType* unspecializedType, BfTypeVector* ty
|
||||||
actualTupleType->mGenericTypeInfo->mGenericParams.push_back(unspecializedGenericTupleType->mGenericTypeInfo->mGenericParams[genericArgIdx]->AddRef());
|
actualTupleType->mGenericTypeInfo->mGenericParams.push_back(unspecializedGenericTupleType->mGenericTypeInfo->mGenericParams[genericArgIdx]->AddRef());
|
||||||
}
|
}
|
||||||
CheckUnspecializedGenericType(actualTupleType, BfPopulateType_Identity);
|
CheckUnspecializedGenericType(actualTupleType, BfPopulateType_Identity);
|
||||||
|
if (isUnspecialized)
|
||||||
|
{
|
||||||
|
actualTupleType->mGenericTypeInfo->mIsUnspecialized = true;
|
||||||
|
actualTupleType->mGenericTypeInfo->mIsUnspecializedVariation = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isUnspecialized)
|
||||||
|
{
|
||||||
|
actualTupleType->mGenericTypeInfo->mIsUnspecialized = true;
|
||||||
|
actualTupleType->mGenericTypeInfo->mIsUnspecializedVariation = true;
|
||||||
|
}
|
||||||
|
|
||||||
actualTupleType->mIsUnspecializedType = actualTupleType->mGenericTypeInfo->mIsUnspecialized;
|
actualTupleType->mIsUnspecializedType = actualTupleType->mGenericTypeInfo->mIsUnspecialized;
|
||||||
actualTupleType->mIsUnspecializedTypeVariation = actualTupleType->mGenericTypeInfo->mIsUnspecializedVariation;
|
actualTupleType->mIsUnspecializedTypeVariation = actualTupleType->mGenericTypeInfo->mIsUnspecializedVariation;
|
||||||
actualTupleType->Init(baseType->mTypeDef->mProject, baseType);
|
actualTupleType->Init(baseType->mTypeDef->mProject, baseType);
|
||||||
|
@ -5969,6 +5981,12 @@ BfType* BfModule::ResolveGenericType(BfType* unspecializedType, BfTypeVector* ty
|
||||||
dlgType->mGenericTypeInfo->mGenericParams.push_back(unspecializedGenericDelegateType->mGenericTypeInfo->mGenericParams[genericArgIdx]->AddRef());
|
dlgType->mGenericTypeInfo->mGenericParams.push_back(unspecializedGenericDelegateType->mGenericTypeInfo->mGenericParams[genericArgIdx]->AddRef());
|
||||||
}
|
}
|
||||||
CheckUnspecializedGenericType(dlgType, BfPopulateType_Identity);
|
CheckUnspecializedGenericType(dlgType, BfPopulateType_Identity);
|
||||||
|
if (isUnspecialized)
|
||||||
|
{
|
||||||
|
dlgType->mGenericTypeInfo->mIsUnspecialized = true;
|
||||||
|
dlgType->mGenericTypeInfo->mIsUnspecializedVariation = true;
|
||||||
|
}
|
||||||
|
|
||||||
dlgType->mIsUnspecializedType = dlgType->mGenericTypeInfo->mIsUnspecialized;
|
dlgType->mIsUnspecializedType = dlgType->mGenericTypeInfo->mIsUnspecialized;
|
||||||
dlgType->mIsUnspecializedTypeVariation = dlgType->mGenericTypeInfo->mIsUnspecializedVariation;
|
dlgType->mIsUnspecializedTypeVariation = dlgType->mGenericTypeInfo->mIsUnspecializedVariation;
|
||||||
delegateType = dlgType;
|
delegateType = dlgType;
|
||||||
|
@ -8161,6 +8179,11 @@ BfType* BfModule::ResolveTypeRef(BfTypeReference* typeRef, BfPopulateType popula
|
||||||
actualTupleType->mGenericTypeInfo->mIsUnspecialized |= typeGenericArg->IsGenericParam() || typeGenericArg->IsUnspecializedType();
|
actualTupleType->mGenericTypeInfo->mIsUnspecialized |= typeGenericArg->IsGenericParam() || typeGenericArg->IsUnspecializedType();
|
||||||
}
|
}
|
||||||
CheckUnspecializedGenericType(actualTupleType, populateType);
|
CheckUnspecializedGenericType(actualTupleType, populateType);
|
||||||
|
if (isUnspecialized)
|
||||||
|
{
|
||||||
|
actualTupleType->mGenericTypeInfo->mIsUnspecialized = true;
|
||||||
|
actualTupleType->mGenericTypeInfo->mIsUnspecializedVariation = true;
|
||||||
|
}
|
||||||
actualTupleType->mIsUnspecializedType = actualTupleType->mGenericTypeInfo->mIsUnspecialized;
|
actualTupleType->mIsUnspecializedType = actualTupleType->mGenericTypeInfo->mIsUnspecialized;
|
||||||
actualTupleType->mIsUnspecializedTypeVariation = actualTupleType->mGenericTypeInfo->mIsUnspecializedVariation;
|
actualTupleType->mIsUnspecializedTypeVariation = actualTupleType->mGenericTypeInfo->mIsUnspecializedVariation;
|
||||||
tupleType = actualTupleType;
|
tupleType = actualTupleType;
|
||||||
|
@ -8314,7 +8337,35 @@ BfType* BfModule::ResolveTypeRef(BfTypeReference* typeRef, BfPopulateType popula
|
||||||
auto typeGenericArg = genericTypeInst->mGenericTypeInfo->mTypeGenericArguments[i];
|
auto typeGenericArg = genericTypeInst->mGenericTypeInfo->mTypeGenericArguments[i];
|
||||||
genericTypeInst->mGenericTypeInfo->mIsUnspecialized |= typeGenericArg->IsGenericParam() || typeGenericArg->IsUnspecializedType();
|
genericTypeInst->mGenericTypeInfo->mIsUnspecialized |= typeGenericArg->IsGenericParam() || typeGenericArg->IsUnspecializedType();
|
||||||
}
|
}
|
||||||
CheckUnspecializedGenericType(genericTypeInst, populateType);
|
|
||||||
|
CheckUnspecializedGenericType(genericTypeInst, populateType);
|
||||||
|
|
||||||
|
// for (auto paramType : paramTypes)
|
||||||
|
// {
|
||||||
|
// if (paramType->IsUnspecializedType())
|
||||||
|
// genericTypeInst->mGenericTypeInfo->mIsUnspecialized = true;
|
||||||
|
// if (paramType->IsUnspecializedTypeVariation())
|
||||||
|
// genericTypeInst->mGenericTypeInfo->mIsUnspecializedVariation = true;
|
||||||
|
// if (paramType->IsGenericParam())
|
||||||
|
// {
|
||||||
|
// BfGenericParamType* genericParamType = new BfGenericParamType();
|
||||||
|
// if (genericParamType->mGenericParamKind == BfGenericParamKind_Method)
|
||||||
|
// {
|
||||||
|
// if (genericParamType->mGenericParamIdx >= genericTypeInst->mGenericTypeInfo->mGenericParams.size())
|
||||||
|
// genericTypeInst->mGenericTypeInfo->mIsUnspecializedVariation = true;
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// genericTypeInst->mGenericTypeInfo->mIsUnspecializedVariation = true;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// We don't ever need to do an actual pass over generic delegate methods, so it's safe to set the 'unspecialized variation' flag
|
||||||
|
if (isUnspecialized)
|
||||||
|
{
|
||||||
|
genericTypeInst->mGenericTypeInfo->mIsUnspecialized = true;
|
||||||
|
genericTypeInst->mGenericTypeInfo->mIsUnspecializedVariation = true;
|
||||||
|
}
|
||||||
|
|
||||||
genericTypeInst->mIsUnspecializedType = genericTypeInst->mGenericTypeInfo->mIsUnspecialized;
|
genericTypeInst->mIsUnspecializedType = genericTypeInst->mGenericTypeInfo->mIsUnspecialized;
|
||||||
genericTypeInst->mIsUnspecializedTypeVariation = genericTypeInst->mGenericTypeInfo->mIsUnspecializedVariation;
|
genericTypeInst->mIsUnspecializedTypeVariation = genericTypeInst->mGenericTypeInfo->mIsUnspecializedVariation;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue