1
0
Fork 0
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:
Brian Fiete 2022-07-04 14:16:31 -07:00
parent cbc4888853
commit a42e0fad60

View file

@ -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;