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

String interpolation

This commit is contained in:
Brian Fiete 2020-11-11 05:46:52 -08:00
parent 22cc81862b
commit 281f19e04c
15 changed files with 379 additions and 59 deletions

View file

@ -1427,6 +1427,15 @@ BfExpression* BfReducer::CreateExpression(BfAstNode* node, CreateExprFlags creat
AssertCurrentNode(node);
if (auto interpolateExpr = BfNodeDynCastExact<BfStringInterpolationExpression>(node))
{
for (auto block : interpolateExpr->mExpressions)
{
HandleBlock(block, true);
}
return interpolateExpr;
}
if ((createExprFlags & (CreateExprFlags_AllowVariableDecl | CreateExprFlags_PermissiveVariableDecl)) != 0)
{
bool isLocalVariable = false;
@ -1712,6 +1721,8 @@ BfExpression* BfReducer::CreateExpression(BfAstNode* node, CreateExprFlags creat
bool isDelegateBind = false;
bool isLambdaBind = false;
bool isBoxing = false;
auto nextNode = mVisitorPos.GetNext();
if (auto nextTokenNode = BfNodeDynCast<BfTokenNode>(nextNode))
{
@ -1735,8 +1746,20 @@ BfExpression* BfReducer::CreateExpression(BfAstNode* node, CreateExprFlags creat
mVisitorPos.mReadPos--;
}
}
if (auto interpExpr = BfNodeDynCastExact<BfStringInterpolationExpression>(nextNode))
{
mVisitorPos.MoveNext();
auto nextInterpExpr = CreateExpression(nextNode);
BF_ASSERT(nextInterpExpr == interpExpr);
if (isBoxing)
interpExpr->mAllocNode = allocNode;
interpExpr->mTriviaStart = allocNode->mTriviaStart;
interpExpr->mSrcStart = allocNode->mSrcStart;
exprLeft = interpExpr;
}
else if (isBoxing)
{
auto boxExpr = mAlloc->Alloc<BfBoxExpression>();
ReplaceNode(allocNode, boxExpr);