Example #1
0
 /// <summary>
 /// Makes a copy of this contract, changing the containing block to the given block.
 /// </summary>
 public LoopContract MakeCopyFor(BlockStatement containingBlock)
 {
     if (this.containingBlock == containingBlock) return this;
       LoopContract result = new LoopContract(this);
       result.SetContainingBlock(containingBlock);
       return result;
 }
Example #2
0
 /// <summary>
 /// A copy constructor that allocates an instance that is the same as the given template.
 /// </summary>
 /// <param name="template">The template to copy.</param>
 private LoopContract(LoopContract template)
 {
     if (template.invariants != EmptyListOfInvariants)
     this.invariants = new List<LoopInvariant>(template.invariants);
       else
     this.invariants = template.invariants;
       if (template.writes != null)
     this.writes = new List<Expression>(template.writes);
       if (template.variants != EmptyListOfVariants)
     this.variants = new List<Expression>(template.variants);
       else
     this.variants = template.variants;
 }
Example #3
0
 /// <summary>
 /// Visits the specified loop contract.
 /// </summary>
 /// <param name="loopContract">The loop contract.</param>
 /// <returns></returns>
 protected virtual ILoopContract DeepCopy(LoopContract loopContract)
 {
     loopContract.Invariants = this.DeepCopy(loopContract.Invariants);
       loopContract.Writes = this.DeepCopy(loopContract.Writes);
       return loopContract;
 }
Example #4
0
 /// <summary>
 /// Rewrites the children of the given loop contract.
 /// </summary>
 public virtual void RewriteChildren(LoopContract loopContract)
 {
     loopContract.Invariants = this.Rewrite(loopContract.Invariants);
       loopContract.Variants = this.Rewrite(loopContract.Variants);
       loopContract.Writes = this.Rewrite(loopContract.Writes);
 }
Example #5
0
 /// <summary>
 /// Visits the specified loop contract.
 /// </summary>
 /// <param name="loopContract">The loop contract.</param>
 /// <returns></returns>
 public virtual ILoopContract Visit(LoopContract loopContract)
 {
     loopContract.Invariants = this.Visit(loopContract.Invariants);
       loopContract.Writes = this.Visit(loopContract.Writes);
       return loopContract;
 }
Example #6
0
 /// <summary>
 /// Visits the specified loop contract.
 /// </summary>
 /// <param name="loopContract">The loop contract.</param>
 /// <returns></returns>
 public virtual ILoopContract Visit(ILoopContract loopContract)
 {
     LoopContract mutableLoopContract = loopContract as LoopContract;
       if (!this.copyOnlyIfNotAlreadyMutable || mutableLoopContract == null)
     mutableLoopContract = new LoopContract(loopContract);
       return this.Visit(mutableLoopContract);
 }