From abada2acdf3c1f00c1d0cb655b3c64ccb01d03af Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Fri, 8 Jul 2016 20:55:36 +0900 Subject: [PATCH] Move DecompilerSettings from ICSharpCode.Decompiler.CSharp to ICSharpCode.Decompiler; Add Settings to ILTransformContext --- ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs | 2 +- ICSharpCode.Decompiler/{CSharp => }/DecompilerSettings.cs | 2 +- ICSharpCode.Decompiler/ICSharpCode.Decompiler.csproj | 2 +- .../IL/Transforms/DelegateConstruction.cs | 6 +++--- ICSharpCode.Decompiler/IL/Transforms/IILTransform.cs | 1 + ILSpy/Languages/ILAstLanguage.cs | 2 +- 6 files changed, 8 insertions(+), 7 deletions(-) rename ICSharpCode.Decompiler/{CSharp => }/DecompilerSettings.cs (99%) diff --git a/ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs b/ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs index ce85d382e..334870e99 100644 --- a/ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs +++ b/ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs @@ -625,7 +625,7 @@ namespace ICSharpCode.Decompiler.CSharp } } - var context = new ILTransformContext { TypeSystem = specializingTypeSystem, CancellationToken = CancellationToken }; + var context = new ILTransformContext { Settings = settings, TypeSystem = specializingTypeSystem, CancellationToken = CancellationToken }; foreach (var transform in ilTransforms) { CancellationToken.ThrowIfCancellationRequested(); transform.Run(function, context); diff --git a/ICSharpCode.Decompiler/CSharp/DecompilerSettings.cs b/ICSharpCode.Decompiler/DecompilerSettings.cs similarity index 99% rename from ICSharpCode.Decompiler/CSharp/DecompilerSettings.cs rename to ICSharpCode.Decompiler/DecompilerSettings.cs index bbdb00f4b..74bdc9433 100644 --- a/ICSharpCode.Decompiler/CSharp/DecompilerSettings.cs +++ b/ICSharpCode.Decompiler/DecompilerSettings.cs @@ -20,7 +20,7 @@ using System; using System.ComponentModel; using ICSharpCode.NRefactory.CSharp; -namespace ICSharpCode.Decompiler.CSharp +namespace ICSharpCode.Decompiler { /// /// Settings for the decompiler. diff --git a/ICSharpCode.Decompiler/ICSharpCode.Decompiler.csproj b/ICSharpCode.Decompiler/ICSharpCode.Decompiler.csproj index 70f956854..b03b17719 100644 --- a/ICSharpCode.Decompiler/ICSharpCode.Decompiler.csproj +++ b/ICSharpCode.Decompiler/ICSharpCode.Decompiler.csproj @@ -64,7 +64,7 @@ - + diff --git a/ICSharpCode.Decompiler/IL/Transforms/DelegateConstruction.cs b/ICSharpCode.Decompiler/IL/Transforms/DelegateConstruction.cs index 17d4a0ea5..b6d2e5be6 100644 --- a/ICSharpCode.Decompiler/IL/Transforms/DelegateConstruction.cs +++ b/ICSharpCode.Decompiler/IL/Transforms/DelegateConstruction.cs @@ -31,7 +31,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms void IILTransform.Run(ILFunction function, ILTransformContext context) { - if (!new DecompilerSettings().AnonymousMethods) + if (!context.Settings.AnonymousMethods) return; this.context = context; this.decompilationContext = new SimpleTypeResolveContext(context.TypeSystem.Resolve(function.Method)); @@ -81,7 +81,6 @@ namespace ICSharpCode.Decompiler.IL.Transforms { if (potentialDisplayClass == null || !potentialDisplayClass.IsCompilerGeneratedOrIsInCompilerGeneratedClass()) return false; - // check that methodContainingType is within containingType while (potentialDisplayClass != decompiledTypeDefinition) { potentialDisplayClass = potentialDisplayClass.DeclaringTypeDefinition; if (potentialDisplayClass == null) @@ -107,7 +106,8 @@ namespace ICSharpCode.Decompiler.IL.Transforms function.RunTransforms(CSharpDecompiler.GetILTransforms(), context, t => t is DelegateConstruction); function.AcceptVisitor(new ReplaceDelegateTargetVisitor(target, function.Variables.SingleOrDefault(v => v.Index == -1 && v.Kind == VariableKind.Parameter))); - ((IILTransform)this).Run(function, new ILTransformContext { CancellationToken = context.CancellationToken, TypeSystem = localTypeSystem }); + // handle nested lambdas + ((IILTransform)new DelegateConstruction()).Run(function, new ILTransformContext { Settings = context.Settings, CancellationToken = context.CancellationToken, TypeSystem = localTypeSystem }); return function; } return null; diff --git a/ICSharpCode.Decompiler/IL/Transforms/IILTransform.cs b/ICSharpCode.Decompiler/IL/Transforms/IILTransform.cs index 83735ba82..dacc4c726 100644 --- a/ICSharpCode.Decompiler/IL/Transforms/IILTransform.cs +++ b/ICSharpCode.Decompiler/IL/Transforms/IILTransform.cs @@ -24,6 +24,7 @@ namespace ICSharpCode.Decompiler.IL public class ILTransformContext { public IDecompilerTypeSystem TypeSystem { get; set; } + public DecompilerSettings Settings { get; set; } public CancellationToken CancellationToken { get; set; } } diff --git a/ILSpy/Languages/ILAstLanguage.cs b/ILSpy/Languages/ILAstLanguage.cs index a856a377e..888a4122f 100644 --- a/ILSpy/Languages/ILAstLanguage.cs +++ b/ILSpy/Languages/ILAstLanguage.cs @@ -154,7 +154,7 @@ namespace ICSharpCode.ILSpy var typeSystem = new DecompilerTypeSystem(method.Module); ILReader reader = new ILReader(typeSystem); ILFunction il = reader.ReadIL(method.Body, options.CancellationToken); - il.RunTransforms(transforms, new ILTransformContext { TypeSystem = typeSystem }); + il.RunTransforms(transforms, new ILTransformContext { Settings = options.DecompilerSettings, TypeSystem = typeSystem }); il.WriteTo(output); } }