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); }
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); } } } } }