コード例 #1
0
        public void Reduce_FunctionWithConstantParameters()
        {
            _runtime
            .Setup(mock => mock.FindAndCall("f",
                                            It.Is <IExecutionContext>(context =>
                                                                      context.Line == 0 &&
                                                                      context.Column == 0 &&
                                                                      context.Count == 2 &&
                                                                      context[0].Equals(new IntValue(1)) &&
                                                                      context[1].Equals(new IntValue(2))
                                                                      )))
            .Returns(new IntValue(3));

            var expr =
                new FunctionCallExpression(0, 0, "f", new []
            {
                new ConstantExpression(0, 1, new IntValue(1)),
                new ConstantExpression(0, 3, new IntValue(2)),
            });
            var reduced = expr.Accept(_visitor);

            Assert.IsInstanceOfType(reduced, typeof(ConstantExpression));

            var constant = (ConstantExpression)reduced;

            Assert.AreEqual(new IntValue(3), constant.Value);
            Assert.AreEqual(0, constant.Line);
            Assert.AreEqual(0, constant.Column);
        }
コード例 #2
0
 public void Visit(FunctionCallExpression functionCallExpression)
 {
     if (_innerVisitor != null)
     {
         functionCallExpression.Accept(_innerVisitor);
     }
     foreach (var p in functionCallExpression.Parameters)
     {
         p.Accept(this);
     }
 }
コード例 #3
0
        public void Reduce_FunctionWithSomeConstantParameters()
        {
            _runtime
            .Setup(mock => mock.FindAndCall("+",
                                            It.Is <IExecutionContext>(context =>
                                                                      context.Line == 0 &&
                                                                      context.Column == 3 &&
                                                                      context.Count == 2 &&
                                                                      context[0].Equals(new IntValue(1)) &&
                                                                      context[1].Equals(new IntValue(2))
                                                                      )))
            .Returns(new IntValue(3));

            var expr =
                new FunctionCallExpression(0, 0, "f", new ValueExpression[]
            {
                new AdditionExpression(0, 3,
                                       new ConstantExpression(0, 2, new IntValue(1)),
                                       new ConstantExpression(0, 4, new IntValue(2))),
                new AttributeAccessExpression(0, 5, "a"),
            });
            var reduced = expr.Accept(_visitor);

            Assert.IsInstanceOfType(reduced, typeof(FunctionCallExpression));

            var parameters = ((FunctionCallExpression)reduced).Parameters;

            Assert.AreEqual(2, parameters.Count);

            Assert.AreEqual(new IntValue(3), ((ConstantExpression)parameters[0]).Value);
            Assert.AreEqual(0, parameters[0].Line);
            Assert.AreEqual(3, parameters[0].Column);

            Assert.AreEqual("a", ((AttributeAccessExpression)parameters[1]).Name);
            Assert.AreEqual(0, parameters[1].Line);
            Assert.AreEqual(5, parameters[1].Column);
        }