public static void CompileSources( PhpCompilation compilation, PEModuleBuilder moduleBuilder, bool emittingPdb, bool hasDeclarationErrors, DiagnosticBag diagnostics, CancellationToken cancellationToken) { var compiler = new SourceCompiler(compilation, moduleBuilder, emittingPdb, diagnostics); // 1. Synthetize magic // a.inline syntax like traits // b.synthetize entry point, getters, setters, ctors, dispose, magic methods, … // TODO. // 2.Bind Syntax & Symbols to Operations (CFG) // a.equivalent to building CFG // b.most generic types(and empty type - mask) compiler.BindMethods(); // 3.Analyze Operations // a.declared variables // b.build global variables/constants table // c.type analysis(converge type - mask), resolve symbols // d.lower semantics, update bound tree, repeat compiler.AnalyzeMethods(); // 4. Emit method bodies compiler.EmitMethodBodies(); compiler.CompileReflectionEnumerators(cancellationToken); // 5. Entry Point (.exe) compiler.CompileEntryPoint(cancellationToken); }