private static ProgramOptimizationsTable BuildProgramWideOptimizationsTable() { var optimizationsTable = new ProgramOptimizationsTable(); optimizationsTable.Add(new DevirtualizerIfOneImplemetor()); optimizationsTable.Add(new CallToFunctionsWithSameConstant()); return(optimizationsTable); }
public static void CallCompiler(string inputAssemblyName, string outputExeName) { var commandLineParse = CommandLineParse.Instance; if (!String.IsNullOrEmpty(inputAssemblyName)) { commandLineParse.ApplicationInputAssembly = inputAssemblyName; } if (!String.IsNullOrEmpty(outputExeName)) { commandLineParse.ApplicationNativeExe = outputExeName; commandLineParse.OutputCpp = Path.ChangeExtension(commandLineParse.ApplicationNativeExe, ".cpp"); } var dir = Directory.GetCurrentDirectory(); inputAssemblyName = Path.Combine(dir, commandLineParse.ApplicationInputAssembly); var asm = Assembly.LoadFile(inputAssemblyName); var definition = asm.EntryPoint; var start = Environment.TickCount; var optimizationsTable = new ProgramOptimizationsTable(); optimizationsTable.Add(new DevirtualizerIfOneImplemetor()); optimizationsTable.Add(new CallToFunctionsWithSameConstant()); var crRuntime = new CrRuntimeLibrary(); crRuntime.ScanAssembly(typeof(CrString).Assembly); var programClosure = new ProgramClosure(definition, crRuntime); var sb = programClosure.BuildFullSourceCode(programClosure.Runtime); var end = Environment.TickCount - start; Console.WriteLine("Compilation time: {0} ms", end); sb.ToFile(commandLineParse.OutputCpp); NativeCompilationUtils.CompileAppToNativeExe(commandLineParse.OutputCpp, commandLineParse.ApplicationNativeExe); }