Пример #1
0
        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
            });
        }
Пример #2
0
        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
            });
        }
Пример #3
0
        //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);
            }
        }
Пример #4
0
 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());
 }