Exemple #1
0
        public IIR Execute(IIR predecessorIR)
        {
            AstIR astIR = predecessorIR as AstIR;

            if (astIR == null)
            {
                return(null);
            }

            // Initialize Lowering Engine
            InitializeLoweringEngine();

            PhysicalIR physicalIR = new PhysicalIR(astIR);

            foreach (Task.AstPackageNode packageNode in astIR.AstRootNode.Packages)
            {
                if (packageNode.Emit)
                {
                    var root = physicalIR.InitializePackage(packageNode.Name);
                    PhysicalLoweringProcessor.Lower(packageNode, new TaskLoweringContext(root));
                }
            }

            return(physicalIR);
        }
Exemple #2
0
 private static void InitializeLoweringEngine()
 {
     if (!_initialized)
     {
         _initialized = true;
         Assembly currentAssembly = Assembly.GetExecutingAssembly();
         foreach (Type t in currentAssembly.GetExportedTypes())
         {
             foreach (MethodInfo mi in t.GetMethods())
             {
                 object[] loweringAttributes = mi.GetCustomAttributes(typeof(LoweringAttribute), true);
                 foreach (LoweringAttribute la in loweringAttributes)
                 {
                     var handler = (AstLoweringHandler)Delegate.CreateDelegate(typeof(AstLoweringHandler), mi, true);
                     PhysicalLoweringProcessor.Register(la.AstNodeType, handler);
                 }
             }
         }
     }
 }