/// <summary>
 /// Creates a new instance of OperatorExpression.
 /// </summary>
 /// <param name="operator"> The operator to base this expression on. </param>
 public OperatorExpression(Operator @operator)
 {
     if (@operator == null)
         throw new ArgumentNullException("operator");
     this.Operator = @operator;
     this.operands = new Expression[@operator.Arity];
 }
        /// <summary>
        /// Creates a derived instance of OperatorExpression from the given operator.
        /// </summary>
        /// <param name="operator"> The operator to base this expression on. </param>
        /// <returns> A derived OperatorExpression instance. </returns>
        public static OperatorExpression FromOperator(Operator @operator)
        {
            if (@operator == null)
                throw new ArgumentNullException("operator");
            switch (@operator.Type)
            {
                case OperatorType.Grouping:
                    return new GroupingExpression(@operator);

                case OperatorType.FunctionCall:
                    return new FunctionCallExpression(@operator);

                case OperatorType.MemberAccess:
                case OperatorType.Index:
                    return new MemberAccessExpression(@operator);

                case OperatorType.New:
                    return new NewExpression(@operator);

                case OperatorType.PostIncrement:
                case OperatorType.PostDecrement:
                case OperatorType.PreIncrement:
                case OperatorType.PreDecrement:
                case OperatorType.Assignment:
                case OperatorType.CompoundAdd:
                case OperatorType.CompoundBitwiseAnd:
                case OperatorType.CompoundBitwiseOr:
                case OperatorType.CompoundBitwiseXor:
                case OperatorType.CompoundDivide:
                case OperatorType.CompoundLeftShift:
                case OperatorType.CompoundModulo:
                case OperatorType.CompoundMultiply:
                case OperatorType.CompoundSignedRightShift:
                case OperatorType.CompoundSubtract:
                case OperatorType.CompoundUnsignedRightShift:
                    return new AssignmentExpression(@operator);

                case OperatorType.Conditional:
                    return new TernaryExpression(@operator);

                case OperatorType.Comma:
                    return new ListExpression(@operator);
            }
            if (@operator.Arity == 1)
                return new UnaryExpression(@operator);
            if (@operator.Arity == 2)
                return new BinaryExpression(@operator);
            throw new NotImplementedException();
        }
 /// <summary>
 /// Creates a new instance of ListExpression.
 /// </summary>
 /// <param name="operator"> The operator to base this expression on. </param>
 public ListExpression(Operator @operator)
     : base(@operator)
 {
 }
 /// <summary>
 /// Creates a new instance of NewExpression.
 /// </summary>
 /// <param name="operator"> The operator to base this expression on. </param>
 public NewExpression(Operator @operator)
     : base(@operator)
 {
 }
 /// <summary>
 /// Creates a new instance of UnaryExpression.
 /// </summary>
 /// <param name="operator"> The unary operator to base this expression on. </param>
 public UnaryExpression(Operator @operator)
     : base(@operator)
 {
 }
 /// <summary>
 /// Creates a new instance of AssignmentExpression.
 /// </summary>
 /// <param name="operator"> The operator to base this expression on. </param>
 public AssignmentExpression(Operator @operator)
     : base(@operator)
 {
 }
 /// <summary>
 /// Creates a new instance of MemberAccessExpression.
 /// </summary>
 /// <param name="operator"> The operator to base this expression on. </param>
 public MemberAccessExpression(Operator @operator)
     : base(@operator)
 {
 }
 /// <summary>
 /// Creates a new instance of BinaryJSExpression.
 /// </summary>
 /// <param name="operator"> The binary operator to base this expression on. </param>
 /// <param name="left"> The operand on the left side of the operator. </param>
 /// <param name="right"> The operand on the right side of the operator. </param>
 public BinaryExpression(Operator @operator, Expression left, Expression right)
     : base(@operator)
 {
     this.Push(left);
     this.Push(right);
 }
 /// <summary>
 /// Creates a new instance of GroupingJSExpression.
 /// </summary>
 /// <param name="operator"> The operator to base this expression on. </param>
 public GroupingExpression(Operator @operator)
     : base(@operator)
 {
 }
 /// <summary>
 /// Creates a new instance of FunctionCallJSExpression.
 /// </summary>
 /// <param name="operator"> The binary operator to base this expression on. </param>
 public FunctionCallExpression(Operator @operator)
     : base(@operator)
 {
 }
 /// <summary>
 /// Creates a new instance of MemberAccessExpression.
 /// </summary>
 /// <param name="operator"> The operator to base this expression on. </param>
 public MemberAccessExpression(Operator @operator)
     : base(@operator)
 {
 }
Beispiel #12
0
 /// <summary>
 /// Creates a new instance of AssignmentExpression.
 /// </summary>
 /// <param name="operator"> The operator to base this expression on. </param>
 public AssignmentExpression(Operator @operator)
     : base(@operator)
 {
 }