internal static IEnumerable <CSharpLanguage> GetDebugLanguages() { var context = new DecompilerContext(ModuleDefinition.CreateModule("dummy", ModuleKind.Dll)); string lastTransformName = "no transforms"; foreach ( Type _transformType in TransformationPipeline.CreatePipeline(context).Select(v => v.GetType()).Distinct()) { Type transformType = _transformType; // copy for lambda yield return(new CSharpLanguage { transformAbortCondition = v => transformType.IsInstanceOfType(v), name = "C# - " + lastTransformName, showAllMembers = true }); lastTransformName = "after " + transformType.Name; } yield return(new CSharpLanguage { name = "C# - " + lastTransformName, showAllMembers = true }); }
internal static IEnumerable <CSharpDecompiler> GetDebugDecompilers(CSharpVBDecompilerSettings langSettings) { DecompilerContext context = new DecompilerContext(0, new ModuleDefUser("dummy"), CSharpMetadataTextColorProvider.Instance); string lastTransformName = "no transforms"; double orderUI = DecompilerConstants.CSHARP_ILSPY_DEBUG_ORDERUI; uint id = 0xBF67AF3F; foreach (Type _transformType in TransformationPipeline.CreatePipeline(context).Select(v => v.GetType()).Distinct()) { Type transformType = _transformType; // copy for lambda yield return(new CSharpDecompiler(langSettings, orderUI++) { transformAbortCondition = v => transformType.IsInstanceOfType(v), uniqueNameUI = "C# - " + lastTransformName, uniqueGuid = new Guid($"203F702E-7E87-4F01-84CD-B0E8{id++:X8}"), showAllMembers = true }); lastTransformName = "after " + transformType.Name; } yield return(new CSharpDecompiler(langSettings, orderUI++) { uniqueNameUI = "C# - " + lastTransformName, uniqueGuid = new Guid($"203F702E-7E87-4F01-84CD-B0E8{id++:X8}"), showAllMembers = true }); }
//private IEnumerable<AstNode> FlattenScript(TypeDeclaration scriptClass) { // foreach (var member in scriptClass.Members) { // var constructor = member as ConstructorDeclaration; // if (constructor != null) { // foreach (var statement in constructor.Body.Statements) { // yield return statement; // } // } // else { // yield return member; // } // } //} private void RunTransforms(AstBuilder ast, DecompilerContext context) { var transforms = TransformationPipeline.CreatePipeline(context).ToList(); transforms[transforms.FindIndex(t => t is ConvertConstructorCallIntoInitializer)] = new RoslynFriendlyConvertConstructorCallIntoInitializer(); foreach (var transform in transforms) { transform.Run(ast.SyntaxTree); } }
public DecompilerCache(DecompilerContext ctx) { this.pipelinePool = new ObjectPool <IAstTransformPoolObject[]>(() => TransformationPipeline.CreatePipeline(ctx), null); this.ilAstBuilderPool = new ObjectPool <ILAstBuilder>(() => new ILAstBuilder(), a => a.Reset()); this.ilAstOptimizerPool = new ObjectPool <ILAstOptimizer>(() => new ILAstOptimizer(), a => a.Reset()); this.gotoRemovalPool = new ObjectPool <GotoRemoval>(() => new GotoRemoval(ctx), a => a.Reset()); this.astMethodBodyBuilderPool = new ObjectPool <AstMethodBodyBuilder>(() => new AstMethodBodyBuilder(), a => a.Reset()); }