From 9eb3d8c3a5ea8c1b7909888138a672eed48b0fe2 Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Wed, 30 Dec 2020 05:35:37 -0800 Subject: [PATCH] Allow ctor calls with a 'var' constraint --- IDEHelper/Compiler/BfExprEvaluator.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/IDEHelper/Compiler/BfExprEvaluator.cpp b/IDEHelper/Compiler/BfExprEvaluator.cpp index d4d30bc4..20598a8b 100644 --- a/IDEHelper/Compiler/BfExprEvaluator.cpp +++ b/IDEHelper/Compiler/BfExprEvaluator.cpp @@ -13146,13 +13146,20 @@ void BfExprEvaluator::CreateObject(BfObjectCreateExpression* objCreateExpr, BfAs auto genericParam = mModule->GetGenericParamInstance((BfGenericParamType*)resolvedTypeRef); if (genericParam->mTypeConstraint == NULL) { - if ((genericParam->mGenericParamFlags & BfGenericParamFlag_New) == 0) + if ((genericParam->mGenericParamFlags & BfGenericParamFlag_Var) != 0) { - mModule->Fail(StrFormat("Must add 'where %s : new' constraint to generic parameter to instantiate type", genericParam->GetName().c_str()), objCreateExpr->mTypeRef); + // Allow it } - if (objCreateExpr->mArguments.size() != 0) + else { - mModule->Fail(StrFormat("Only default parameterless constructors can be called on generic argument '%s'", genericParam->GetName().c_str()), objCreateExpr->mTypeRef); + if ((genericParam->mGenericParamFlags & BfGenericParamFlag_New) == 0) + { + mModule->Fail(StrFormat("Must add 'where %s : new' constraint to generic parameter to instantiate type", genericParam->GetName().c_str()), objCreateExpr->mTypeRef); + } + if (objCreateExpr->mArguments.size() != 0) + { + mModule->Fail(StrFormat("Only default parameterless constructors can be called on generic argument '%s'", genericParam->GetName().c_str()), objCreateExpr->mTypeRef); + } } }