Esempio n. 1
0
        public IExpressionNode Visit(IfThenElseSyntaxNode node)
        {
            //expressions
            //if (...) {here}
            var expressionNodes = new IExpressionNode[node.Ifs.Length];
            //conditions
            // if ( {here} ) ...
            var conditionNodes = new IExpressionNode[node.Ifs.Length];

            for (int i = 0; i < expressionNodes.Length; i++)
            {
                conditionNodes[i] = ReadNode(node.Ifs[i].Condition);
                var exprNode = ReadNode(node.Ifs[i].Expression);
                expressionNodes[i] = CastExpressionNode.GetConvertedOrOriginOrThrow(exprNode, node.OutputType);
            }

            var elseNode = CastExpressionNode.GetConvertedOrOriginOrThrow(ReadNode(node.ElseExpr), node.OutputType);

            return(new IfElseExpressionNode(
                       ifExpressionNodes: expressionNodes,
                       conditionNodes:    conditionNodes,
                       elseNode:          elseNode,
                       interval:          node.Interval,
                       type:              node.OutputType));
        }
Esempio n. 2
0
        public override bool Visit(IfThenElseSyntaxNode node)
        {
            //Old code for composite upcast support:

            /*
             * if (node.OutputType != VarType.Anything)
             *  return true;
             *
             * if (node.Ifs.Any(i => i.Expression.OutputType == VarType.Anything))
             *  return true;
             * if (node.ElseExpr.OutputType == VarType.Anything)
             *  return true;
             *
             * throw ErrorFactory.VariousIfElementTypes(node);
             */

            //If upcast is denied:
            if (node.OutputType == FunnyType.Anything)
            {
                return(true);
            }
            if (node.Ifs.Any(i => i.Expression.OutputType != node.OutputType) || node.ElseExpr.OutputType != node.OutputType)
            {
                throw ErrorFactory.VariousIfElementTypes(node);
            }
            return(true);
        }
Esempio n. 3
0
        public bool Visit(IfThenElseSyntaxNode node)
        {
            VisitChildren(node);

            var conditions  = node.Ifs.SelectToArray(i => i.Condition.OrderNumber);
            var expressions = node.Ifs.SelectToArrayAndAppendTail(
                tail:    node.ElseExpr.OrderNumber,
                mapFunc: i => i.Expression.OrderNumber);

            #if DEBUG
            Trace(node, $"if({string.Join(",", conditions)}): {string.Join(",", expressions)}");
            #endif

            _ticTypeGraph.SetIfElse(
                conditions,
                expressions,
                node.OrderNumber);
            return(true);
        }
Esempio n. 4
0
 public virtual VisitorEnterResult Visit(IfThenElseSyntaxNode node) => DefaultVisitEnter(node);
Esempio n. 5
0
 public string Visit(IfThenElseSyntaxNode node) => "if (...) ... else ...";
Esempio n. 6
0
 public virtual bool Visit(IfThenElseSyntaxNode node) => true;