Daniel Grunwald
3831b42197
Properly support `calli` instruction and its interaction with function pointer types.
5 years ago
Siegfried Pammer
549f7fb44d
Fix #2143 : Missing `this.` qualification in lambda
5 years ago
dotnet format
0d9f871a4f
#2128 : Reformat the whole code base.
5 years ago
Siegfried Pammer
dab70964a5
Add support for C# 8.0 disposable ref structs
5 years ago
Siegfried Pammer
1ecf489597
Add support for deconstruction to fields
5 years ago
Siegfried Pammer
a549b03bea
Implement ref local assignments
5 years ago
Siegfried Pammer
7f4653c274
Add support for tuple deconstruction
5 years ago
Siegfried Pammer
442f6f90b7
Implement deconstruction discards
5 years ago
Siegfried Pammer
9cb3fe3484
Add support for basic deconstruction conversions
5 years ago
Siegfried Pammer
b435c07f4d
Added support for deconstruction assignments to properties
5 years ago
Daniel Grunwald
b6b5f1e8e6
#2092 : ILFunction.Parameters / ILFunction.ReturnType should never be null.
5 years ago
Daniel Grunwald
abb9d49a0f
Add support for C# 8 switch expressions.
5 years ago
Siegfried Pammer
b01e9484d5
Fix bugs in ILAst
5 years ago
Siegfried Pammer
6bb6097ad4
Extended DeconstructInstruction.CheckInvariant
5 years ago
Daniel Grunwald
cda56e7f7e
#2048 : Pattern matching: documentation and invariants for MatchInstruction.
5 years ago
Daniel Grunwald
bdea1950a8
Add `#if !NETCORE` around extension methods that are included with .NET Core 3
5 years ago
Siegfried Pammer
95f2ae7aef
Add ILAst base for Deconstruction and Pattern Matching
5 years ago
Daniel Grunwald
e0fd0bba32
Allow inlining constants into expression trees.
5 years ago
Daniel Grunwald
c63e14e805
Move some special cases from ILInlining.FindLoadInNext to the individual ILInstructions.
5 years ago
Daniel Grunwald
1d684102ac
Support compound assignment for native integers.
5 years ago
Daniel Grunwald
b18ed89b67
#2050 : Add assertion to check that no transform uses StObj.TargetSlot incorrectly.
5 years ago
Daniel Grunwald
62fcab8d99
#2050 : Allow inlining into the StObj target slot when this is possible without changing the program semantics.
5 years ago
Daniel Grunwald
d8e837ef47
Fix #1772 : Support EnumeratorCancellationAttribute
...
With this change, the async decompiler no longer gets confused by the logic disposing `this.<>x__combinedTokens`.
5 years ago
Daniel Grunwald
925a4e1e65
#2050 : Don't put ldflda/ldelema with immediate exceptions into StObj.TargetSlot.
...
The C# translation of StObj will always apply delayed exceptions in these two cases, so putting an instruction with delayed exceptions in that slot would change program semantics.
5 years ago
Daniel Grunwald
2c0554f129
Fix #1963 : Support decompiling `calli` instructions into C# 9 function pointer syntax.
5 years ago
Siegfried Pammer
bcd7219535
Adjust CapturedVariables collection in ReplaceDelegateTargetVisitor and in TransformExpressionTrees
5 years ago
Siegfried Pammer
3436ac3246
Fix #2018 : Improve tooltips in IL/IL with C#/R2R view to show full member signatures
5 years ago
Siegfried Pammer
0fa04a5248
Fix build.
5 years ago
Siegfried Pammer
1c7d9705da
Add Validation of delegate target instructions.
5 years ago
Siegfried Pammer
6042819117
Implement Block.CheckInvariant for BlockKind.ArrayInitializer, BlockKind.CollectionInitializer and BlockKind.ObjectInitializer
5 years ago
Siegfried Pammer
f1cbc7c8db
Add AggressiveScalarReplacementOfAggregates option
5 years ago
Siegfried Pammer
4f7ca65408
Fix #1913 : Make sure to declare local variables captured by local functions before the first invocation of the local function.
5 years ago
Siegfried Pammer
83e8049114
Add ILVariable.IsDead property
5 years ago
Siegfried Pammer
2601d17919
Add clarifying comment to ExceptionSpecifierILRange
5 years ago
Siegfried Pammer
c293613a56
Add ExceptionSpecifierILRange to TryCatchHandler
5 years ago
Jackson Davis
6ab1f98fa3
Expand the range of sequence points out the closest empty ilstack
...
or implicit sequence point without creating overlapping sequence points.
If such a location cannot be found do, nothing. Fill in the
gaps with hidden sequence points.
Also emit a sequence point for
the prolog to account for seqeunce point there emitted by the C#
compiler. Without this, the debugger can stop there on a step in
using the original pdb, then decompile resulting in a no-code at this
location failure.
5 years ago
Siegfried Pammer
e4fda5c2e4
Rename HasILRange to ILRangeIsEmpty to properly reflect its implementation.
5 years ago
Daniel Grunwald
a1c211f326
Fix #1794 : Avoid extra cast to double for ulong -> float conversion
6 years ago
Siegfried Pammer
e211b01595
Fix CA1507:UseNameofInPlaceOfString, adjust formatting of some older source files copied from NRefactory.
6 years ago
Siegfried Pammer
cc3a0bef7e
Fix #1745 : Empty string is missing from switch result
6 years ago
Siegfried Pammer
c7f98a4db7
Add support for await using statements.
6 years ago
Daniel Grunwald
be2731c6e6
Handle `if (disposeMode)` in async streams.
6 years ago
Siegfried Pammer
5e6479a5fa
Fix #1636 : Remove assertion that delegates/expression trees must not be top-level expressions.
6 years ago
Daniel Grunwald
57b725df79
Fix #1655 : Incorrect pointer cast when calling method on integer constant
6 years ago
Siegfried Pammer
44c044aa33
Fix #1635 : DynamicInvokeConstructorInstruction Did report the wrong StackType for value types and unknown types.
6 years ago
Daniel Grunwald
84aaaeb84e
Fix #1616 : similar to 3ea2ce4e2d
, let `a.Instructions[i] = a.Instructions[i]` refresh that instruction's primary position.
6 years ago
Daniel Grunwald
2b9a40371b
Remove the dead LoopingTransform.
...
Make ILInstruction.IsDirty debug-only, as it is only used for assertions now.
6 years ago
Siegfried Pammer
3ea2ce4e2d
#1349 : Fix assertions triggered by incorrect reset implementation in TransformThrowExpressionsValueTypes. ILInstruction.SetChildInstruction should only return early, if index and parent are still the same.
6 years ago
Siegfried Pammer
7d4b4c6433
Implement NullCoalescingTransform with value types.
6 years ago
Daniel Grunwald
8117dfff4a
Fix #1242 : Discard unreachable code.
...
Unreachable code is not part of the dominator tree, which most of our transforms are based on.
In particular, dominance-based loop detection runs into the problem where unreachable code might have jumps into two independent loops. In that case, it's impossible to place the unreachable code in a way that avoids assertions / generating invalid C#.
We establish the invariant that all blocks in a BlockContainer must be statically reachable from the entry point (-> every block is part of the dominator tree). This means transforms no longer have to deal with special cases for unreachable code.
The "Remove dead and side effect free code" option still has an effect on dead stores, but unreachable code is now always removed (previously this also was dependent on this option).
6 years ago