mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-10 04:22:20 +02:00
String interpolation
This commit is contained in:
parent
22cc81862b
commit
281f19e04c
15 changed files with 379 additions and 59 deletions
|
@ -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);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue