/// <summary> /// Traverses the loop invariant. /// </summary> public void Traverse(ILoopInvariant loopInvariant) { Contract.Requires(loopInvariant != null); preorderVisitor.Visit(loopInvariant); if (StopTraversal) { return; } TraverseChildren(loopInvariant); }
//^ 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(); }
public void Visit(ILoopInvariant loopInvariant) { Contract.Assert(loopInvariant != null); Visit((IContractElement)loopInvariant); }
public void Visit(ILoopInvariant loopInvariant) { this.result = this.copier.Copy(loopInvariant); }
/// <summary> /// Makes a shallow copy of the given loop invariant. /// </summary> public virtual LoopInvariant Copy(ILoopInvariant loopInvariant) { return new LoopInvariant(loopInvariant); }
/// <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); }
/// <summary> /// Visits the given loop invariant. /// </summary> public virtual void Visit(ILoopInvariant loopInvariant) { this.Visit((IContractElement)loopInvariant); }
/// <summary> /// Traverses the children of the loop invariant. /// </summary> public virtual void TraverseChildren(ILoopInvariant loopInvariant) { Contract.Requires(loopInvariant != null); this.TraverseChildren((IContractElement)loopInvariant); }
/// <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; }
/// <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); }
/// <summary> /// Traverses the children of the loop invariant. /// </summary> public virtual void TraverseChildren(ILoopInvariant loopInvariant) { Contract.Requires(loopInvariant != null); TraverseChildren((IContractElement)loopInvariant); }
public void Visit(ILoopInvariant loopInvariant) { traverser.Traverse(loopInvariant); }
/// <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) { }
/// <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; }
/// <summary> /// Visits the given loop invariant. /// </summary> public virtual void Visit(ILoopInvariant loopInvariant) { }
/// <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); }
/// <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; }
public void Visit(ILoopInvariant loopInvariant) { this.traverser.Traverse(loopInvariant); }
/// <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; }
public void Visit(ILoopInvariant loopInvariant) { Contract.Requires(loopInvariant != null); throw new NotImplementedException(); }
/// <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; }