protected override IMethodDeclaration DoConvertMethod(IMethodDeclaration md, IMethodDeclaration imd) { if (!context.InputAttributes.Has <OperatorMethod>(imd)) { return(imd); } loopMergingInfo = context.InputAttributes.Get <LoopMergingInfo>(imd); return(base.DoConvertMethod(md, imd)); }
/// <summary> /// Removes dead code in the method body. /// </summary> /// <param name="outputs"></param> /// <param name="inputs"></param> protected override void DoConvertMethodBody(IList <IStatement> outputs, IList <IStatement> inputs) { IMethodDeclaration imd = context.FindAncestor <IMethodDeclaration>(); loopMergingInfo = context.InputAttributes.Get <LoopMergingInfo>(imd); // imd must have the OperatorMethod attribute IList <IStatement> isc = Schedule(inputs); outputs.AddRange(isc); }
protected override IMethodDeclaration DoConvertMethod(IMethodDeclaration md, IMethodDeclaration imd) { loopMergingInfo = context.InputAttributes.Get <LoopMergingInfo>(imd); if (debug && loopMergingInfo != null && !hasDebugInfo) { var itdOut = context.FindOutputForAncestor <ITypeDeclaration, ITypeDeclaration>(); context.OutputAttributes.Add(itdOut, loopMergingInfo.GetDebugInfo(this)); hasDebugInfo = true; } isTopLevel = true; return(base.DoConvertMethod(md, imd)); }
protected override IMethodDeclaration DoConvertMethod(IMethodDeclaration md, IMethodDeclaration imd) { if (!context.InputAttributes.Has <OperatorMethod>(imd) || !compiler.UseSpecialFirstIteration) { return(imd); } loopMergingInfo = context.InputAttributes.Get <LoopMergingInfo>(imd); if (debug && loopMergingInfo != null) { var itdOut = context.FindOutputForAncestor <ITypeDeclaration, ITypeDeclaration>(); context.OutputAttributes.Add(itdOut, loopMergingInfo.GetDebugInfo(this)); } return(base.DoConvertMethod(md, imd)); }
protected override void DoConvertMethodBody(IList<IStatement> outputs, IList<IStatement> inputs) { if (context.trackTransform && debug) { debugBlock = Builder.BlockStmt(); ITypeDeclaration itdOut = context.FindOutputForAncestor<ITypeDeclaration, ITypeDeclaration>(); context.OutputAttributes.Add(itdOut, new DebugInfo() { Transform = this, Name = "debug", Value = debugBlock }); } IMethodDeclaration imd = context.FindAncestor<IMethodDeclaration>(); loopMergingInfo = context.InputAttributes.Get<LoopMergingInfo>(imd); base.DoConvertMethodBody(outputs, inputs); }