public override void Visit(IResourceUseStatement resourceUseStatement)
 {
     if (Process(resourceUseStatement))
     {
         visitor.Visit(resourceUseStatement);
     }
     base.Visit(resourceUseStatement);
 }
Example #2
0
 public override void TraverseChildren(IResourceUseStatement resourceUseStatement)
 {
     this.sourceEmitterOutput.Write("using(", true);
     insideResourceUse = true;
     this.Traverse(resourceUseStatement.ResourceAcquisitions);
     insideResourceUse = false;
     this.sourceEmitterOutput.WriteLine(")");
     this.Traverse(resourceUseStatement.Body);
 }
 public virtual void onASTElement(IResourceUseStatement resourceUseStatement) { }
Example #4
0
 /// <summary>
 /// Visits the specified resource use statement.
 /// </summary>
 /// <param name="resourceUseStatement">The resource use statement.</param>
 public override void Visit(IResourceUseStatement resourceUseStatement)
 {
     ResourceUseStatement mutableResourceUseStatement = resourceUseStatement as ResourceUseStatement;
     if (alwaysMakeACopy || mutableResourceUseStatement == null) mutableResourceUseStatement = new ResourceUseStatement(resourceUseStatement);
     this.resultStatement = this.myCodeMutator.Visit(mutableResourceUseStatement);
 }
Example #5
0
 public void Visit(IResourceUseStatement resourceUseStatement)
 {
     Contract.Requires(resourceUseStatement != null);
       throw new NotImplementedException();
 }
Example #6
0
 public override void TraverseChildren(IResourceUseStatement resourceUseStatement)
 {
     base.TraverseChildren(resourceUseStatement);
 }
Example #7
0
 /// <summary>
 /// Traverses the resource usage statement.
 /// </summary>
 public void Traverse(IResourceUseStatement resourceUseStatement)
 {
     Contract.Requires(resourceUseStatement != null);
       if (this.preorderVisitor != null) this.preorderVisitor.Visit(resourceUseStatement);
       if (this.StopTraversal) return;
       this.TraverseChildren(resourceUseStatement);
       if (this.StopTraversal) return;
       if (this.postorderVisitor != null) this.postorderVisitor.Visit(resourceUseStatement);
 }
Example #8
0
 public void Visit(IResourceUseStatement resourceUseStatement)
 {
     this.traverser.Traverse(resourceUseStatement);
 }
Example #9
0
 public virtual void onASTElement(IResourceUseStatement resourceUseStatement)
 {
 }
Example #10
0
 public void Visit(IResourceUseStatement resourceUseStatement)
 {
     this.result = this.rewriter.Rewrite(resourceUseStatement);
 }
Example #11
0
 public override void Visit(IResourceUseStatement resourceUseStatement)
 {
     allElements.Add(new InvokInfo(Traverser, "IResourceUseStatement", resourceUseStatement));
 }
 /// <summary>
 /// Rewrites the given resource usage statement.
 /// </summary>
 /// <param name="resourceUseStatement"></param>
 public virtual IStatement Rewrite(IResourceUseStatement resourceUseStatement)
 {
     return resourceUseStatement;
 }
Example #13
0
        /// <summary>
        /// Generates IL for the specified resource use statement.
        /// </summary>
        /// <param name="resourceUseStatement">The resource use statement.</param>
        public override void TraverseChildren(IResourceUseStatement resourceUseStatement)
        {
            this.EmitSequencePoint(resourceUseStatement.Locations);
              var systemIDisposable = new NamespaceTypeReference(this.host, this.host.PlatformType.SystemObject.ContainingUnitNamespace,
            this.host.NameTable.GetNameFor("IDisposable"), 0, isEnum: false, isValueType: false, typeCode: PrimitiveTypeCode.NotPrimitive);
              var dispose = new MethodReference(this.host, systemIDisposable, CallingConvention.Default, this.host.PlatformType.SystemVoid,
            this.host.NameTable.GetNameFor("Dispose"), 0, Enumerable<IParameterTypeInformation>.Empty);

              //Get resource into a local
              ILocalDefinition resourceLocal;
              var localDeclaration = resourceUseStatement.ResourceAcquisitions as ILocalDeclarationStatement;
              if (localDeclaration != null) {
            resourceLocal = localDeclaration.LocalVariable;
            this.Traverse(localDeclaration.InitialValue);
              } else {
            var expressionStatement = (IExpressionStatement)resourceUseStatement.ResourceAcquisitions;
            this.Traverse(expressionStatement.Expression);
            resourceLocal = new TemporaryVariable(systemIDisposable, this.method);
              }
              this.VisitAssignmentTo(resourceLocal);

              //try
              var savedCurrentTryCatch = this.currentTryCatch;
              this.currentTryCatch = resourceUseStatement;
              var savedCurrentTryCatchFinallyEnd = this.currentTryCatchFinallyEnd;
              this.currentTryCatchFinallyEnd = new ILGeneratorLabel();
              this.generator.BeginTryBody();
              this.Traverse(resourceUseStatement.Body);
              if (!this.lastStatementWasUnconditionalTransfer)
            this.generator.Emit(OperationCode.Leave, this.currentTryCatchFinallyEnd);

              //finally
              this.generator.BeginFinallyBlock();
              var endOfFinally = new ILGeneratorLabel();
              if (!resourceLocal.Type.IsValueType) {
            this.generator.Emit(OperationCode.Ldloc, resourceLocal);
            this.generator.Emit(OperationCode.Brfalse_S, endOfFinally);
              }
              this.generator.Emit(OperationCode.Ldloc, resourceLocal);
              this.generator.Emit(OperationCode.Callvirt, dispose);
              this.generator.MarkLabel(endOfFinally);
              this.generator.Emit(OperationCode.Endfinally);
              this.generator.EndTryBody();
              this.generator.MarkLabel(this.currentTryCatchFinallyEnd);
              this.currentTryCatchFinallyEnd = savedCurrentTryCatchFinallyEnd;
              this.currentTryCatch = savedCurrentTryCatch;
              this.lastStatementWasUnconditionalTransfer = false;
        }
 public override void TraverseChildren(IResourceUseStatement resourceUseStatement) {
   base.TraverseChildren(resourceUseStatement);
 }
 public override void Visit(IResourceUseStatement resourceUseStatement)
 {
     if(Process(resourceUseStatement)){visitor.Visit(resourceUseStatement);}
     base.Visit(resourceUseStatement);
 }
Example #16
0
 /// <summary>
 /// Returns a shallow copy of the given resource usage statement.
 /// </summary>
 /// <param name="resourceUseStatement"></param>
 public ResourceUseStatement Copy(IResourceUseStatement resourceUseStatement)
 {
     return new ResourceUseStatement(resourceUseStatement);
 }
Example #17
0
 //^ ensures this.path.Count == old(this.path.Count);
 /// <summary>
 /// Traverses the given resource usage statement.
 /// </summary>
 /// <param name="resourceUseStatement"></param>
 public virtual void Visit(IResourceUseStatement resourceUseStatement)
 {
     if (this.stopTraversal) return;
       //^ int oldCount = this.path.Count;
       this.path.Push(resourceUseStatement);
       this.Visit(resourceUseStatement.ResourceAcquisitions);
       this.Visit(resourceUseStatement.Body);
       //^ 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 #18
0
 public void Visit(IResourceUseStatement resourceUseStatement)
 {
     this.result = this.copier.Copy(resourceUseStatement);
 }
Example #19
0
 /// <summary>
 /// Rewrites the given resource usage statement.
 /// </summary>
 /// <param name="resourceUseStatement"></param>
 public virtual IStatement Rewrite(IResourceUseStatement resourceUseStatement)
 {
     var mutableResourceUseStatement = resourceUseStatement as ResourceUseStatement;
       if (mutableResourceUseStatement == null) return resourceUseStatement;
       this.RewriteChildren(mutableResourceUseStatement);
       return mutableResourceUseStatement;
 }
        public override void TraverseChildren(IResourceUseStatement resourceUseStatement)
{ MethodEnter(resourceUseStatement);
            base.TraverseChildren(resourceUseStatement);
     MethodExit();   }
Example #21
0
    /// <summary>
    /// Returns a shallow copy of the given resource usage statement.
    /// </summary>
    /// <param name="resourceUseStatement"></param>
    public ResourceUseStatement Copy(IResourceUseStatement resourceUseStatement) {
      Contract.Requires(resourceUseStatement != null);
      Contract.Ensures(Contract.Result<ResourceUseStatement>() != null);

      return new ResourceUseStatement(resourceUseStatement);
    }
Example #22
0
 /// <summary>
 /// Performs some computation with the given resource usage statement.
 /// </summary>
 /// <param name="resourceUseStatement"></param>
 public virtual void Visit(IResourceUseStatement resourceUseStatement)
 {
 }
Example #23
0
    /// <summary>
    /// Returns a deep copy of the given resource usage statement.
    /// </summary>
    /// <param name="resourceUseStatement"></param>
    public ResourceUseStatement Copy(IResourceUseStatement resourceUseStatement) {
      Contract.Requires(resourceUseStatement != null);
      Contract.Ensures(Contract.Result<ResourceUseStatement>() != null);

      var mutableCopy = this.shallowCopier.Copy(resourceUseStatement);
      mutableCopy.ResourceAcquisitions = this.Copy(mutableCopy.ResourceAcquisitions);
      mutableCopy.Body = this.Copy(mutableCopy.Body);
      return mutableCopy;
    }
Example #24
0
 /// <summary>
 /// Traverses the children of the resource usage statement.
 /// </summary>
 public virtual void TraverseChildren(IResourceUseStatement resourceUseStatement)
 {
     Contract.Requires(resourceUseStatement != null);
       this.TraverseChildren((IStatement)resourceUseStatement);
       if (this.StopTraversal) return;
       this.Traverse(resourceUseStatement.ResourceAcquisitions);
       if (this.StopTraversal) return;
       this.Traverse(resourceUseStatement.Body);
 }
 /// <summary>
 /// Performs some computation with the given resource usage statement.
 /// </summary>
 /// <param name="resourceUseStatement"></param>
 public virtual void Visit(IResourceUseStatement resourceUseStatement)
 {
 }
Example #26
0
 /// <summary>
 /// Performs some computation with the given resource usage statement.
 /// </summary>
 /// <param name="resourceUseStatement"></param>
 public virtual void Visit(IResourceUseStatement resourceUseStatement)
 {
     this.Visit((IStatement)resourceUseStatement);
 }
Example #27
0
    public override void TraverseChildren(IResourceUseStatement resourceUseStatement) {
		this.sourceEmitterOutput.Write("using(", true);
		insideResourceUse = true;
		this.Traverse(resourceUseStatement.ResourceAcquisitions);
		insideResourceUse = false;
		this.sourceEmitterOutput.WriteLine(")");
		this.Traverse(resourceUseStatement.Body);
    }
Example #28
0
 public void Visit(IResourceUseStatement resourceUseStatement)
 {
     throw new NotImplementedException();
 }
Example #29
0
 /// <summary>
 /// Visits the specified resource use statement.
 /// </summary>
 /// <param name="resourceUseStatement">The resource use statement.</param>
 public override void Visit(IResourceUseStatement resourceUseStatement)
 {
     ResourceUseStatement mutableResourceUseStatement = new ResourceUseStatement(resourceUseStatement);
     this.resultStatement = this.myCodeCopier.DeepCopy(mutableResourceUseStatement);
 }
Example #30
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="resourceUseStatement"></param>
 public ResourceUseStatement(IResourceUseStatement resourceUseStatement)
   : base(resourceUseStatement) {
   this.body = resourceUseStatement.Body;
   this.resourceAcquisitions = resourceUseStatement.ResourceAcquisitions;
 }
Example #31
0
 /// <summary>
 /// Returns a deep copy of the given resource usage statement.
 /// </summary>
 /// <param name="resourceUseStatement"></param>
 public ResourceUseStatement Copy(IResourceUseStatement resourceUseStatement)
 {
     var mutableCopy = this.shallowCopier.Copy(resourceUseStatement);
       mutableCopy.ResourceAcquisitions = this.Copy(mutableCopy.ResourceAcquisitions);
       mutableCopy.Body = this.Copy(mutableCopy.Body);
       return mutableCopy;
 }
Example #32
0
 public override void TraverseChildren(IResourceUseStatement resourceUseStatement)
 {
     MethodEnter(resourceUseStatement);
     base.TraverseChildren(resourceUseStatement);
     MethodExit();
 }
Example #33
0
 /// <summary>
 /// Visits the specified resource use statement.
 /// </summary>
 /// <param name="resourceUseStatement">The resource use statement.</param>
 public override void Visit(IResourceUseStatement resourceUseStatement)
 {
     ResourceUseStatement mutableResourceUseStatement = resourceUseStatement as ResourceUseStatement;
     if (mutableResourceUseStatement == null) {
       this.resultStatement = resourceUseStatement;
       return;
     }
     this.resultStatement = this.myCodeMutator.Visit(mutableResourceUseStatement);
 }