Beispiel #1
0
        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);
        }
Beispiel #3
0
        /// <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);
        }