public static IEnumerable <EcsFile> Run(MethodReference entryPoint) { var usedTypes = GetUsedTypesOrdered(entryPoint).ToList(); var moduleParameter = new ModuleParameters { Kind = ModuleKind.Dll, AssemblyResolver = entryPoint.Module.AssemblyResolver }; var mod = ModuleDefinition.CreateModule("test", moduleParameter); // copy search path from old assembly // todo move to new transform, discovery transform? foreach (var t in usedTypes) { t.IsNestedPrivate = false; } foreach (var t in usedTypes) { mod.Types.Add(t); } (new NewobjTransform()).TransformIL(usedTypes); //(new ArrayTransform()).TransformIL(usedTypes); (new FinalizerOptimization()).TransformIL(usedTypes); (new VirtualCallOptimization()).TransformIL(usedTypes); (new MainNoReturnCodeTransform()).TransformIL(usedTypes); RenameTransform.Rename(usedTypes); (new ThisParameterTransform()).TransformIL(usedTypes); (new DelegateTransform()).TransformIL(usedTypes); (new StringLiteralOptimization()).GlobalOptimization(usedTypes); (new ValueTypeOptimization()).TransformIL(usedTypes); (new IsInstanceOptimization()).TransformIL(usedTypes); // has to be before Interface Optimization (IsInterface is set to false there) (new InterfaceOptimization()).TransformIL(usedTypes); (new FinalizerImplementationOptimization()).TransformIL(usedTypes); (new ExceptionTransform()).TransformIL(usedTypes); (new StripExternalAnnotations()).TransformIL(usedTypes); //(new StripTryCatch()).TransformIL(usedTypes); // do this after ExceptionTransform as it will create default values. (new PrimitiveDefaultValues()).TransformIL(usedTypes); ILAstDebugPrinter.ClearLogs(); ReferenceImportHelper.ImportReferences(mod); mod.Write(@"logs\compacted.dll"); File.Copy("ESharpCore.dll", @"logs\ESharpCore.dll"); // todo, just disabled temporarly because of poiter types resolving to null?? Should this happen? ReferenceChecker.CheckReferences(mod); var files = (new DecompilerService()).Generate(usedTypes, @"logs\compacted.dll").ToList(); // file optimization var fileOptimizationContext = new FileOptimizationContext { UsedTypes = usedTypes }; TypeEnumGenerator.FileOptimization(files, fileOptimizationContext); IncludeCFiles.Run(files); var mergedFiles = CMerger.MergeIntoSingleFile(files); return(mergedFiles); }