/// <summary> /// Creates a modulus expression with the given left operand and this.RightOperand. /// The method does not use this.LeftOperand.Expression, since it may be necessary to factor out any subexpressions so that /// they are evaluated only once. The given left operand expression is expected to be the expression that remains after factoring. /// </summary> /// <param name="leftOperand">An expression to combine with this.RightOperand into a binary expression.</param> protected override Expression CreateBinaryExpression(Expression leftOperand) { Expression result = new VccModulus(leftOperand, this.RightOperand, this.SourceLocation); result.SetContainingExpression(this); return result; }
//^ requires template.ContainingBlock != containingBlock; //^ ensures this.containingBlock == containingBlock; /// <summary> /// A copy constructor that allocates an instance that is the same as the given template, except for its containing block. /// </summary> /// <param name="containingBlock">A new value for containing block. This replaces template.ContainingBlock in the resulting copy of template.</param> /// <param name="template">The template to copy.</param> protected VccModulus(BlockStatement containingBlock, VccModulus template) : base(containingBlock, template) { }