Actually, there's no reason you have to follow the abstract eval convention between casewhen and alternative.
You could just bypass the OperatorAlternativeExpression::eval and have OperatorCaseWhenExpression::eval directly eval the correct alternative child directly based on "thenClause". That way you wouldn't need to set and then check the hack thenClause member -- it could just be a temp bool.