Beispiel #1
0
        public override AssociativeNode VisitInlineConditionalNode(InlineConditionalNode node)
        {
            var newCondition = node.ConditionExpression.Accept(this);

            if (node.ConditionExpression != newCondition)
            {
                node.ConditionExpression = newCondition;
            }

            var newTrueExpr = node.TrueExpression.Accept(this);

            if (node.TrueExpression != newTrueExpr)
            {
                node.TrueExpression = newTrueExpr;
            }

            var newFalseExpr = node.FalseExpression.Accept(this);

            if (node.FalseExpression != newFalseExpr)
            {
                node.FalseExpression = newFalseExpr;
            }

            return(node);
        }
        public virtual bool VisitInlineConditionalNode(InlineConditionalNode node)
        {
            node.ConditionExpression.Accept(this);
            node.TrueExpression.Accept(this);
            node.FalseExpression.Accept(this);

            return(true);
        }
Beispiel #3
0
            public override bool VisitInlineConditionalNode(InlineConditionalNode node)
            {
                if (forDefinition)
                {
                    return(false);
                }

                return(node.ConditionExpression.Accept(this) ||
                       node.TrueExpression.Accept(this) ||
                       node.FalseExpression.Accept(this));
            }
Beispiel #4
0
        void TernaryOp(ref Node node)
        {
            InlineConditionalNode inlineConNode = new InlineConditionalNode();

            Expect(35);
            inlineConNode.ConditionExpression = node; node = null;
            expr(out node);
            inlineConNode.TrueExpression = node;
            Expect(36);
            node = null;
            expr(out node);
            inlineConNode.FalseExpression = node;
            node = inlineConNode;
        }
Beispiel #5
0
        public override IEnumerable <AssociativeNode> BuildOutputAst(List <AssociativeNode> inputAstNodes)
        {
            Warning(Resources.IFNodeWarningMessage, true);

            var             lhs = GetAstIdentifierForOutputIndex(0);
            AssociativeNode rhs;

            if (IsPartiallyApplied)
            {
                var connectedInputs = Enumerable.Range(0, InPorts.Count)
                                      .Where(index => InPorts[index].IsConnected)
                                      .Select(x => new IntNode(x) as AssociativeNode)
                                      .ToList();
                var functionNode = new IdentifierNode(Constants.kInlineConditionalMethodName);
                var paramNumNode = new IntNode(3);
                var positionNode = AstFactory.BuildExprList(connectedInputs);
                var arguments    = AstFactory.BuildExprList(inputAstNodes);
                var inputParams  = new List <AssociativeNode>
                {
                    functionNode,
                    paramNumNode,
                    positionNode,
                    arguments,
                    AstFactory.BuildBooleanNode(true)
                };

                rhs = AstFactory.BuildFunctionCall("__CreateFunctionObject", inputParams);
            }
            else
            {
                rhs = new InlineConditionalNode
                {
                    ConditionExpression = inputAstNodes[0],
                    TrueExpression      = inputAstNodes[1],
                    FalseExpression     = inputAstNodes[2]
                };
            }

            return(new[]
            {
                AstFactory.BuildAssignment(lhs, rhs)
            });
        }
Beispiel #6
0
 public virtual void VisitInlineConditionalNode(InlineConditionalNode node)
 {
     node.ConditionExpression.Accept(this);
     node.TrueExpression.Accept(this);
     node.FalseExpression.Accept(this);
 }
Beispiel #7
0
 public virtual TAssociative VisitInlineConditionalNode(InlineConditionalNode node)
 {
     return(VisitAssociativeNode(node));
 }