Siegfried Pammer
a3191f19e2
Fix #2763 : Improve decompilation of switch-on-enum by preserving enum type information when inlining local variables into SwitchInstruction.Value.
3 years ago
Siegfried Pammer
948da3f9ee
ILInlining: IStatementTransform.Run repeatedly inline all possible statements.
3 years ago
Daniel Grunwald
503048b314
Prevent the early ILInlining pass from creating `addressof` instructions
3 years ago
Siegfried Pammer
d3f8912d53
Handle special-cases with addressof:
...
- Never introduce casts for ldobj-address-chains
- Add special-case to TransformExpressionTrees: transform addressof(ldloc) to ldloca
- Classify foreach and using variables as readonly lvalues
3 years ago
Siegfried Pammer
702a7da2c3
Fix #2714 : Force inlining of call targets in ctor initializers.
3 years ago
Siegfried Pammer
5f73bfbb01
Fix Deconstruction for Deconstruct instance methods of value-types.
3 years ago
Siegfried Pammer
83727ea4b0
Add support for value type patterns
4 years ago
Siegfried Pammer
8eafbb3d90
Fix #2092 : aggressively inline code in compiler-generated lambdas and expression trees.
4 years ago
Siegfried Pammer
4ae41a855e
Fix #2321 : Missing readonly modifier for ref local
4 years ago
Daniel Grunwald
3831b42197
Properly support `calli` instruction and its interaction with function pointer types.
5 years ago
Daniel Grunwald
bb99e9668a
Fix #2115 : Re-introduce the evaluation order bug #2050 when a language version <=C# 5 is selected.
5 years ago
dotnet format
0d9f871a4f
#2128 : Reformat the whole code base.
5 years ago
Siegfried Pammer
7f4653c274
Add support for tuple deconstruction
5 years ago
Siegfried Pammer
b435c07f4d
Added support for deconstruction assignments to properties
5 years ago
Daniel Grunwald
c9f65d3b5e
Fix #1555 : Eliminate value-type temporaries emitted by mcs on field reads.
5 years ago
Daniel Grunwald
cc850c27aa
Add "Aggressive inlining" option
5 years ago
Daniel Grunwald
1a997fdb60
Enable aggressive inlining into switch expressions.
5 years ago
Daniel Grunwald
c63e14e805
Move some special cases from ILInlining.FindLoadInNext to the individual ILInstructions.
5 years ago
Daniel Grunwald
fe2143b41f
Validate code movement performed by IndexRangeTransform.
5 years ago
Daniel Grunwald
81d9eda332
I just discovered that we do have un-inlining implemented... let's mention it where it's more likely to be found in the future.
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
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
12226c5f90
Add support for indexing a container with a System.Index instance.
5 years ago
Daniel Grunwald
dc6e094a30
Add support for indexing arrays using System.Index
5 years ago
Daniel Grunwald
eb2a9e6b94
#1852 : Rename array.to.pointer opcode to get.pinnable.reference.
6 years ago
Siegfried Pammer
a781e37d98
Fix #1779 : Do not inline compound assignment target, if it is a temporary struct.
6 years ago
Siegfried Pammer
ea3a005908
Fix #1760 : NRE in ILInlining, if nullable.rewrap is used with an expression that has a type parameter as its type.
6 years ago
Daniel Grunwald
ae32913aca
Add IMethod.ThisIsRefReadOnly
6 years ago
Siegfried Pammer
9190515d8b
#1151 : Support for ref readonly locals.
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
57b725df79
Fix #1655 : Incorrect pointer cast when calling method on integer constant
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
7f8689c464
Allow inlining of compiler-generated value-type-temporaries when field accesses are involved.
6 years ago
Daniel Grunwald
752f0de978
Further adjustments to transforms now that copy propagation no longer runs.
6 years ago
Daniel Grunwald
33c7425fa2
Fix several bugs with compound assignments on indexers.
...
Closes #1580 .
6 years ago
Daniel Grunwald
ccdabf2325
Fix a bunch of XmlDoc compiler warnings.
6 years ago
Daniel Grunwald
f2151972a0
Redesign CompoundAssignmentInstruction to support an 'Address' mode where we don't implicitly turn an LdObj into an StObj, but instead directly operate on an address.
...
This means we can get rid of the special case in TransformDisplayClassUsage, as compound.assign can now also be used with the address of a local variable.
6 years ago
Siegfried Pammer
b03aa488aa
Performance: Cache ChainedConstructorCallILOffset in ILFunction to avoid having to scan the method body in every inlining step. Take a shortcut for static ctors, as there cannot be chained ctor calls in static ctors.
6 years ago
Daniel Grunwald
8d99af14c5
Add support for 'ref readonly' return type.
6 years ago
Daniel Grunwald
416425b681
Readonly struct method calls on readonly lvalues don't generate temporaries.
6 years ago
Daniel Grunwald
4ad4f6a232
Fix #882 : Don't inline value-type temporaries for setter calls.
6 years ago
Daniel Grunwald
eb942b4a21
Fix #1430 : Improve performance in ILInlining.
6 years ago
Siegfried Pammer
6e49efd5aa
Extend ILInlining to work with StringToInt instructions inside Switch instruction.
6 years ago
Siegfried Pammer
c1fca21e8a
Make ILRange field private - introduce public API for IL range manipulation.
6 years ago
Daniel Grunwald
da5693e605
Fix #1339 : fixed statement not decompiled correctly when pinned variable is reset in finally block
6 years ago
Siegfried Pammer
ecde53969c
Add IsInConstructorInitializer case to ILInlining.OptionsForBlock.
6 years ago
Siegfried Pammer
ab8c73b2f7
#1336 : Add limit in HandleSimpleArrayInitializer.
6 years ago
Siegfried Pammer
0dac55d584
Add transformation for stackalloc to Span<T>.
7 years ago
Daniel Grunwald
4a3185c823
#907 : Add tests
7 years ago
Daniel Grunwald
e041454987
Add pretty tests for "yield return" and fix some minor bugs:
...
* remove redundant casts on yield-return-expression
* keep variable name from metadata for foreach loops
* fix 'yield break;' in nested try-finally sometimes causing a decompiler error
7 years ago