public dynamic Visit(IfStm stm) { var node = new TreeNode("IfStatement") { Tag = stm.Node }; node.Nodes.Add(new TreeNode("Condition") { Nodes = { Visit((dynamic)stm.Condition) } }); if (stm.IfTrue != null) { node.Nodes.Add(new TreeNode("IfTrueStatements") { Nodes = { Visit(stm.IfTrue) } }); } if (stm.IfFalse != null) { node.Nodes.Add(new TreeNode("IfFalseStatements") { Nodes = { Visit(stm.IfFalse) } }); } return(node); }
public dynamic Visit(IfStm stm) { stm.OrderNumber = _count; Visit((dynamic)stm.Condition); VisitNext(stm); return(null); }
/// <summary> /// Rule: IfStm -> IF Expr Statements (ELSE Statements )? ; /// </summary> protected override object EvalIfStm(ParseTree tree, params object[] paramlist) { var expr = (ExpressionBase)GetNode(TokenType.Expr).Eval(tree); var iftrue = (CodeBlock)nodes.OfTokenType(TokenType.Statements).First().Eval(tree); var iffalse = nodes.OfTokenType(TokenType.Statements).Count() > 1 ? (CodeBlock)nodes.OfTokenType(TokenType.Statements).Last().Eval(tree):null; var ifstm = new IfStm { Node = this, Condition = expr, IfFalse = iffalse, IfTrue = iftrue }; return(ifstm); }
public dynamic Visit(IfStm stm) { _codeGen.If(Visit((dynamic)stm.Condition)); { Visit((dynamic)stm.IfTrue); } if (stm.IfFalse != null) { _codeGen.Else(); { Visit((dynamic)stm.IfFalse); } } _codeGen.End(); return(null); }
public dynamic Visit(IfStm stm) { stm.Condition = (ExpressionBase)stm.Condition.Optimize(); stm.IfTrue = (CodeBlock)stm.IfTrue.Optimize() ?? stm.IfTrue; stm.IfFalse = (CodeBlock)(stm.IfFalse?.Optimize() ?? stm.IfFalse); if (!OptimizeMode.UnreacheableCode) { return(stm); } var condition = stm.Condition as LiteralExpr; if (condition == null) { return(stm); } return(condition.Value ? stm.IfTrue : stm.IfFalse); }