Exemple #1
0
 /// <summary>
 ///     Traverses the loop invariant.
 /// </summary>
 public void Traverse(ILoopInvariant loopInvariant)
 {
     Contract.Requires(loopInvariant != null);
     preorderVisitor.Visit(loopInvariant);
     if (StopTraversal)
     {
         return;
     }
     TraverseChildren(loopInvariant);
 }
Exemple #2
0
 //^ ensures this.path.Count == old(this.path.Count);
 /// <summary>
 /// Traverses the given loop invariant.
 /// </summary>
 public virtual void Visit(ILoopInvariant loopInvariant)
 {
     if (this.stopTraversal) return;
       //^ int oldCount = this.path.Count;
       this.path.Push(loopInvariant);
       this.Visit(loopInvariant.Condition);
       if (loopInvariant.Description != null)
     this.Visit(loopInvariant.Description);
       //^ assume this.path.Count == oldCount+1; //True because all of the virtual methods of this class promise not decrease this.path.Count.
       this.path.Pop();
 }
Exemple #3
0
 public void Visit(ILoopInvariant loopInvariant)
 {
     Contract.Assert(loopInvariant != null);
     Visit((IContractElement)loopInvariant);
 }
Exemple #4
0
 public void Visit(ILoopInvariant loopInvariant)
 {
     this.result = this.copier.Copy(loopInvariant);
 }
Exemple #5
0
 /// <summary>
 /// Makes a shallow copy of the given loop invariant.
 /// </summary>
 public virtual LoopInvariant Copy(ILoopInvariant loopInvariant)
 {
     return new LoopInvariant(loopInvariant);
 }
Exemple #6
0
 /// <summary>
 /// Visits the specified loop invariant.
 /// </summary>
 /// <param name="loopInvariant">The loop invariant.</param>
 /// <returns></returns>
 public virtual ILoopInvariant Visit(ILoopInvariant loopInvariant)
 {
     LoopInvariant mutableLoopInvariant = loopInvariant as LoopInvariant;
       if (!this.copyOnlyIfNotAlreadyMutable || mutableLoopInvariant == null)
     mutableLoopInvariant = new LoopInvariant(loopInvariant);
       return this.Visit(mutableLoopInvariant);
 }
Exemple #7
0
 /// <summary>
 /// Visits the given loop invariant.
 /// </summary>
 public virtual void Visit(ILoopInvariant loopInvariant)
 {
     this.Visit((IContractElement)loopInvariant);
 }
Exemple #8
0
 /// <summary>
 /// Traverses the children of the loop invariant.
 /// </summary>
 public virtual void TraverseChildren(ILoopInvariant loopInvariant)
 {
     Contract.Requires(loopInvariant != null);
       this.TraverseChildren((IContractElement)loopInvariant);
 }
Exemple #9
0
    /// <summary>
    /// Makes a deep copy of the given loop invariant.
    /// </summary>
    public LoopInvariant Copy(ILoopInvariant loopInvariant) {
      Contract.Requires(loopInvariant != null);
      Contract.Ensures(Contract.Result<LoopInvariant>() != null);

      var mutableCopy = this.shallowCopier.Copy(loopInvariant);
      this.Copy((ContractElement)mutableCopy);
      return mutableCopy;
    }
Exemple #10
0
    /// <summary>
    /// Makes a shallow copy of the given loop invariant.
    /// </summary>
    public virtual LoopInvariant Copy(ILoopInvariant loopInvariant) {
      Contract.Requires(loopInvariant != null);
      Contract.Ensures(Contract.Result<LoopInvariant>() != null);

      return new LoopInvariant(loopInvariant);
    }
Exemple #11
0
 /// <summary>
 ///     Traverses the children of the loop invariant.
 /// </summary>
 public virtual void TraverseChildren(ILoopInvariant loopInvariant)
 {
     Contract.Requires(loopInvariant != null);
     TraverseChildren((IContractElement)loopInvariant);
 }
Exemple #12
0
 public void Visit(ILoopInvariant loopInvariant)
 {
     traverser.Traverse(loopInvariant);
 }
Exemple #13
0
 /// <summary>
 /// Creates a loop invariant that shares all of the information in <paramref name="loopInvariant"/>.
 /// </summary>
 /// <param name="loopInvariant"></param>
 public LoopInvariant(ILoopInvariant loopInvariant)
     : base(loopInvariant)
 {
 }
Exemple #14
0
 /// <summary>
 /// Rewrites the given loop invariant.
 /// </summary>
 public virtual ILoopInvariant Rewrite(ILoopInvariant loopInvariant)
 {
     var mutableLoopInvariant = loopInvariant as LoopInvariant;
       if (mutableLoopInvariant == null) return loopInvariant;
       this.RewriteChildren(mutableLoopInvariant);
       return mutableLoopInvariant;
 }
Exemple #15
0
 /// <summary>
 /// Visits the given loop invariant.
 /// </summary>
 public virtual void Visit(ILoopInvariant loopInvariant)
 {
 }
Exemple #16
0
 /// <summary>
 /// Creates a loop invariant that shares all of the information in <paramref name="loopInvariant"/>.
 /// </summary>
 /// <param name="loopInvariant"></param>
 public LoopInvariant(ILoopInvariant loopInvariant)
   : base(loopInvariant) {
 }
Exemple #17
0
 /// <summary>
 /// Traverses the loop invariant.
 /// </summary>
 public void Traverse(ILoopInvariant loopInvariant)
 {
     Contract.Requires(loopInvariant != null);
       if (this.preorderVisitor != null) this.preorderVisitor.Visit(loopInvariant);
       if (this.StopTraversal) return;
       this.TraverseChildren(loopInvariant);
       if (this.StopTraversal) return;
       if (this.postorderVisitor != null) this.postorderVisitor.Visit(loopInvariant);
 }
Exemple #18
0
 /// <summary>
 /// Get the mutable copy of a loop invariant.
 /// </summary>
 /// <param name="loopInvariant"></param>
 /// <returns></returns>
 public virtual LoopInvariant GetMutableCopy(ILoopInvariant loopInvariant)
 {
     object cachedValue;
       if (this.cache.TryGetValue(loopInvariant, out cachedValue))
     return (LoopInvariant)cachedValue;
       var result = new LoopInvariant(loopInvariant);
       // Probably not necessary, no two loop invariants are shared.
       this.cache.Add(loopInvariant, result);
       this.cache.Add(result, result);
       return result;
 }
Exemple #19
0
 public void Visit(ILoopInvariant loopInvariant)
 {
     this.traverser.Traverse(loopInvariant);
 }
Exemple #20
0
 /// <summary>
 /// Makes a deep copy of the given loop invariant.
 /// </summary>
 public LoopInvariant Copy(ILoopInvariant loopInvariant)
 {
     var mutableCopy = this.shallowCopier.Copy(loopInvariant);
       this.Copy((ContractElement)mutableCopy);
       return mutableCopy;
 }
Exemple #21
0
 public void Visit(ILoopInvariant loopInvariant)
 {
     Contract.Requires(loopInvariant != null);
       throw new NotImplementedException();
 }
Exemple #22
0
 /// <summary>
 /// Visits the specified loop invariant.
 /// </summary>
 /// <param name="loopInvariant">The loop invariant.</param>
 /// <returns></returns>
 public virtual ILoopInvariant Visit(ILoopInvariant loopInvariant)
 {
     if (this.stopTraversal) return loopInvariant;
       LoopInvariant mutableLoopInvariant = loopInvariant as LoopInvariant;
       if (mutableLoopInvariant == null) return loopInvariant;
       mutableLoopInvariant.Condition = this.Visit(mutableLoopInvariant.Condition);
       if (mutableLoopInvariant.Description != null)
     mutableLoopInvariant.Description = this.Visit(mutableLoopInvariant.Description);
       return mutableLoopInvariant;
 }