1
0
Fork 0
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:
Brian Fiete 2021-11-04 08:05:33 -07:00
parent 344b8d0181
commit 869d626412

View file

@ -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();