mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-10 12:32:20 +02:00
Fixed some issues with new/delete generic constraints
This commit is contained in:
parent
a781f29c31
commit
c2c2c24ac8
9 changed files with 99 additions and 26 deletions
|
@ -3636,16 +3636,37 @@ void BfModule::Visit(BfDeleteStatement* deleteStmt)
|
|||
if (!val)
|
||||
return;
|
||||
|
||||
auto checkType = val.mType;
|
||||
|
||||
BfGenericParamType* genericType = NULL;
|
||||
if (val.mType->IsGenericParam())
|
||||
genericType = (BfGenericParamType*)val.mType;
|
||||
if ((val.mType->IsPointer()) && (val.mType->GetUnderlyingType()->IsGenericParam()))
|
||||
genericType = (BfGenericParamType*)val.mType->GetUnderlyingType();
|
||||
|
||||
auto checkType = val.mType;
|
||||
if (genericType != NULL)
|
||||
{
|
||||
auto genericParamInst = GetGenericParamInstance((BfGenericParamType*)checkType);
|
||||
auto genericParamInst = GetGenericParamInstance(genericType);
|
||||
if (genericParamInst->mTypeConstraint != NULL)
|
||||
checkType = genericParamInst->mTypeConstraint;
|
||||
if (genericParamInst->mGenericParamFlags & (BfGenericParamFlag_Delete | BfGenericParamFlag_Var))
|
||||
return;
|
||||
}
|
||||
bool canAlwaysDelete = checkType->IsDelegate() || checkType->IsFunction() || checkType->IsArray();
|
||||
if (auto checkTypeInst = checkType->ToTypeInstance())
|
||||
{
|
||||
if ((checkTypeInst->mTypeDef == mCompiler->mDelegateTypeDef) ||
|
||||
(checkTypeInst->mTypeDef == mCompiler->mFunctionTypeDef))
|
||||
canAlwaysDelete = true;
|
||||
}
|
||||
|
||||
if (!canAlwaysDelete)
|
||||
{
|
||||
if (genericParamInst->mGenericParamFlags & (BfGenericParamFlag_Delete | BfGenericParamFlag_Var))
|
||||
return;
|
||||
Fail(StrFormat("Must add 'where %s : delete' constraint to generic parameter to delete generic type '%s'",
|
||||
genericParamInst->GetGenericParamDef()->mName.c_str(), TypeToString(val.mType).c_str()), deleteStmt->mExpression);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (checkType->IsVar())
|
||||
{
|
||||
// Mixin or unconstrained generic
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue