internal override MSA.Expression/*!*/ TransformRead(AstGenerator/*!*/ gen) {
MSA.Expression result;
int i = _elseIfClauses.Count - 1;
if (i >= 0 && _elseIfClauses[i].Condition == null) {
// ... else body end
result = gen.TransformStatementsToExpression(_elseIfClauses[i].Statements);
i--;
} else {
// no else clause => the result of the if-expression is nil:
result = AstUtils.Constant(null);
}
while (i >= 0) {
// emit: else (if (condition) body else result)
result = AstFactory.Condition(
_elseIfClauses[i].Condition.TransformCondition(gen, true),
gen.TransformStatementsToExpression(_elseIfClauses[i].Statements),
result
);
i--;
}
// if (condition) body else result
return AstFactory.Condition(
_condition.TransformCondition(gen, true),
gen.TransformStatementsToExpression(_body),
result
);
}