mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-15 14:54:09 +02:00
Fixed extern generic constraint check for delete
This commit is contained in:
parent
cbc4888853
commit
a42e0fad60
1 changed files with 10 additions and 6 deletions
|
@ -4094,9 +4094,12 @@ void BfModule::Visit(BfDeleteStatement* deleteStmt)
|
||||||
auto checkType = val.mType;
|
auto checkType = val.mType;
|
||||||
if (genericType != NULL)
|
if (genericType != NULL)
|
||||||
{
|
{
|
||||||
auto genericParamInst = GetGenericParamInstance(genericType);
|
BfGenericParamFlags genericParamFlags = BfGenericParamFlag_None;
|
||||||
if (genericParamInst->mTypeConstraint != NULL)
|
BfType* typeConstraint = NULL;
|
||||||
checkType = genericParamInst->mTypeConstraint;
|
auto genericParam = GetMergedGenericParamData(genericType, genericParamFlags, typeConstraint);
|
||||||
|
|
||||||
|
if (typeConstraint != NULL)
|
||||||
|
checkType = typeConstraint;
|
||||||
bool canAlwaysDelete = checkType->IsDelegate() || checkType->IsFunction() || checkType->IsArray();
|
bool canAlwaysDelete = checkType->IsDelegate() || checkType->IsFunction() || checkType->IsArray();
|
||||||
if (auto checkTypeInst = checkType->ToTypeInstance())
|
if (auto checkTypeInst = checkType->ToTypeInstance())
|
||||||
{
|
{
|
||||||
|
@ -4107,12 +4110,13 @@ void BfModule::Visit(BfDeleteStatement* deleteStmt)
|
||||||
|
|
||||||
if (!canAlwaysDelete)
|
if (!canAlwaysDelete)
|
||||||
{
|
{
|
||||||
if (genericParamInst->mGenericParamFlags & (BfGenericParamFlag_Delete | BfGenericParamFlag_Var))
|
if (genericParamFlags & (BfGenericParamFlag_Delete | BfGenericParamFlag_Var))
|
||||||
return;
|
return;
|
||||||
if (genericParamInst->mGenericParamFlags & BfGenericParamFlag_StructPtr)
|
if (genericParamFlags & BfGenericParamFlag_StructPtr)
|
||||||
return;
|
return;
|
||||||
if ((genericParamInst->mGenericParamFlags & BfGenericParamFlag_Struct) && (checkType->IsPointer()))
|
if ((genericParamFlags & BfGenericParamFlag_Struct) && (checkType->IsPointer()))
|
||||||
return;
|
return;
|
||||||
|
auto genericParamInst = GetGenericParamInstance(genericType);
|
||||||
Fail(StrFormat("Must add 'where %s : delete' constraint to generic parameter to delete generic type '%s'",
|
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);
|
genericParamInst->GetGenericParamDef()->mName.c_str(), TypeToString(val.mType).c_str()), deleteStmt->mExpression);
|
||||||
return;
|
return;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue