Jane Doe
16036f12ec
Atributes -> Attributes
6 years ago
Siegfried Pammer
cc3a0bef7e
Fix #1745 : Empty string is missing from switch result
6 years ago
Siegfried Pammer
b1352aa569
Fix #1743 : Add pattern for struct constructor initializers.
6 years ago
Daniel Grunwald
de33e79384
Add tests for 'async IAsyncEnumerable'.
...
Remove [AsyncIteratorStateMachine] attribute and left-over ldc.i4 instructions.
6 years ago
Daniel Grunwald
d65b109fbc
Fix #1689 : Add support for null propagation on array access: `arr?[i]`
6 years ago
Daniel Grunwald
80cb24d180
Fix #1709 : NullPropagationTransform.IsGetter on generic types
6 years ago
Daniel Grunwald
080f63e660
Fix LambdaResolveResult.IsValid() being too restrictive.
...
This could cause our overload resolution to consider an overload as not-applicable when it actually is applicable. This could cause us to miss some cases where we need to insert casts.
6 years ago
Daniel Grunwald
5847d87651
Adjust tests: test runner now adds+removes TargetFramework attribute
6 years ago
Siegfried Pammer
d45311f65e
Enable tests for await using and DIM.
6 years ago
Daniel Grunwald
5911b13497
Fix modifiers on default interface methods.
6 years ago
Daniel Grunwald
605b32558a
Extend InterfaceTests
6 years ago
Daniel Grunwald
8f90f3834d
Implement support for C# 8 readonly members.
6 years ago
Siegfried Pammer
7c8458dfa3
Refactor TransformDisplayClassUsage
6 years ago
Daniel Grunwald
1d95eb60a2
Fix #1680 : Invalid cast `(uint?)-1`
6 years ago
Siegfried Pammer
dc1e72a3d0
Fix #1151 : Add ref readonly test case.
6 years ago
Daniel Grunwald
0465cc8475
Adjust expected output in ILPretty tests
6 years ago
Daniel Grunwald
4b90e43187
Avoid making explicit ToString() implicit when doing so changes the semantics for mutable value types.
6 years ago
Daniel Grunwald
b5eecb8afc
Don't remove redundant ToString() calls in expression trees.
6 years ago
Daniel Grunwald
7a5d8af57d
#1691 : Further improvements for decompiling the new VS 2019.3 string concatenation IL pattern
6 years ago
Daniel Grunwald
c32361d464
#1691 : Avoid replacing string.Concat() with operator+ when the evaluation order depends on the compiler version.
6 years ago
Daniel Grunwald
b45f21e714
#1675 : Fix converting static method to method group
6 years ago
Siegfried Pammer
9fff0438c0
Fix #1675 : Emit __ldftn/__ldvirtftn pseudo expressions, if delegate construction is not supported.
6 years ago
Daniel Grunwald
fb70a2861e
Fix #1656 : Disable CopyPropagation for split variables.
...
The code reordering done by copy propagation could cause the lifetimes of different parts of a split variable to start overlapping. This caused incorrect C# to be generated when the variable was recombined.
6 years ago
Daniel Grunwald
0d3a3bee82
Fix #1703 : Support async methods that never return normally.
...
Closes #1678 .
6 years ago
Siegfried Pammer
d2f7258347
Fix #1681 : Use discard assignment, if possible.
6 years ago
Siegfried Pammer
f5185d5697
Fix #1660 : Generic proxy calls should use the callee's type parameter substitution, not the caller's.
6 years ago
Daniel Grunwald
ab993fc6c6
Fix invalid code generated for impossible casts.
6 years ago
Daniel Grunwald
57b725df79
Fix #1655 : Incorrect pointer cast when calling method on integer constant
6 years ago
Siegfried Pammer
05454bd741
Fix SwitchOnStringTransform.SimplifyCascadingIfStatements: do not remove statements unrelated to switch pattern.
6 years ago
Siegfried Pammer
4db22c87e1
Implement detection of custom task implementations + tests.
6 years ago
Siegfried Pammer
bbb40ecb32
Fix #1602 : Recognize Roslyn empty string case block.
6 years ago
Siegfried Pammer
def681ccdf
Fix #1621 : Add AllowUnreachableCases in switch analysis.
6 years ago
Daniel Grunwald
f1021cb300
Fix #1643 : Handle unbox.any in TransformCatchVariable.
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
cdc7a3641f
Fix references to nested types in generic classes.
6 years ago
Daniel Grunwald
7afa86d90c
Add support for "where T : notnull" constraint.
6 years ago
Siegfried Pammer
13fa499c35
Fix #1630 : Do not convert while to for statement, if any iterator variables are to be declared in the loop body. This causes problems with ref-typed variables.
6 years ago
Siegfried Pammer
f49cc11c76
Fix #1627 : Allow constants as targets of dynamic calls.
6 years ago
Siegfried Pammer
fa7c1f574a
Do not convert simple LINQ method calls to LINQ expressions. Closes #1501 .
6 years ago
Siegfried Pammer
0ca5ace524
#1349 : Fix assertions triggered by incorrect local function decompilation.
6 years ago
Daniel Grunwald
3f996ff2c0
Fix #1604 : async methods that had no 'await' but were capturing 'this' were not decompiled correctly
6 years ago
Siegfried Pammer
ec18094c65
Implement transformation of delegate construction with ldvirtftn.
6 years ago
Siegfried Pammer
ce04964206
Reformat ThrowExpressions tests.
6 years ago
Daniel Grunwald
df13f0ce01
Fix #1605 : Inline ref locals more aggressively; this is necessary for VB compound assignments.
6 years ago
Daniel Grunwald
0e0179edff
Improve NullPropagation (?.) when fields of value-type are involved.
6 years ago
Daniel Grunwald
7f8689c464
Allow inlining of compiler-generated value-type-temporaries when field accesses are involved.
6 years ago
Siegfried Pammer
4a0ca21bbf
Add (failing) test case for throw expressions.
6 years ago
Daniel Grunwald
18ee984ade
Add support for "definitely assigned if true/false" to data flow analysis.
6 years ago
Siegfried Pammer
14c76d1ba6
Fix failing initializer tests.
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