Пример #1
0
        /// <summary>
        /// The application entry point.
        /// </summary>
        /// <param name="arguments">The command line arguments.</param>
        public static void Main(string[] arguments)
        {
            // TODO: sanitize arguments
            var assemblyPath = arguments[0];

            var assembly = AssemblyFactory.GetAssembly(assemblyPath);

            var configuration = new OptimizationConfiguration();

            var branchToReturn = new BranchToReturn();
            var inlineFunctionCall = new InlineFunctionCall(configuration);
            var removeDegenerateBranch = new RemoveDegenerateBranch();
            var retargetDoubleBranch = new RetargetDoubleBranch();
            var removeDeadCode = new RemoveDeadCode();
            var removeNop = new RemoveNop();

            var rewriter = new Optimizer(
                branchToReturn,
                inlineFunctionCall,
                removeDegenerateBranch,
                retargetDoubleBranch,
                removeDeadCode,
                removeNop);

            rewriter.Visit(assembly);

            var assemblyName = assembly.Name.Name;
            var assemblyKind = assembly.Kind;

            // TODO: accept output file name from command line
            var outputFileName = string.Format(
                CultureInfo.InvariantCulture,
                "{0}.inlined.{1}",
                assemblyName,
                assemblyKind == AssemblyKind.Dll ? "dll" : "exe");

            AssemblyFactory.SaveAssembly(assembly, outputFileName);
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="OptimizationWorker"/> class.
 /// </summary>
 /// <param name="optimizer">The optimizer used for performing optimizations.</param>
 /// <param name="methodBody">The method of the method to be optimized.</param>
 public OptimizationWorker(Optimizer optimizer, MethodBody methodBody)
 {
     this.optimizer = optimizer;
     this.methodBody = methodBody;
 }