mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-10 04:22:20 +02:00
Allow expression-bodied mixins
This commit is contained in:
parent
344b8d0181
commit
869d626412
1 changed files with 25 additions and 12 deletions
|
@ -15966,25 +15966,31 @@ void BfExprEvaluator::InjectMixin(BfAstNode* targetSrc, BfTypedValue target, boo
|
||||||
}
|
}
|
||||||
|
|
||||||
if (auto blockBody = BfNodeDynCast<BfBlock>(methodDef->mBody))
|
if (auto blockBody = BfNodeDynCast<BfBlock>(methodDef->mBody))
|
||||||
|
{
|
||||||
mModule->VisitCodeBlock(blockBody);
|
mModule->VisitCodeBlock(blockBody);
|
||||||
|
|
||||||
if (mixinState->mResultExpr != NULL)
|
if (mixinState->mResultExpr != NULL)
|
||||||
{
|
|
||||||
if (auto exprNode = BfNodeDynCast<BfExpression>(mixinState->mResultExpr))
|
|
||||||
{
|
{
|
||||||
if (!exprNode->IsA<BfBlock>())
|
if (auto exprNode = BfNodeDynCast<BfExpression>(mixinState->mResultExpr))
|
||||||
{
|
{
|
||||||
// Mixin expression result
|
if (!exprNode->IsA<BfBlock>())
|
||||||
mModule->UpdateSrcPos(exprNode);
|
{
|
||||||
VisitChild(exprNode);
|
// Mixin expression result
|
||||||
FinishExpressionResult();
|
mModule->UpdateSrcPos(exprNode);
|
||||||
ResolveGenericType();
|
VisitChild(exprNode);
|
||||||
//mResult = mModule->LoadValue(mResult);
|
FinishExpressionResult();
|
||||||
|
ResolveGenericType();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
GetResult();
|
GetResult();
|
||||||
|
}
|
||||||
|
else if (auto expr = BfNodeDynCast<BfExpression>(methodDef->mBody))
|
||||||
|
{
|
||||||
|
mModule->UpdateSrcPos(expr);
|
||||||
|
mResult = mModule->CreateValueFromExpression(expr);
|
||||||
|
}
|
||||||
|
|
||||||
if (!mResult)
|
if (!mResult)
|
||||||
{
|
{
|
||||||
|
@ -16013,8 +16019,15 @@ void BfExprEvaluator::InjectMixin(BfAstNode* targetSrc, BfTypedValue target, boo
|
||||||
}
|
}
|
||||||
|
|
||||||
if (auto blockBody = BfNodeDynCast<BfBlock>(methodDef->mBody))
|
if (auto blockBody = BfNodeDynCast<BfBlock>(methodDef->mBody))
|
||||||
|
{
|
||||||
if (blockBody->mCloseBrace != NULL)
|
if (blockBody->mCloseBrace != NULL)
|
||||||
mModule->UpdateSrcPos(blockBody->mCloseBrace);
|
mModule->UpdateSrcPos(blockBody->mCloseBrace);
|
||||||
|
}
|
||||||
|
else if (auto methodDeclaration = BfNodeDynCast<BfMethodDeclaration>(methodDef->mMethodDeclaration))
|
||||||
|
{
|
||||||
|
if (methodDeclaration->mFatArrowToken != NULL)
|
||||||
|
mModule->UpdateSrcPos(methodDeclaration->mFatArrowToken);
|
||||||
|
}
|
||||||
|
|
||||||
mModule->RestoreScopeState();
|
mModule->RestoreScopeState();
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue