public static void CompileSources( PhpCompilation compilation, PEModuleBuilder moduleBuilder, bool emittingPdb, bool hasDeclarationErrors, DiagnosticBag diagnostics, CancellationToken cancellationToken) { Debug.Assert(moduleBuilder != null); // ensure flow analysis and collect diagnostics var declarationDiagnostics = compilation.GetDeclarationDiagnostics(cancellationToken); diagnostics.AddRange(declarationDiagnostics); // cancel the operation if there are errors if (hasDeclarationErrors |= declarationDiagnostics.HasAnyErrors() || cancellationToken.IsCancellationRequested) { return; } // var compiler = new SourceCompiler(compilation, moduleBuilder, emittingPdb, diagnostics, cancellationToken); // Emit method bodies // a. declared routines // b. synthesized symbols compiler.EmitMethodBodies(); compiler.EmitSynthesized(); compiler.CompileReflectionEnumerators(); // Entry Point (.exe) compiler.CompileEntryPoint(); }
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.Bind Syntax & Symbols to Operations (CFG) // a.equivalent to building CFG // b.most generic types(and empty type - mask) compiler.WalkMethods(compiler.EnqueueRoutine); compiler.WalkTypes(compiler.EnqueueFieldsInitializer); // 2.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(); // 3. Emit method bodies // a. declared routines // b. synthesized symbols compiler.EmitMethodBodies(); compiler.EmitSynthesized(); compiler.CompileReflectionEnumerators(cancellationToken); // 4. Entry Point (.exe) compiler.CompileEntryPoint(cancellationToken); }
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); }
public static void CompileSources( PhpCompilation compilation, PEModuleBuilder moduleBuilder, bool emittingPdb, bool hasDeclarationErrors, DiagnosticBag diagnostics, CancellationToken cancellationToken) { Debug.Assert(moduleBuilder != null); // ensure flow analysis var analysisdiagnostics = compilation.BindAndAnalyseTask().Result; diagnostics.AddRange(analysisdiagnostics); // var compiler = new SourceCompiler(compilation, moduleBuilder, emittingPdb, diagnostics, cancellationToken); // Emit method bodies // a. declared routines // b. synthesized symbols compiler.EmitMethodBodies(); compiler.EmitSynthesized(); compiler.CompileReflectionEnumerators(); // Entry Point (.exe) compiler.CompileEntryPoint(); }