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()); }
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)); }