Name |
Description |
AnonymousDelegateCachingRemover |
|
CapturedLocalDeclarationInserter |
|
CapturedLocalDefinition |
|
ClosureFieldDeclaringBlockFinder |
|
ClosureFieldMapper |
The purpose of this traverser is to discover the mapping between fields in a closure state class and the original locals and parameters that were captured into the closure state class, so that we can substitute field accesses with local and parameter accesses during decompilation of anonymous delegates. Things are complicated by having to deal with a variety of compilers that potentially use different name mangling schemes and moreover we might not have a PDB file available and so might not know the name of a local or parameter. The bottom line is that we cannot rely on naming conventions. Generally, we rely on the source operand of the first assignment to a state field as providing the local or parameter that is being captured. However, if an anonymous delegate uses a local that is not used outside of it (or other anonymous delegates) then a compiler (such as, alas, the C# compiler) might provide a state field for the local while not actually defining a real local of inserting an assignment to capture the value of the local in the state class before constructing a closure. We therefore recurse into anonymous delegate bodies to find assignments to state fields, assume those are captured locals, and then dummy up locals for use in the decompiled method. |
ClosureFinder |
|
CompilationArtifactRemover |
|
DecompiledBlock |
A delimited collection of statements to execute in a new (nested) scope. |
EndFilter |
|
EndFinally |
|
ForLoopReplacer |
|
InstructionParser |
|
LocalFinder |
|
LockReplacer |
|
PatternReplacer |
|
PatternReplacer.SinglePopReplacer |
|
PopCounter |
|
PopReplacer |
|
SingleAssignmentLocalReplacer |
|
SingleAssignmentSingleReferenceFinder |
|
SingleUseExpressionChecker |
|
SourceMethodBody |
A metadata (IL) representation along with a source level representation of the body of a method or of a property/event accessor. |
SwitchInstruction |
|
SwitchReplacer |
|
TryCatchReplacer |
|
TryCatchReplacer.LocalDeclarationRemover |
|
TryCatchReplacer.UnconditionalBranchRemover |
|
TypeInferencer |
|
UnreferencedLabelRemover |
|
WhileLoopReplacer |
|