public override void Visit(IResourceUseStatement resourceUseStatement) { if (Process(resourceUseStatement)) { visitor.Visit(resourceUseStatement); } base.Visit(resourceUseStatement); }
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) { }
/// <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); }
public void Visit(IResourceUseStatement resourceUseStatement) { Contract.Requires(resourceUseStatement != null); throw new NotImplementedException(); }
public override void TraverseChildren(IResourceUseStatement resourceUseStatement) { base.TraverseChildren(resourceUseStatement); }
/// <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); }
public void Visit(IResourceUseStatement resourceUseStatement) { this.traverser.Traverse(resourceUseStatement); }
public void Visit(IResourceUseStatement resourceUseStatement) { this.result = this.rewriter.Rewrite(resourceUseStatement); }
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; }
/// <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 Visit(IResourceUseStatement resourceUseStatement) { if(Process(resourceUseStatement)){visitor.Visit(resourceUseStatement);} base.Visit(resourceUseStatement); }
/// <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); }
//^ 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(); }
public void Visit(IResourceUseStatement resourceUseStatement) { this.result = this.copier.Copy(resourceUseStatement); }
/// <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(); }
/// <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); }
/// <summary> /// Performs some computation with the given resource usage statement. /// </summary> /// <param name="resourceUseStatement"></param> public virtual void Visit(IResourceUseStatement resourceUseStatement) { }
/// <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; }
/// <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) { this.Visit((IStatement)resourceUseStatement); }
public void Visit(IResourceUseStatement resourceUseStatement) { throw new NotImplementedException(); }
/// <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); }
/// <summary> /// /// </summary> /// <param name="resourceUseStatement"></param> public ResourceUseStatement(IResourceUseStatement resourceUseStatement) : base(resourceUseStatement) { this.body = resourceUseStatement.Body; this.resourceAcquisitions = resourceUseStatement.ResourceAcquisitions; }
/// <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; }
/// <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); }