Jakob Hellermann
3c062bad0c
Fix anonymous-type lambda early-return emitting unresolvable cast ( #3752 )
...
* Fix anonymous-type lambda early-return emitting unresolvable cast
When a lambda's inferred return type contains an anonymous type and one
branch returns null, the decompiler emitted an explicit cast such as
`return (IEnumerable<<>f__AnonymousType0<int>>)null;`, which is invalid C#.
Skip the cast in IsPossibleLossOfTypeInformation for null literals whenever
the expected type contains an anonymous type:
null is implicitly convertible to any reference type, so no cast is needed,
and the anonymous type has no nameable form to cast to anyway.
Fixes #3751
4 weeks ago
ds5678
c54318173b
Fix lower case type name conflicting with variable name
9 months ago
Peter Crabtree
e1e16b64f5
dev: Strip BOM mark from text files
10 months ago
Daniel Grunwald
89083eaf48
Fix #3344 : Add support for the `ckfinite` opcode.
11 months ago
Siegfried Pammer
d2d9281072
Move CanTransformToExtensionMethodCall to CSharpResolver
11 months ago
Siegfried Pammer
03aecf047d
Add VariableScope and rework AssignVariableNames step to support renaming parameters of nested ILFunctions in the future.
1 year ago
Siegfried Pammer
7c6f7fea05
Make sure that there is only one applicable implicit conversion when dealing with switch, otherwise use an explicit cast.
2 years ago
Siegfried Pammer
e4285b751b
Fix build.
2 years ago
Siegfried Pammer
efbefd0d3b
Fix #3361 : switch-value conversion was losing its target type.
2 years ago
Siegfried Pammer
9548a11d37
Use ILSpyHelper_AsRefReadOnly to ensure that overload resolution can pick the correct overload using 'in'.
2 years ago
Siegfried Pammer
972354913e
Fix #3209 : Ensure using directives are added for extension methods in higher level patterns such as: foreach -> GetEnumerator(), collection initializer -> Add() and deconstruction -> Deconstruct().
2 years ago
Siegfried Pammer
eae54ddf24
Fix #3014 : Missing type information in lambda expressions.
3 years ago
Siegfried Pammer
70616b301c
Implement support for C# 11 switch on (ReadOnly)Span<char>.
3 years ago
Siegfried Pammer
a3191f19e2
Fix #2763 : Improve decompilation of switch-on-enum by preserving enum type information when inlining local variables into SwitchInstruction.Value.
4 years ago
Siegfried Pammer
5f324de10b
Add support for ref fields.
4 years ago
Siegfried Pammer
5f73bfbb01
Fix Deconstruction for Deconstruct instance methods of value-types.
4 years ago
Daniel Grunwald
2419c2641a
StatementBuilder.TransformToForeach: allow both `break;` and `return;` within the using body
5 years ago
Siegfried Pammer
8fc64669c2
Add annotations on local function parameter declarations
5 years ago
Siegfried Pammer
bf8166d045
Fix #2291 : block container end labels should be unique as well.
5 years ago
Siegfried Pammer
f29205448b
Fix #2283 : Disallow all implicit conversions in switch on string.
6 years ago
Siegfried Pammer
63ca748b9a
Fix #2283 : string.to.int instruction entails a conversion to string of the input value
6 years ago
Daniel Grunwald
54231edb4b
Fix #2189 : Invalid C# generated when pinning an unmanaged pointer.
...
C# has some special rules for allowed expressions inside a fixed statement.
In the non-allowed cases, emit an `Unsafe.AsRef()` call to prevent compiler errors.
6 years ago
Siegfried Pammer
b7d2eec41d
#2199 : Add support for VB cached delegate initialization
6 years ago
Siegfried Pammer
d3b0e4cd72
Fix #2196 : Add support for extern local functions.
6 years ago
Siegfried Pammer
4e07c952ab
Fix #2195 : foreach loop conversion accidentally removes end container label.
6 years ago
Siegfried Pammer
e7cb27a134
Fix #2182 : Ensure that all labels generated by StatementBuilder are unique.
6 years ago
Siegfried Pammer
813cd1842f
#2156 : Enforce string type of string.to.int argument.
6 years ago
Siegfried Pammer
13636c89cc
Add support for C# 9: foreach with GetEnumerator extension methods.
6 years ago
dotnet format
0d9f871a4f
#2128 : Reformat the whole code base.
6 years ago
Siegfried Pammer
562699fc94
Add support for C# 8.0 await foreach
6 years ago
Siegfried Pammer
b1b49b5a56
Fix bugs in foreach deconstruction and deconstruction declaration, if the same variable is used multiple times.
6 years ago
Siegfried Pammer
3390d3849d
Added support for `var (a, b, _) = ...;` syntax in deconstruction.
6 years ago
Siegfried Pammer
dab70964a5
Add support for C# 8.0 disposable ref structs
6 years ago
Siegfried Pammer
c9f5e5dd33
Refactor ForeachStatement to support deconstruction
6 years ago
Daniel Grunwald
abb9d49a0f
Add support for C# 8 switch expressions.
6 years ago
Siegfried Pammer
18ace00266
Refactor LocalFunctionDeclarationStatement + LocalFunctionMethod
6 years ago
Daniel Grunwald
35c405b973
Translate the initializer of a `fixed` statement as managed reference and only apply the ref-to-pointer conversion at the end.
...
This way we create compilable code when the pinned variable type does not match the initializer type.
6 years ago
Siegfried Pammer
9f0ca09e56
Fix #2033 : Wrong place for variable declaration.
6 years ago
Siegfried Pammer
8925b4ff7b
Inline variable declarations/modernize parts of our code base.
6 years ago
Siegfried Pammer
ba5c645257
Add TryCatchHandler annotation to CatchClause
6 years ago
Siegfried Pammer
e748e71b56
Implement workaround for #1961
6 years ago
Siegfried Pammer
5d622056a1
Add TranslatedStatement: require that C# statements must be annotated with their corresponding ILInstructions.
6 years ago
Siegfried Pammer
b953d6e8d0
Fix potential NRE in StatementBuilder.TryCatch
7 years ago
Siegfried Pammer
9e89384916
Make NumberOfCompilerGeneratedGenerics immutable and rename to NumberOfCompilerGeneratedTypeParameters
7 years ago
Daniel Grunwald
eb2a9e6b94
#1852 : Rename array.to.pointer opcode to get.pinnable.reference.
7 years ago
SilverFox
5e6fecebf5
Rework support for generic local function, and fix tests `LocalFunctions.Generic.Test_CaptureT` and `LocalFunctions.Generic.TestGenericArgs`
7 years ago
SilverFox
6409fe945c
Add support for static local function
7 years ago
SilverFox
f039705704
Add support for generic local function
7 years ago
Siegfried Pammer
64b9511aca
#1749 : Represent multi-instruction BlockContainers in expression-context as inlined delegate invocation.
7 years ago
David Wengier
e30e08a59d
The resource expression is always needed regardless of the setting.
7 years ago