mirror of https://github.com/icsharpcode/ILSpy.git
7 changed files with 109 additions and 57 deletions
@ -1,28 +0,0 @@
@@ -1,28 +0,0 @@
|
||||
using System; |
||||
|
||||
using ICSharpCode.NRefactory.CSharp; |
||||
|
||||
namespace Decompiler.Transforms.Ast |
||||
{ |
||||
public class SimplifyTypeReferences: DepthFirstAstVisitor<object, object> |
||||
{ |
||||
string currentNamepace = string.Empty; |
||||
string currentClass = null; |
||||
|
||||
public override object VisitNamespaceDeclaration(NamespaceDeclaration namespaceDeclaration, object data) |
||||
{ |
||||
currentNamepace = namespaceDeclaration.Name; |
||||
base.VisitNamespaceDeclaration(namespaceDeclaration, data); |
||||
currentNamepace = string.Empty; |
||||
return null; |
||||
} |
||||
|
||||
public override object VisitTypeDeclaration(TypeDeclaration typeDeclaration, object data) |
||||
{ |
||||
currentClass = currentNamepace + "." + typeDeclaration.Name; |
||||
base.VisitTypeDeclaration(typeDeclaration, data); |
||||
currentClass = null; |
||||
return null; |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,50 @@
@@ -0,0 +1,50 @@
|
||||
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
|
||||
// This code is distributed under MIT X11 license (for details please see \doc\license.txt)
|
||||
|
||||
using System; |
||||
using ICSharpCode.NRefactory.CSharp; |
||||
|
||||
namespace Decompiler.Transforms |
||||
{ |
||||
public static class TransformationPipeline |
||||
{ |
||||
static IAstVisitor<object, object>[] CreatePipeline() |
||||
{ |
||||
return new IAstVisitor<object, object>[] { |
||||
new DelegateConstruction(), |
||||
new ConvertConstructorCallIntoInitializer(), |
||||
new ReplaceMethodCallsWithOperators() |
||||
}; |
||||
} |
||||
|
||||
public static void RunTransformations(AstNode node) |
||||
{ |
||||
RunTransformationsUntil(node, v => false); |
||||
} |
||||
|
||||
public static void RunTransformationsUntil(AstNode node, Predicate<IAstVisitor<object, object>> abortCondition) |
||||
{ |
||||
if (node == null) |
||||
return; |
||||
for (int i = 0; i < 4; i++) { |
||||
if (Options.ReduceAstJumps) { |
||||
node.AcceptVisitor(new Transforms.Ast.RemoveGotos(), null); |
||||
node.AcceptVisitor(new Transforms.Ast.RemoveDeadLabels(), null); |
||||
} |
||||
if (Options.ReduceAstLoops) { |
||||
node.AcceptVisitor(new Transforms.Ast.RestoreLoop(), null); |
||||
} |
||||
if (Options.ReduceAstOther) { |
||||
node.AcceptVisitor(new Transforms.Ast.RemoveEmptyElseBody(), null); |
||||
node.AcceptVisitor(new Transforms.Ast.PushNegation(), null); |
||||
} |
||||
} |
||||
|
||||
foreach (var visitor in CreatePipeline()) { |
||||
if (abortCondition(visitor)) |
||||
return; |
||||
node.AcceptVisitor(visitor, null); |
||||
} |
||||
} |
||||
} |
||||
} |
Loading…
Reference in new issue