public Expr CompileIfStatement(ParseTreeNode parseNode)
{
//[0] - Condition
//[1] - True Block
//[2] - {ElseIf Statements}
//[3] - [Else Block]
bool hasElseIfs = parseNode.ChildNodes[2].ChildNodes.Any();
bool hasElse = parseNode.ChildNodes[3].ChildNodes.Any();
Expr ifStatement = Expr.Empty();
//Add else component
if (hasElse)
{
ifStatement = CompileBlock(parseNode.ChildNodes[3]);
}
foreach (var elseIf in Enumerable.Reverse(parseNode.ChildNodes[2].ChildNodes))
{
ifStatement = Expr.IfThenElse(
TypeHelpers.ToBoolean(CompileExpression(elseIf.ChildNodes[0])),
CompileBlock(elseIf.ChildNodes[1]),
ifStatement);
}
ifStatement = Expr.IfThenElse(
TypeHelpers.ToBoolean(CompileExpression(parseNode.ChildNodes[0])),
CompileBlock(parseNode.ChildNodes[1]),
ifStatement
);
return(ifStatement);
}