private static ProgramOptimizationsTable BuildProgramWideOptimizationsTable()
        {
            var optimizationsTable = new ProgramOptimizationsTable();

            optimizationsTable.Add(new DevirtualizerIfOneImplemetor());
            optimizationsTable.Add(new CallToFunctionsWithSameConstant());
            return(optimizationsTable);
        }
 private void SetupProgramOptimizationTable()
 {
     EnableProgramWideOptimizations = true;
     _optimizationsTable            = new ProgramOptimizationsTable
     {
         new DevirtualizerIfOneImplementor(),
         new DevirtualizeWholeClosureMethods(),
         new DevirtualizerFinalMethods(),
         new RemoveNotReachableMethos(),
         new DevirtualizerIfNoOverrideImplementationExists(),
         new CallToFunctionsWithSameConstant()
     };
 }
Exemple #3
0
        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);
        }