1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-09 20:12:21 +02:00

Improvements to interfaces: extensions, better generics, statics

This commit is contained in:
Brian Fiete 2020-05-27 09:46:09 -07:00
parent bff1d657cc
commit 6cb2df65a6
12 changed files with 322 additions and 68 deletions

View file

@ -4660,6 +4660,11 @@ BfTypeReference* BfReducer::DoCreateTypeRef(BfAstNode* firstNode, CreateTypeRefF
if (tokenNode->GetToken() == BfToken_RParen)
{
if ((fieldTypes.size() == 1) && ((createTypeRefFlags & CreateTypeRefFlags_AllowSingleMemberTuple) == 0))
{
Fail("Tuple types must contain more than one member", tokenNode);
}
MEMBER_SET(tupleTypeRef, mCloseParen, tokenNode);
//return tupleTypeRef;
firstNode = tupleTypeRef;
@ -5733,7 +5738,7 @@ BfAstNode* BfReducer::ReadTypeMember(BfTokenNode* tokenNode, int depth)
tokenNode = ExpectTokenAfter(enumEntry, BfToken_Comma, BfToken_AssignEquals, BfToken_LParen, BfToken_Semicolon);
if ((tokenNode != NULL) && (tokenNode->GetToken() == BfToken_LParen))
{
auto typeRef = CreateTypeRef(tokenNode);
auto typeRef = CreateTypeRef(tokenNode, CreateTypeRefFlags_AllowSingleMemberTuple);
tokenNode = NULL;
auto tupleType = BfNodeDynCast<BfTupleTypeRef>(typeRef);
if (tupleType != NULL)
@ -9202,7 +9207,10 @@ BfGenericConstraintsDeclaration* BfReducer::CreateGenericConstraintsDeclaration(
if (opConstraint->mOpToken == NULL)
{
if (opToken == NULL)
{
Fail("Conversion operators require either 'implicit' or 'explicit' qualifiers", opConstraint->mOperatorToken);
break;
}
MEMBER_SET(opConstraint, mOpToken, opToken);
mVisitorPos.MoveNext();
}