Browse Source

Move DecompilerSettings from ICSharpCode.Decompiler.CSharp to ICSharpCode.Decompiler; Add Settings to ILTransformContext

pull/734/head
Siegfried Pammer 9 years ago
parent
commit
abada2acdf
  1. 2
      ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs
  2. 2
      ICSharpCode.Decompiler/DecompilerSettings.cs
  3. 2
      ICSharpCode.Decompiler/ICSharpCode.Decompiler.csproj
  4. 6
      ICSharpCode.Decompiler/IL/Transforms/DelegateConstruction.cs
  5. 1
      ICSharpCode.Decompiler/IL/Transforms/IILTransform.cs
  6. 2
      ILSpy/Languages/ILAstLanguage.cs

2
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) { foreach (var transform in ilTransforms) {
CancellationToken.ThrowIfCancellationRequested(); CancellationToken.ThrowIfCancellationRequested();
transform.Run(function, context); transform.Run(function, context);

2
ICSharpCode.Decompiler/CSharp/DecompilerSettings.cs → ICSharpCode.Decompiler/DecompilerSettings.cs

@ -20,7 +20,7 @@ using System;
using System.ComponentModel; using System.ComponentModel;
using ICSharpCode.NRefactory.CSharp; using ICSharpCode.NRefactory.CSharp;
namespace ICSharpCode.Decompiler.CSharp namespace ICSharpCode.Decompiler
{ {
/// <summary> /// <summary>
/// Settings for the decompiler. /// Settings for the decompiler.

2
ICSharpCode.Decompiler/ICSharpCode.Decompiler.csproj

@ -64,7 +64,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="CSharp\Annotations.cs" /> <Compile Include="CSharp\Annotations.cs" />
<Compile Include="CSharp\DecompilerSettings.cs" /> <Compile Include="DecompilerSettings.cs" />
<Compile Include="CSharp\Transforms\ContextTrackingVisitor.cs" /> <Compile Include="CSharp\Transforms\ContextTrackingVisitor.cs" />
<Compile Include="CSharp\Transforms\DecimalConstantTransform.cs" /> <Compile Include="CSharp\Transforms\DecimalConstantTransform.cs" />
<Compile Include="CSharp\Transforms\DeclareVariables.cs" /> <Compile Include="CSharp\Transforms\DeclareVariables.cs" />

6
ICSharpCode.Decompiler/IL/Transforms/DelegateConstruction.cs

@ -31,7 +31,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms
void IILTransform.Run(ILFunction function, ILTransformContext context) void IILTransform.Run(ILFunction function, ILTransformContext context)
{ {
if (!new DecompilerSettings().AnonymousMethods) if (!context.Settings.AnonymousMethods)
return; return;
this.context = context; this.context = context;
this.decompilationContext = new SimpleTypeResolveContext(context.TypeSystem.Resolve(function.Method)); this.decompilationContext = new SimpleTypeResolveContext(context.TypeSystem.Resolve(function.Method));
@ -81,7 +81,6 @@ namespace ICSharpCode.Decompiler.IL.Transforms
{ {
if (potentialDisplayClass == null || !potentialDisplayClass.IsCompilerGeneratedOrIsInCompilerGeneratedClass()) if (potentialDisplayClass == null || !potentialDisplayClass.IsCompilerGeneratedOrIsInCompilerGeneratedClass())
return false; return false;
// check that methodContainingType is within containingType
while (potentialDisplayClass != decompiledTypeDefinition) { while (potentialDisplayClass != decompiledTypeDefinition) {
potentialDisplayClass = potentialDisplayClass.DeclaringTypeDefinition; potentialDisplayClass = potentialDisplayClass.DeclaringTypeDefinition;
if (potentialDisplayClass == null) if (potentialDisplayClass == null)
@ -107,7 +106,8 @@ namespace ICSharpCode.Decompiler.IL.Transforms
function.RunTransforms(CSharpDecompiler.GetILTransforms(), context, t => t is DelegateConstruction); 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))); 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 function;
} }
return null; return null;

1
ICSharpCode.Decompiler/IL/Transforms/IILTransform.cs

@ -24,6 +24,7 @@ namespace ICSharpCode.Decompiler.IL
public class ILTransformContext public class ILTransformContext
{ {
public IDecompilerTypeSystem TypeSystem { get; set; } public IDecompilerTypeSystem TypeSystem { get; set; }
public DecompilerSettings Settings { get; set; }
public CancellationToken CancellationToken { get; set; } public CancellationToken CancellationToken { get; set; }
} }

2
ILSpy/Languages/ILAstLanguage.cs

@ -154,7 +154,7 @@ namespace ICSharpCode.ILSpy
var typeSystem = new DecompilerTypeSystem(method.Module); var typeSystem = new DecompilerTypeSystem(method.Module);
ILReader reader = new ILReader(typeSystem); ILReader reader = new ILReader(typeSystem);
ILFunction il = reader.ReadIL(method.Body, options.CancellationToken); 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); il.WriteTo(output);
} }
} }

Loading…
Cancel
Save