.NET Decompiler with support for PDB generation, ReadyToRun, Metadata (&more) - cross-platform!
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Daniel Grunwald
060830dd64
Variable splitting: support cases where a ref is passed through a ref-returning method, and then used.
...
From `IndexRangeTest.UseIndexForRef`:
```
stloc V_4(call GetSpan())
stloc S_19(ldloca V_4)
stloc V_2(call get_Length(ldloc S_19))
stloc V_3(call GetOffset(addressof System.Index(call GetIndex(ldc.i4 0)), ldloc V_2))
call UseRef(call get_Item(ldloc S_19, ldloc V_3))
stloc V_4(call GetSpan())
stloc S_30(ldloca V_4)
stloc V_2(binary.sub.i4(call get_Length(ldloc S_30), call GetInt(ldc.i4 0)))
call UseRef(call get_Item(ldloc S_30, ldloc V_2))
```
Due to `Span.get_Item` being a ref-return, it's possible that `ref V_4` is returned and passed into the `UseRef` method (this can't actually happen given Span's implementation, but it's a possible implementation of the get_Item type signature).
But we still need to split `V_4` -- it's a compiler-generated variable and needs to be inlined.
I think we can do this relatively simply by continuing to go up the ancestor instructions when we hit a ref-returning call. The recursive `DetermineAddressUse` call will check that there are no stores to `V_4` between the `get_Item` call and the point where the returned reference is used. Thus we still ensure that we don't split a variable while there is a live reference to it.
5 years ago
..
AssignVariableNames.cs
Fix #1881 : Not properly reusing names from PDB#2
5 years ago
BlockTransform.cs
Fix #1242 : Discard unreachable code.
6 years ago
CachedDelegateInitialization.cs
Fix #1609 : Decompilation of cached delegate-construction with unknown delegate type.
6 years ago
CombineExitsTransform.cs
Fix #1472 : Apply ExpressionTransforms after CombineExitsTransform to "canonicalize logic and/or"
6 years ago
CopyPropagation.cs
Fix #1656 : Disable CopyPropagation for split variables.
6 years ago
DelegateConstruction.cs
Implement workaround for #1961
5 years ago
DetectCatchWhenConditionBlocks.cs
Don't perform DetectCatchWhenConditionBlocks transform when catchBlock.Variable.Type setter would throw an exception due to differing stack types.
6 years ago
DynamicCallSiteTransform.cs
Inline variable declarations/modernize parts of our code base.
5 years ago
DynamicIsEventAssignmentTransform.cs
Further adjustments to transforms now that copy propagation no longer runs.
6 years ago
EarlyExpressionTransforms.cs
Fix #1655 : Incorrect pointer cast when calling method on integer constant
6 years ago
ExpressionTransforms.cs
Add support for indexing arrays using System.Index
5 years ago
FixRemainingIncrements.cs
Fix #1552 : user-defined and decimal increments
6 years ago
HighLevelLoopTransform.cs
Add ForStatement, DoWhileStatement and SeparateLocalVariableDeclarations settings.
6 years ago
IILTransform.cs
Merge IDecompilerTypeSystem with ICompilation.
7 years ago
ILExtraction.cs
Add missing license headers to MIT licensed files in ICSharpCode.Decompiler
5 years ago
ILInlining.cs
Add support for indexing a container with a System.Index instance.
5 years ago
IndexRangeTransform.cs
Add support for indexing a container with a System.Index instance.
5 years ago
InlineReturnTransform.cs
…
IntroduceDynamicTypeOnLocals.cs
…
IntroduceRefReadOnlyModifierOnLocals.cs
#1151 : Support for ref readonly locals.
6 years ago
LocalFunctionDecompiler.cs
Fix #1895 : local function not added to the correct parent function.
6 years ago
LockTransform.cs
Make ILRange field private - introduce public API for IL range manipulation.
6 years ago
NamedArgumentTransform.cs
Use appropriate type for helper variables introduced for named arguments.
6 years ago
NullCoalescingTransform.cs
Remove unused code.
6 years ago
NullPropagationTransform.cs
Fix CA1507:UseNameofInPlaceOfString, adjust formatting of some older source files copied from NRefactory.
6 years ago
NullableLiftingTransform.cs
short-circuting -> short-circuiting
6 years ago
ProxyCallReplacer.cs
Fix #1976 : ProxyCallReplacer should honor selected language version/selected options
5 years ago
ReduceNestingTransform.cs
agressive -> aggressive
6 years ago
RemoveDeadVariableInit.cs
Add RemoveDeadStores option
6 years ago
SplitVariables.cs
Variable splitting: support cases where a ref is passed through a ref-returning method, and then used.
5 years ago
StatementTransform.cs
Limit the number of instructions validated for the $"{transform.GetType().Name} modified an instruction before pos" assertion; this makes debug-mode performance less horrible.
6 years ago
Stepper.cs
Fix a bunch of XmlDoc compiler warnings.
6 years ago
SwitchOnNullableTransform.cs
Fix #1455 : NRE in MatchRoslynSwitchOnNullable
6 years ago
SwitchOnStringTransform.cs
Fix #1809 : Support VB Select on string.
6 years ago
TransformArrayInitializers.cs
Fix #1280 : Transform RuntimeHelpersInitializeArray calls without receiving assignments.
6 years ago
TransformAssignment.cs
Fix compound assignments with type `bool`.
6 years ago
TransformCollectionAndObjectInitializers.cs
Fix #1593 : TransformCollectionAndObjectInitializers uses nested indexer call as target of object initializer.
6 years ago
TransformDisplayClassUsage.cs
Fix #1879 : Do not remove variables that look like display class variables, but are used in other patterns as well.
5 years ago
TransformExpressionTrees.cs
Fix #1811 : Assert in NullCoalescingInstruction.CheckInvariant after expression tree transform
6 years ago
TupleTransform.cs
…
UserDefinedLogicTransform.cs
Make ILRange field private - introduce public API for IL range manipulation.
6 years ago
UsingTransform.cs
Add support for await using statements.
6 years ago