Exemple #1
0
        public void ParseDotIndexedAssign()
        {
            Parser parser   = new Parser("a.b[1] = 2");
            var    expected = new AssignIndexedExpression(new DotExpression(new NameExpression("a"), "b", new IExpression[] { }), new ConstantExpression(1), new ConstantExpression(2));
            var    result   = parser.ParseExpression();

            Assert.IsNotNull(result);
            Assert.AreEqual(expected, result);

            Assert.IsNull(parser.ParseCommand());
        }
Exemple #2
0
        public IExpression ParseExpression()
        {
            IExpression expr = this.ParseNoAssignExpression();

            if (expr == null)
            {
                return(null);
            }

            if (!(expr is NameExpression) && !(expr is ClassVarExpression) && !(expr is InstanceVarExpression) && !(expr is DotExpression) && !(expr is IndexedExpression))
            {
                return(expr);
            }

            var token = this.lexer.NextToken();

            if (token == null)
            {
                return(expr);
            }

            if (token.Type != TokenType.Operator || token.Value != "=")
            {
                this.lexer.PushToken(token);
                return(expr);
            }

            IExpression assignexpr = null;

            if (expr is NameExpression)
            {
                assignexpr = new AssignExpression(((NameExpression)expr).Name, this.ParseExpression());
            }
            else if (expr is DotExpression)
            {
                assignexpr = new AssignDotExpressions((DotExpression)expr, this.ParseExpression());
            }
            else if (expr is InstanceVarExpression)
            {
                assignexpr = new AssignInstanceVarExpression(((InstanceVarExpression)expr).Name, this.ParseExpression());
            }
            else if (expr is ClassVarExpression)
            {
                assignexpr = new AssignClassVarExpression(((ClassVarExpression)expr).Name, this.ParseExpression());
            }
            else if (expr is IndexedExpression)
            {
                assignexpr = new AssignIndexedExpression(((IndexedExpression)expr).Expression, ((IndexedExpression)expr).IndexExpression, this.ParseExpression());
            }

            return(assignexpr);
        }
        public void SimpleEvaluate()
        {
            var array = new int[] { 1, 2, 3 };
            AssignIndexedExpression expr = new AssignIndexedExpression(new ConstantExpression(array), new ConstantExpression(1), new ConstantExpression(10));

            var result = expr.Evaluate(null);

            Assert.IsNotNull(result);
            Assert.AreEqual(10, result);

            Assert.AreEqual(1, array[0]);
            Assert.AreEqual(10, array[1]);
            Assert.AreEqual(3, array[2]);
        }
        public void Equals()
        {
            AssignIndexedExpression expr1 = new AssignIndexedExpression(new ConstantExpression(1), new ConstantExpression(2), new ConstantExpression(3));
            AssignIndexedExpression expr2 = new AssignIndexedExpression(new ConstantExpression(10), new ConstantExpression(2), new ConstantExpression(3));
            AssignIndexedExpression expr3 = new AssignIndexedExpression(new ConstantExpression(1), new ConstantExpression(20), new ConstantExpression(3));
            AssignIndexedExpression expr4 = new AssignIndexedExpression(new ConstantExpression(1), new ConstantExpression(2), new ConstantExpression(30));
            AssignIndexedExpression expr5 = new AssignIndexedExpression(new ConstantExpression(1), new ConstantExpression(2), new ConstantExpression(3));

            Assert.IsFalse(expr1.Equals(null));
            Assert.IsFalse(expr1.Equals(123));
            Assert.IsFalse(expr1.Equals("foo"));

            Assert.IsTrue(expr1.Equals(expr5));
            Assert.IsTrue(expr5.Equals(expr1));
            Assert.AreEqual(expr1.GetHashCode(), expr5.GetHashCode());

            Assert.IsFalse(expr1.Equals(expr2));
            Assert.IsFalse(expr2.Equals(expr1));
            Assert.IsFalse(expr1.Equals(expr3));
            Assert.IsFalse(expr3.Equals(expr1));
            Assert.IsFalse(expr1.Equals(expr4));
            Assert.IsFalse(expr4.Equals(expr1));
        }