On Monday, 24 May 2021 at 19:42:00 UTC, user1234 wrote:
>Eventually what could be done for the biggest methods of visitors is to extract parts of the content to several non-nested free functions, so that no more low level implementation details, like control loops, are visible and instead you just see do_this; do_that; with just a few, nzzcessarily unavoidable, flow statements.
I've had the opportunity to do quch a refact yesterday in styx. It makes things very clear, for example the expression semantic for binary assign exps :
override void visit(BinAssExpressionAstNode node)
{
processBinaryOperands(node);
if (tryRewritingToOperatorOverload(node, [node.left, node.right]))
return;
if (tryToSetLengthExp(node))
return;
if (checkIfInvalidEnumSetOp(node))
return;
if (checkPtrArithmeticOp(node))
return;
ensureAssignedParamIsLvalue(node);
tryOneWayAssImplicitConv(node);
checkIfAssignable(node.left);
}
or for binary exps that are not assign and not cmp:
override void visit(BinaryExpressionAstNode node)
{
processBinaryOperands(node);
if (tryRewritingToOperatorOverload(node, [node.left, node.right]))
return;
if (checkIfInvalidEnumSetOp(node))
return;
if (checkPtrArithmeticOp(node))
return;
tryTwoWaysBinaryImplicitConv(node);
}
It was like 200 lines before.