public override void Visit(IAddressOf addressOf)
 {
     if (Process(addressOf))
     {
         visitor.Visit(addressOf);
     }
     base.Visit(addressOf);
 }
Example #2
0
 public override void TraverseChildren(IAddressOf addressOf)
 {
     base.TraverseChildren(addressOf);
       ITypeReference targetType = addressOf.Expression.Type;
       if (targetType == Dummy.TypeReference) {
     IMethodReference/*?*/ method = addressOf.Expression.Definition as IMethodReference;
     if (method != null) {
       ((AddressOf)addressOf).Type = new Immutable.FunctionPointerType(method.CallingConvention, method.ReturnValueIsByRef, method.Type,
     method.ReturnValueIsModified ? method.ReturnValueCustomModifiers : null, method.Parameters, null, this.host.InternFactory);
       return;
     }
       }
       ((AddressOf)addressOf).Type = Immutable.ManagedPointerType.GetManagedPointerType(targetType, this.host.InternFactory);
 }
Example #3
0
        public override void TraverseChildren(IAddressOf addressOf)
        {
            base.TraverseChildren(addressOf);
            ITypeReference targetType = addressOf.Expression.Type;

            if (targetType is Dummy)
            {
                IMethodReference /*?*/ method = addressOf.Expression.Definition as IMethodReference;
                if (method != null)
                {
                    ((AddressOf)addressOf).Type = new Immutable.FunctionPointerType(method.CallingConvention, method.ReturnValueIsByRef, method.Type,
                                                                                    method.ReturnValueIsModified ? method.ReturnValueCustomModifiers : null, method.Parameters, null, this.host.InternFactory);
                    return;
                }
            }
            ((AddressOf)addressOf).Type = Immutable.ManagedPointerType.GetManagedPointerType(targetType, this.host.InternFactory);
        }
Example #4
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="addressOf"></param>
 public AddressOf(IAddressOf addressOf)
     : base(addressOf)
 {
     this.expression = addressOf.Expression;
 }
Example #5
0
 /// <summary>
 /// Performs some computation with the given AddressOf expression.
 /// </summary>
 /// <param name="addressOf"></param>
 public virtual void Visit(IAddressOf addressOf)
 {
     this.Visit((IExpression)addressOf);
 }
Example #6
0
 public void Visit(IAddressOf addressOf)
 {
     throw new NotImplementedException();
 }
Example #7
0
 /// <summary>
 /// Traverses the AddressOf expression.
 /// </summary>
 public void Traverse(IAddressOf addressOf)
 {
     Contract.Requires(addressOf != null);
       if (this.preorderVisitor != null) this.preorderVisitor.Visit(addressOf);
       if (this.StopTraversal) return;
       this.TraverseChildren(addressOf);
       if (this.StopTraversal) return;
       if (this.postorderVisitor != null) this.postorderVisitor.Visit(addressOf);
 }
Example #8
0
 public void Visit(IAddressOf addressOf)
 {
     this.traverser.Traverse(addressOf);
 }
    /// <summary>
    /// If the expression's type is a generic parameter (either method or type),
    /// then this returns a "unboxed" expression, i.e., the value as a ref.
    /// Otherwise it just translates the underlying expression and boxes it.
    /// </summary>
    public override void TraverseChildren(IAddressOf addressOf) {
      var t = addressOf.Expression.Type;
      var boogieT = this.sink.CciTypeToBoogie(t);

      object container = addressOf.Expression.Definition;
      IExpression/*?*/ instance = addressOf.Expression.Instance;
      this.LoadAddressOf(container, instance);
      if (t is IGenericParameterReference && boogieT == this.sink.Heap.UnionType) {
        // then the expression will be represented by something of type Box
        // but the address of it must be a ref, so do the conversion
        var e = this.TranslatedExpressions.Pop();
        Bpl.Variable a = this.sink.CreateFreshLocal(this.sink.Heap.RefType);
        this.StmtTraverser.StmtBuilder.Add(new Bpl.CallCmd(Bpl.Token.NoToken, this.sink.Heap.BoxFromUnion.Name, new List<Bpl.Expr>(new Bpl.Expr[] {e}), new List<Bpl.IdentifierExpr>(new Bpl.IdentifierExpr[] {Bpl.Expr.Ident(a)})));
        TranslatedExpressions.Push(Bpl.Expr.Ident(a));
      }
      return;
    }
        public override void TraverseChildren(IAddressOf addressOf)
{ MethodEnter(addressOf);
            base.TraverseChildren(addressOf);
     MethodExit();   }
 public virtual void onASTElement(IAddressOf addressOf) { }
Example #12
0
 /// <summary>
 /// Returns a shallow copy of the given AddressOf expression.
 /// </summary>
 /// <param name="addressOf"></param>
 public AddressOf Copy(IAddressOf addressOf)
 {
     return new AddressOf(addressOf);
 }
Example #13
0
 /// <summary>
 /// Generates IL for the specified address of.
 /// </summary>
 /// <param name="addressOf">The address of.</param>
 public override void TraverseChildren(IAddressOf addressOf)
 {
     object container = addressOf.Expression.Definition;
       IExpression/*?*/ instance = addressOf.Expression.Instance;
       this.LoadAddressOf(container, instance, addressOf.ObjectControlsMutability);
       this.StackSize++;
 }
Example #14
0
 public void Visit(IAddressOf addressOf)
 {
     this.result = this.rewriter.Rewrite(addressOf);
 }
 public override void Visit(IAddressOf addressOf)
 {
     if(Process(addressOf)){visitor.Visit(addressOf);}
     base.Visit(addressOf);
 }
Example #16
0
 private HLLocation ProcessAddressOfExpression(IAddressOf pExpression)
 {
     return(ProcessExpression(pExpression.Expression).AddressOf());
 }
Example #17
0
 private HLLocation ProcessAddressOfExpression(IAddressOf pExpression)
 {
     return ProcessExpression(pExpression.Expression).AddressOf();
 }
Example #18
0
 /// <summary>
 /// Rewrites the given AddressOf expression.
 /// </summary>
 /// <param name="addressOf"></param>
 public virtual IExpression Rewrite(IAddressOf addressOf)
 {
     var mutableAddressOf = addressOf as AddressOf;
       if (mutableAddressOf == null) return addressOf;
       this.RewriteChildren(mutableAddressOf);
       return mutableAddressOf;
 }
Example #19
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="addressOf"></param>
 public AddressOf(IAddressOf addressOf)
   : base(addressOf) {
   this.expression = addressOf.Expression;
   this.objectControlsMutability = addressOf.ObjectControlsMutability;
 }
Example #20
0
 public void Visit(IAddressOf addressOf)
 {
     this.result = this.copier.Copy(addressOf);
 }
Example #21
0
 public override void Visit(IAddressOf addressOf)
 {
     allElements.Add(new InvokInfo(Traverser, "IAddressOf", addressOf));
 }
Example #22
0
 public virtual void onASTElement(IAddressOf addressOf)
 {
 }
Example #23
0
 public override void Visit(IAddressOf addressOf)
 {
     NewLineAddIndent();
     AppendElementType(addressOf);
     base.Visit(addressOf);
 }
Example #24
0
 /// <summary>
 /// Performs some computation with the given AddressOf expression.
 /// </summary>
 /// <param name="addressOf"></param>
 public virtual void Visit(IAddressOf addressOf)
 {
 }
 /// <summary>
 /// Rewrites the given AddressOf expression.
 /// </summary>
 /// <param name="addressOf"></param>
 public virtual IExpression Rewrite(IAddressOf addressOf)
 {
     return addressOf;
 }
Example #26
0
 /// <summary>
 /// Traverses the children of the AddressOf expression.
 /// </summary>
 public virtual void TraverseChildren(IAddressOf addressOf)
 {
     Contract.Requires(addressOf != null);
       this.TraverseChildren((IExpression)addressOf);
       if (this.StopTraversal) return;
       this.Traverse(addressOf.Expression);
 }
Example #27
0
    /// <summary>
    /// Returns a deep copy of the given AddressOf expression.
    /// </summary>
    /// <param name="addressOf"></param>
    public AddressOf Copy(IAddressOf addressOf) {
      Contract.Requires(addressOf != null);
      Contract.Ensures(Contract.Result<AddressOf>() != null);

      var mutableCopy = this.shallowCopier.Copy(addressOf);
      this.CopyChildren((Expression)mutableCopy);
      mutableCopy.Expression = this.Copy(mutableCopy.Expression);
      return mutableCopy;
    }
Example #28
0
 //^ ensures this.path.Count == old(this.path.Count);
 /// <summary>
 /// Traverses the given AddressOf expression.
 /// </summary>
 /// <param name="addressOf"></param>
 public virtual void Visit(IAddressOf addressOf)
 {
     if (this.stopTraversal) return;
       //^ int oldCount = this.path.Count;
       this.path.Push(addressOf);
       this.Visit(addressOf.Expression);
       //^ 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();
 }
Example #29
0
    /// <summary>
    /// Returns a shallow copy of the given AddressOf expression.
    /// </summary>
    /// <param name="addressOf"></param>
    public AddressOf Copy(IAddressOf addressOf) {
      Contract.Requires(addressOf != null);
      Contract.Ensures(Contract.Result<AddressOf>() != null);

      return new AddressOf(addressOf);
    }
Example #30
0
 public void Visit(IAddressOf addressOf)
 {
     Contract.Requires(addressOf != null);
       throw new NotImplementedException();
 }
 /// <summary>
 /// Performs some computation with the given AddressOf expression.
 /// </summary>
 /// <param name="addressOf"></param>
 public virtual void Visit(IAddressOf addressOf)
 {
 }
Example #32
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="addressOf"></param>
 /// <remarks>Since we are doing Copy-In,Copy-Out for function calls we can ignore it.
 /// But will this work for the general case?</remarks>
 public override void Visit(IAddressOf addressOf) {
   Visit(addressOf.Expression);      
 }
Example #33
0
 /// <summary>
 /// Visits the specified address of.
 /// </summary>
 /// <param name="addressOf">The address of.</param>
 public override void Visit(IAddressOf addressOf)
 {
     AddressOf mutableAddressOf = new AddressOf(addressOf);
     this.resultExpression = this.myCodeCopier.DeepCopy(mutableAddressOf);
 }
 public override void TraverseChildren(IAddressOf addressOf) {
   this.sourceEmitterOutput.Write("&");
   this.Traverse(addressOf.Expression);
 }
Example #35
0
 /// <summary>
 /// Returns a deep copy of the given AddressOf expression.
 /// </summary>
 /// <param name="addressOf"></param>
 public AddressOf Copy(IAddressOf addressOf)
 {
     var mutableCopy = this.shallowCopier.Copy(addressOf);
       this.CopyChildren((Expression)mutableCopy);
       mutableCopy.Expression = this.Copy(mutableCopy.Expression);
       return mutableCopy;
 }
Example #36
0
 public override void TraverseChildren(IAddressOf addressOf)
 {
     MethodEnter(addressOf);
     base.TraverseChildren(addressOf);
     MethodExit();
 }
Example #37
0
 /// <summary>
 /// Visits the specified address of.
 /// </summary>
 /// <param name="addressOf">The address of.</param>
 public override void Visit(IAddressOf addressOf)
 {
     AddressOf mutableAddressOf = addressOf as AddressOf;
     if (alwaysMakeACopy || mutableAddressOf == null) mutableAddressOf = new AddressOf(addressOf);
     this.resultExpression = this.myCodeMutator.Visit(mutableAddressOf);
 }