1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-10 04:22:20 +02:00

Support for expression-bodied properties with mut

This commit is contained in:
Brian Fiete 2022-01-03 14:41:12 -05:00
parent 60b6437f69
commit c0fe1d1c1b
7 changed files with 47 additions and 11 deletions

View file

@ -6966,7 +6966,7 @@ BfAstNode* BfReducer::ReadTypeMember(BfAstNode* node, bool declStarted, int dept
auto block = BfNodeDynCast<BfBlock>(nextNode);
auto tokenNode = BfNodeDynCast<BfTokenNode>(nextNode);
bool isExprBodyProp = (tokenNode != NULL) && (tokenNode->mToken == BfToken_FatArrow);
bool isExprBodyProp = (tokenNode != NULL) && ((tokenNode->mToken == BfToken_FatArrow) || (tokenNode->mToken == BfToken_Mut));
// Property.
// If we don't have a token afterwards then still treat it as a property for autocomplete purposes
if ((typeRef != NULL) &&
@ -7050,20 +7050,32 @@ BfAstNode* BfReducer::ReadTypeMember(BfAstNode* node, bool declStarted, int dept
auto propertyBodyExpr = mAlloc->Alloc<BfPropertyBodyExpression>();
ReplaceNode(tokenNode, propertyBodyExpr);
MEMBER_SET(propertyBodyExpr, mFatTokenArrow, tokenNode);
auto method = mAlloc->Alloc<BfPropertyMethodDeclaration>();
method->mPropertyDeclaration = propertyDeclaration;
method->mNameNode = propertyDeclaration->mNameNode;
BfTokenNode* mutSpecifier = NULL;
auto expr = CreateExpressionAfter(tokenNode);
if (expr != NULL)
if (tokenNode->mToken == BfToken_Mut)
{
MEMBER_SET(method, mBody, expr);
propertyDeclaration->SetSrcEnd(expr->GetSrcEnd());
MEMBER_SET(propertyBodyExpr, mMutSpecifier, tokenNode);
tokenNode = ExpectTokenAfter(tokenNode, BfToken_FatArrow);
}
methods.Add(method);
if (tokenNode != NULL)
{
MEMBER_SET(propertyBodyExpr, mFatTokenArrow, tokenNode);
auto method = mAlloc->Alloc<BfPropertyMethodDeclaration>();
method->mPropertyDeclaration = propertyDeclaration;
method->mNameNode = propertyDeclaration->mNameNode;
auto expr = CreateExpressionAfter(tokenNode);
if (expr != NULL)
{
MEMBER_SET(method, mBody, expr);
propertyDeclaration->SetSrcEnd(expr->GetSrcEnd());
}
methods.Add(method);
}
MEMBER_SET(propertyDeclaration, mDefinitionBlock, propertyBodyExpr);
}