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

Parse fixes for failed attempted cast

This commit is contained in:
Brian Fiete 2020-06-23 09:29:26 -07:00
parent 807d8eba7e
commit fb5eaaa010

View file

@ -2066,33 +2066,48 @@ BfExpression* BfReducer::CreateExpression(BfAstNode* node, CreateExprFlags creat
if (isCastExpr) if (isCastExpr)
{ {
auto bfCastExpr = mAlloc->Alloc<BfCastExpression>(); BfCastExpression* bfCastExpr = NULL;
if (isTuple) if (isTuple)
{ {
// Create typeRef including the parens (tuple type) // Create typeRef including the parens (tuple type)
auto castTypeRef = CreateTypeRef(tokenNode); auto castTypeRef = CreateTypeRef(tokenNode);
ReplaceNode(castTypeRef, bfCastExpr); if (castTypeRef != NULL)
bfCastExpr->mTypeRef = castTypeRef; {
bfCastExpr = mAlloc->Alloc<BfCastExpression>();
ReplaceNode(castTypeRef, bfCastExpr);
bfCastExpr->mTypeRef = castTypeRef;
}
} }
else else
{ {
ReplaceNode(tokenNode, bfCastExpr); auto castTypeRef = CreateTypeRefAfter(tokenNode);
bfCastExpr->mOpenParen = tokenNode; if (castTypeRef != NULL)
auto castTypeRef = CreateTypeRefAfter(bfCastExpr); {
bfCastExpr = mAlloc->Alloc<BfCastExpression>();
MEMBER_SET_CHECKED(bfCastExpr, mTypeRef, castTypeRef); ReplaceNode(tokenNode, bfCastExpr);
tokenNode = ExpectTokenAfter(bfCastExpr, BfToken_RParen); bfCastExpr->mOpenParen = tokenNode;
MEMBER_SET_CHECKED(bfCastExpr, mCloseParen, tokenNode);
MEMBER_SET_CHECKED(bfCastExpr, mTypeRef, castTypeRef);
tokenNode = ExpectTokenAfter(bfCastExpr, BfToken_RParen);
MEMBER_SET_CHECKED(bfCastExpr, mCloseParen, tokenNode);
}
} }
auto expression = CreateExpressionAfter(bfCastExpr); if (bfCastExpr == NULL)
if (expression == NULL) isCastExpr = false;
return bfCastExpr; else
MEMBER_SET(bfCastExpr, mExpression, expression); {
unaryOpExpr = bfCastExpr; auto expression = CreateExpressionAfter(bfCastExpr);
if (expression == NULL)
return bfCastExpr;
MEMBER_SET(bfCastExpr, mExpression, expression);
unaryOpExpr = bfCastExpr;
}
} }
else
if (!isCastExpr)
{ {
if (auto nextToken = BfNodeDynCast<BfTokenNode>(mVisitorPos.GetNext())) if (auto nextToken = BfNodeDynCast<BfTokenNode>(mVisitorPos.GetNext()))
{ {