mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-20 00:50:25 +02:00
Removed '=' in generic constraints
This commit is contained in:
parent
4890303508
commit
a681da30be
6 changed files with 69 additions and 107 deletions
|
@ -281,9 +281,7 @@ void BfDefBuilder::ParseGenericParams(BfGenericParamsDeclaration* genericParamsD
|
|||
{
|
||||
name = tokenPairNode->mLeft->ToString() + tokenPairNode->mRight->ToString();
|
||||
}
|
||||
|
||||
bool hasEquals = (genericConstraint->mColonToken != NULL) && (genericConstraint->mColonToken->mToken == BfToken_AssignEquals);
|
||||
|
||||
|
||||
if (!name.empty())
|
||||
{
|
||||
if ((name == "class") || (name == "struct") || (name == "struct*") || (name == "const") || (name == "var") || (name == "concrete") || (name == "interface") || (name == "enum"))
|
||||
|
@ -355,18 +353,6 @@ void BfDefBuilder::ParseGenericParams(BfGenericParamsDeclaration* genericParamsD
|
|||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (hasEquals)
|
||||
{
|
||||
if (constraintDef->mConstraints.IsEmpty())
|
||||
{
|
||||
constraintDef->mGenericParamFlags = (BfGenericParamFlags)(constraintDef->mGenericParamFlags | BfGenericParamFlag_Equals);
|
||||
}
|
||||
else
|
||||
{
|
||||
Fail("Type assignment must be the first constraint", genericConstraint->mColonToken);
|
||||
}
|
||||
}
|
||||
|
||||
constraintDef->mConstraints.Add(constraintNode);
|
||||
}
|
||||
|
|
|
@ -1429,9 +1429,6 @@ bool BfMethodMatcher::WantsCheckMethod(BfProtectionCheckFlags& flags, BfTypeInst
|
|||
|
||||
bool BfMethodMatcher::InferFromGenericConstraints(BfMethodInstance* methodInstance, BfGenericParamInstance* genericParamInst, BfTypeVector* methodGenericArgs)
|
||||
{
|
||||
// if ((genericParamInst->mGenericParamFlags & BfGenericParamFlag_Equals) == 0)
|
||||
// return false;
|
||||
|
||||
if (!genericParamInst->mExternType->IsGenericParam())
|
||||
return false;
|
||||
|
||||
|
@ -1441,17 +1438,6 @@ bool BfMethodMatcher::InferFromGenericConstraints(BfMethodInstance* methodInstan
|
|||
|
||||
BfType* checkArgType = NULL;
|
||||
|
||||
if ((genericParamInst->mGenericParamFlags & BfGenericParamFlag_Equals_Type) != 0)
|
||||
{
|
||||
checkArgType = genericParamInst->mTypeConstraint;
|
||||
}
|
||||
|
||||
if ((genericParamInst->mGenericParamFlags & BfGenericParamFlag_Equals_IFace) != 0)
|
||||
{
|
||||
if (!genericParamInst->mInterfaceConstraints.IsEmpty())
|
||||
checkArgType = genericParamInst->mInterfaceConstraints[0];
|
||||
}
|
||||
|
||||
for (auto& checkOpConstraint : genericParamInst->mOperatorConstraints)
|
||||
{
|
||||
auto leftType = checkOpConstraint.mLeftType;
|
||||
|
@ -1491,8 +1477,8 @@ bool BfMethodMatcher::InferFromGenericConstraints(BfMethodInstance* methodInstan
|
|||
SetAndRestoreValue<bool> prevIgnoreWrites(mModule->mBfIRBuilder->mIgnoreWrites, true);
|
||||
exprEvaluator.PerformBinaryOperation(NULL, NULL, checkOpConstraint.mBinaryOp, NULL, BfBinOpFlag_NoClassify, leftValue, rightValue);
|
||||
}
|
||||
|
||||
if ((genericParamInst->mGenericParamFlags & BfGenericParamFlag_Equals_Op) != 0)
|
||||
|
||||
if (exprEvaluator.mResult)
|
||||
checkArgType = exprEvaluator.mResult.mType;
|
||||
}
|
||||
else
|
||||
|
@ -1522,8 +1508,8 @@ bool BfMethodMatcher::InferFromGenericConstraints(BfMethodInstance* methodInstan
|
|||
BfExprEvaluator exprEvaluator(mModule);
|
||||
exprEvaluator.mResult = rightValue;
|
||||
exprEvaluator.PerformUnaryOperation(NULL, checkOpConstraint.mUnaryOp, NULL, BfUnaryOpFlag_IsConstraintCheck);
|
||||
|
||||
if ((genericParamInst->mGenericParamFlags & BfGenericParamFlag_Equals_Op) != 0)
|
||||
|
||||
if (exprEvaluator.mResult)
|
||||
checkArgType = exprEvaluator.mResult.mType;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7213,9 +7213,7 @@ void BfModule::ResolveGenericParamConstraints(BfGenericParamInstance* genericPar
|
|||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if ((constraintDef->mGenericParamFlags & BfGenericParamFlag_Equals) != 0)
|
||||
genericParamInstance->mGenericParamFlags = (BfGenericParamFlags)(genericParamInstance->mGenericParamFlags | BfGenericParamFlag_Equals_Op);
|
||||
|
||||
genericParamInstance->mOperatorConstraints.Add(opConstraintInstance);
|
||||
|
||||
continue;
|
||||
|
@ -7322,21 +7320,13 @@ void BfModule::ResolveGenericParamConstraints(BfGenericParamInstance* genericPar
|
|||
}
|
||||
checkEquality = true;
|
||||
}
|
||||
|
||||
if ((constraintDef->mGenericParamFlags & BfGenericParamFlag_Equals) != 0)
|
||||
{
|
||||
genericParamInstance->mGenericParamFlags = (BfGenericParamFlags)(genericParamInstance->mGenericParamFlags | BfGenericParamFlag_Equals_Type);
|
||||
checkEquality = true;
|
||||
}
|
||||
|
||||
|
||||
if (checkEquality)
|
||||
{
|
||||
genericParamInstance->mTypeConstraint = constraintType;
|
||||
}
|
||||
else if (constraintType->IsInterface())
|
||||
{
|
||||
if ((constraintDef->mGenericParamFlags & BfGenericParamFlag_Equals) != 0)
|
||||
genericParamInstance->mGenericParamFlags = (BfGenericParamFlags)(genericParamInstance->mGenericParamFlags | BfGenericParamFlag_Equals_IFace);
|
||||
{
|
||||
genericParamInstance->mInterfaceConstraints.push_back(constraintType->ToTypeInstance());
|
||||
}
|
||||
else
|
||||
|
|
|
@ -9565,7 +9565,7 @@ BfGenericConstraintsDeclaration* BfReducer::CreateGenericConstraintsDeclaration(
|
|||
if (genericParamName != NULL)
|
||||
{
|
||||
MEMBER_SET(genericConstraint, mTypeRef, genericParamName);
|
||||
tokenNode = ExpectTokenAfter(genericConstraint, BfToken_Colon, BfToken_AssignEquals);
|
||||
tokenNode = ExpectTokenAfter(genericConstraint, BfToken_Colon);
|
||||
}
|
||||
else
|
||||
isDone = true;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue