예제 #1
0
 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));
 }
예제 #2
0
        /// <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);
        }
예제 #3
0
 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);
 }