Exemplo n.º 1
0
        /// <summary>
        /// Initializes a new instance of the IsExpression class.
        /// </summary>
        /// <param name="tokens">
        /// The list of tokens that form the expression.
        /// </param>
        /// <param name="leftSideExpression">
        /// The left hand side of the expression.
        /// </param>
        /// <param name="rightSideExpression">
        /// The right hand side of the expression.
        /// </param>
        /// <param name="matchVariable">
        /// The variable declared as part of pattern match of the expression.
        /// </param>
        internal IsExpression(CsTokenList tokens, Expression leftSideExpression, Expression rightSideExpression, Expression matchVariable)
            : base(ExpressionType.Is, tokens)
        {
            Param.AssertNotNull(tokens, "tokens");
            Param.AssertNotNull(leftSideExpression, "leftSideExpression");
            Param.AssertNotNull(rightSideExpression, "rightSideExpression");
            Param.Ignore(matchVariable);

            this.leftHandSideExpression  = leftSideExpression;
            this.rightHandSideExpression = rightSideExpression;
            this.matchVariable           = matchVariable;

            // Extract the type being compared to, if possible.
            LiteralExpression le = this.rightHandSideExpression as LiteralExpression;

            if (le != null)
            {
                this.type = CodeParser.TryExtractTypeTokenFromLiteralExpression(le);
            }

            this.AddExpression(this.leftHandSideExpression);
            this.AddExpression(this.rightHandSideExpression);

            if (this.matchVariable != null)
            {
                this.AddExpression(this.matchVariable);
            }
        }