public override void Visit(ICastIfPossible castIfPossible)
 {
     if (Process(castIfPossible))
     {
         visitor.Visit(castIfPossible);
     }
     base.Visit(castIfPossible);
 }
Example #2
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="castIfPossible"></param>
 public CastIfPossible(ICastIfPossible castIfPossible)
     : base(castIfPossible)
 {
     this.targetType = castIfPossible.TargetType;
       this.valueToCast = castIfPossible.ValueToCast;
 }
Example #3
0
 //^ 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();
 }
Example #4
0
 /// <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);
 }
Example #5
0
 /// <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);
 }
Example #6
0
 /// <summary>
 /// Performs some computation with the cast-if-possible expression.
 /// </summary>
 /// <param name="castIfPossible"></param>
 public virtual void Visit(ICastIfPossible castIfPossible)
 {
 }
Example #7
0
 public virtual void onASTElement(ICastIfPossible castIfPossible)
 {
 }
Example #8
0
 public void Visit(ICastIfPossible castIfPossible)
 {
     this.result = this.copier.Copy(castIfPossible);
 }
Example #9
0
 public override void Visit(ICastIfPossible castIfPossible)
 {
     allElements.Add(new InvokInfo(Traverser, "ICastIfPossible", castIfPossible));
 }
Example #10
0
 public override void TraverseChildren(ICastIfPossible castIfPossible)
 {
     base.TraverseChildren(castIfPossible);
     ((CastIfPossible)castIfPossible).Type = castIfPossible.TargetType;
 }
Example #11
0
 /// <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);
 }
Example #13
0
 public void Visit(ICastIfPossible castIfPossible)
 {
     this.result = this.rewriter.Rewrite(castIfPossible);
 }
Example #14
0
 /// <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;
 }
 public virtual void onASTElement(ICastIfPossible castIfPossible) { }
Example #16
0
 /// <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;
 }
Example #19
0
 public override void TraverseChildren(ICastIfPossible castIfPossible) {
   base.TraverseChildren(castIfPossible);
   ((CastIfPossible)castIfPossible).Type = castIfPossible.TargetType;
 }
        public override void TraverseChildren(ICastIfPossible castIfPossible)
{ MethodEnter(castIfPossible);
            base.TraverseChildren(castIfPossible);
     MethodExit();   }
Example #21
0
    /// <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;
    }
Example #22
0
 /// <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);
 }
Example #23
0
    /// <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);
    }
Example #24
0
 public void Visit(ICastIfPossible castIfPossible)
 {
     this.traverser.Traverse(castIfPossible);
 }
 /// <summary>
 /// Performs some computation with the cast-if-possible expression.
 /// </summary>
 /// <param name="castIfPossible"></param>
 public virtual void Visit(ICastIfPossible castIfPossible)
 {
 }
Example #26
0
 public void Visit(ICastIfPossible castIfPossible)
 {
     Contract.Requires(castIfPossible != null);
       throw new NotImplementedException();
 }
Example #27
0
 /// <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);
 }
Example #28
0
 public void Visit(ICastIfPossible castIfPossible)
 {
     throw new NotImplementedException();
 }
Example #29
0
 /// <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;
    }
Example #31
0
 /// <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);
 }
Example #32
0
 public override void TraverseChildren(ICastIfPossible castIfPossible)
 {
     MethodEnter(castIfPossible);
     base.TraverseChildren(castIfPossible);
     MethodExit();
 }
Example #33
0
 /// <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);
 }