public override Expression Simplify() { Base = base.Simplify(); Index = Index.Simplify(); return(this); }
public override Expression Simplify() { Rhs = Rhs.Simplify(); UnaryOperator unop = GetOperator(); if (Rhs is NumberExpr) { if (unop == UnaryOperator.Negate) { return(new NumberExpr("-" + ((NumberExpr)Rhs).Value)); } else if (unop == UnaryOperator.UnNegate) { double res; if (Lua.luaO_str2d(((NumberExpr)Rhs).Value, out res) == 1) { return(new NumberExpr(Math.Abs(res))); } } } else if (Rhs is BoolExpr) { if (unop == UnaryOperator.Not) { return(new BoolExpr(!((BoolExpr)Rhs).Value)); } } return(this); }
public override Expression Simplify() { Base = Base.Simplify(); for (int i = 0; i < Arguments.Count; i++) { Arguments[i] = Arguments[i].Simplify(); } return(this); }
public override Expression Simplify() { Key = Key.Simplify(); Value = Value.Simplify(); return(this); }
public override Expression Simplify() { Lhs = Lhs.Simplify(); Rhs = Rhs.Simplify(); double a, b; int isNumA = Lua.luaO_str2d(((NumberExpr)Lhs).Value, out a); int isNumB = Lua.luaO_str2d(((NumberExpr)Rhs).Value, out b); bool isNum = false; isNum = isNumA == 1 && isNumB == 1; switch (GetOperator()) { case BinaryOperator.Add: if (isNum) { return(new NumberExpr(a + b)); } break; case BinaryOperator.Subtract: if (isNum) { return(new NumberExpr(a - b)); } break; case BinaryOperator.Multiply: if (isNum) { return(new NumberExpr(a * b)); } break; case BinaryOperator.Divide: if (isNum) { return(new NumberExpr(a / b)); } break; case BinaryOperator.Power: if (isNum) { return(new NumberExpr(Math.Pow(a, b))); } break; case BinaryOperator.Modulus: if (isNum) { return(new NumberExpr(a % b)); } break; case BinaryOperator.LessThan: if (isNum) { return(new BoolExpr(a < b)); } break; case BinaryOperator.LessThanOrEqualTo: if (isNum) { return(new BoolExpr(a <= b)); } break; case BinaryOperator.GreaterThan: if (isNum) { return(new BoolExpr(a > b)); } break; case BinaryOperator.GreaterThanOrEqualTo: if (isNum) { return(new BoolExpr(a >= b)); } break; case BinaryOperator.NotEqual: if (Lhs is BoolExpr && Rhs is BoolExpr) { return(new BoolExpr(((BoolExpr)Lhs).Value != ((BoolExpr)Rhs).Value)); } else if (isNum) { return(new BoolExpr(a != b)); } break; case BinaryOperator.Equals: if (Lhs is BoolExpr && Rhs is BoolExpr) { return(new BoolExpr(((BoolExpr)Lhs).Value == ((BoolExpr)Rhs).Value)); } else if (isNum) { return(new BoolExpr(a == b)); } break; case BinaryOperator.And: if (Lhs is BoolExpr && Rhs is BoolExpr) { return(new BoolExpr(((BoolExpr)Lhs).Value && ((BoolExpr)Rhs).Value)); } break; case BinaryOperator.Or: if (Lhs is BoolExpr && Rhs is BoolExpr) { return(new BoolExpr(((BoolExpr)Lhs).Value || ((BoolExpr)Rhs).Value)); } break; case BinaryOperator.ShiftRight: case BinaryOperator.ShiftLeft: case BinaryOperator.Xor: case BinaryOperator.BitAnd: case BinaryOperator.BitOr: case BinaryOperator.BitNot: case BinaryOperator.Concat: case BinaryOperator.NONE: default: break; } return(base.Simplify()); }
public override Expression Simplify() { Base = Base.Simplify(); return(this); }