public override void Visit(ICastIfPossible castIfPossible) { if (Process(castIfPossible)) { visitor.Visit(castIfPossible); } base.Visit(castIfPossible); }
/// <summary> /// /// </summary> /// <param name="castIfPossible"></param> public CastIfPossible(ICastIfPossible castIfPossible) : base(castIfPossible) { this.targetType = castIfPossible.TargetType; this.valueToCast = castIfPossible.ValueToCast; }
//^ ensures this.path.Count == old(this.path.Count); /// <summary> /// Traverses the cast-if-possible expression. /// </summary> /// <param name="castIfPossible"></param> public virtual void Visit(ICastIfPossible castIfPossible) { if (this.stopTraversal) return; //^ int oldCount = this.path.Count; this.path.Push(castIfPossible); this.Visit(castIfPossible.TargetType); this.Visit(castIfPossible.ValueToCast); //^ assume this.path.Count == oldCount+1; //True because all of the virtual methods of this class promise not to decrease this.path.Count. this.path.Pop(); }
/// <summary> /// Performs some computation with the cast-if-possible expression. /// </summary> /// <param name="castIfPossible"></param> public virtual void Visit(ICastIfPossible castIfPossible) { this.Visit((IExpression)castIfPossible); }
/// <summary> /// Traverses the cast-if-possible expression. /// </summary> public virtual void TraverseChildren(ICastIfPossible castIfPossible) { Contract.Requires(castIfPossible != null); this.TraverseChildren((IExpression)castIfPossible); if (this.StopTraversal) return; this.Traverse(castIfPossible.ValueToCast); if (this.StopTraversal) return; this.Traverse(castIfPossible.TargetType); }
/// <summary> /// Performs some computation with the cast-if-possible expression. /// </summary> /// <param name="castIfPossible"></param> public virtual void Visit(ICastIfPossible castIfPossible) { }
public virtual void onASTElement(ICastIfPossible castIfPossible) { }
public void Visit(ICastIfPossible castIfPossible) { this.result = this.copier.Copy(castIfPossible); }
public override void Visit(ICastIfPossible castIfPossible) { allElements.Add(new InvokInfo(Traverser, "ICastIfPossible", castIfPossible)); }
public override void TraverseChildren(ICastIfPossible castIfPossible) { base.TraverseChildren(castIfPossible); ((CastIfPossible)castIfPossible).Type = castIfPossible.TargetType; }
/// <summary> /// Generates IL for the specified cast if possible. /// </summary> /// <param name="castIfPossible">The cast if possible.</param> public override void TraverseChildren(ICastIfPossible castIfPossible) { this.Traverse(castIfPossible.ValueToCast); this.generator.Emit(OperationCode.Isinst, castIfPossible.TargetType); }
public override void Visit(ICastIfPossible castIfPossible) { if(Process(castIfPossible)){visitor.Visit(castIfPossible);} base.Visit(castIfPossible); }
public void Visit(ICastIfPossible castIfPossible) { this.result = this.rewriter.Rewrite(castIfPossible); }
/// <summary> /// Rewrites the cast-if-possible expression. /// </summary> /// <param name="castIfPossible"></param> public virtual IExpression Rewrite(ICastIfPossible castIfPossible) { var mutableCastIfPossible = castIfPossible as CastIfPossible; if (mutableCastIfPossible == null) return castIfPossible; this.RewriteChildren(mutableCastIfPossible); return mutableCastIfPossible; }
/// <summary> /// Visits the specified cast if possible. /// </summary> /// <param name="castIfPossible">The cast if possible.</param> public override void Visit(ICastIfPossible castIfPossible) { CastIfPossible mutableCastIfPossible = castIfPossible as CastIfPossible; if (alwaysMakeACopy || mutableCastIfPossible == null) mutableCastIfPossible = new CastIfPossible(castIfPossible); this.resultExpression = this.myCodeMutator.Visit(mutableCastIfPossible); }
/// <summary> /// Rewrites the cast-if-possible expression. /// </summary> /// <param name="castIfPossible"></param> public virtual IExpression Rewrite(ICastIfPossible castIfPossible) { return castIfPossible; }
public override void TraverseChildren(ICastIfPossible castIfPossible) { base.Traverse(castIfPossible.ValueToCast); var exp = TranslatedExpressions.Pop(); var e = this.sink.FindOrCreateTypeReferenceInCodeContext(castIfPossible.TargetType); var callAs = new Bpl.NAryExpr( castIfPossible.Token(), new Bpl.FunctionCall(this.sink.Heap.AsFunction), new List<Bpl.Expr>(new Bpl.Expr[] {exp, e}) ); TranslatedExpressions.Push(callAs); return; }
public override void TraverseChildren(ICastIfPossible castIfPossible) { MethodEnter(castIfPossible); base.TraverseChildren(castIfPossible); MethodExit(); }
/// <summary> /// Returns a deep copy of the cast-if-possible expression. /// </summary> /// <param name="castIfPossible"></param> public CastIfPossible Copy(ICastIfPossible castIfPossible) { Contract.Requires(castIfPossible != null); Contract.Ensures(Contract.Result<CastIfPossible>() != null); var mutableCopy = this.shallowCopier.Copy(castIfPossible); this.CopyChildren((Expression)mutableCopy); mutableCopy.ValueToCast = this.Copy(mutableCopy.ValueToCast); mutableCopy.TargetType = this.Copy(mutableCopy.TargetType); return mutableCopy; }
/// <summary> /// Traverses the cast-if-possible expression. /// </summary> public void Traverse(ICastIfPossible castIfPossible) { Contract.Requires(castIfPossible != null); if (this.preorderVisitor != null) this.preorderVisitor.Visit(castIfPossible); if (this.StopTraversal) return; this.TraverseChildren(castIfPossible); if (this.StopTraversal) return; if (this.postorderVisitor != null) this.postorderVisitor.Visit(castIfPossible); }
/// <summary> /// Returns a shallow copy of the cast-if-possible expression. /// </summary> /// <param name="castIfPossible"></param> public CastIfPossible Copy(ICastIfPossible castIfPossible) { Contract.Requires(castIfPossible != null); Contract.Ensures(Contract.Result<CastIfPossible>() != null); return new CastIfPossible(castIfPossible); }
public void Visit(ICastIfPossible castIfPossible) { this.traverser.Traverse(castIfPossible); }
public void Visit(ICastIfPossible castIfPossible) { Contract.Requires(castIfPossible != null); throw new NotImplementedException(); }
/// <summary> /// Visits the specified cast if possible. /// </summary> /// <param name="castIfPossible">The cast if possible.</param> public override void Visit(ICastIfPossible castIfPossible) { CastIfPossible mutableCastIfPossible = new CastIfPossible(castIfPossible); this.resultExpression = this.myCodeCopier.DeepCopy(mutableCastIfPossible); }
public void Visit(ICastIfPossible castIfPossible) { throw new NotImplementedException(); }
/// <summary> /// Returns a deep copy of the cast-if-possible expression. /// </summary> /// <param name="castIfPossible"></param> public CastIfPossible Copy(ICastIfPossible castIfPossible) { var mutableCopy = this.shallowCopier.Copy(castIfPossible); this.CopyChildren((Expression)mutableCopy); mutableCopy.ValueToCast = this.Copy(mutableCopy.ValueToCast); mutableCopy.TargetType = this.Copy(mutableCopy.TargetType); return mutableCopy; }
public override void TraverseChildren(ICastIfPossible castIfPossible) { var needsParen = LowerPrecedenceThanParentExpression(castIfPossible); var savedCurrentPrecedence = this.currentPrecedence; this.currentPrecedence = this.Precedence(castIfPossible); if (needsParen) this.sourceEmitterOutput.Write("("); this.Traverse(castIfPossible.ValueToCast); this.sourceEmitterOutput.Write(" as "); this.PrintTypeReference(castIfPossible.TargetType); if (needsParen) this.sourceEmitterOutput.Write(")"); this.currentPrecedence = savedCurrentPrecedence; }
/// <summary> /// Returns a shallow copy of the cast-if-possible expression. /// </summary> /// <param name="castIfPossible"></param> public CastIfPossible Copy(ICastIfPossible castIfPossible) { return new CastIfPossible(castIfPossible); }
/// <summary> /// Visits the specified cast if possible. /// </summary> /// <param name="castIfPossible">The cast if possible.</param> public override void Visit(ICastIfPossible castIfPossible) { CastIfPossible mutableCastIfPossible = castIfPossible as CastIfPossible; if (mutableCastIfPossible == null) { this.resultExpression = castIfPossible; return; } this.resultExpression = this.myCodeMutator.Visit(mutableCastIfPossible); }