diff --git a/ICSharpCode.Decompiler.Tests/CorrectnessTestRunner.cs b/ICSharpCode.Decompiler.Tests/CorrectnessTestRunner.cs
index 50c666f38..3a4304115 100644
--- a/ICSharpCode.Decompiler.Tests/CorrectnessTestRunner.cs
+++ b/ICSharpCode.Decompiler.Tests/CorrectnessTestRunner.cs
@@ -57,6 +57,8 @@ namespace ICSharpCode.Decompiler.Tests
CompilerOptions.Optimize | CompilerOptions.UseRoslyn1_3_2,
CompilerOptions.UseRoslyn2_10_0,
CompilerOptions.Optimize | CompilerOptions.UseRoslyn2_10_0,
+ CompilerOptions.UseRoslyn3_11_0,
+ CompilerOptions.Optimize | CompilerOptions.UseRoslyn3_11_0,
CompilerOptions.UseRoslynLatest,
CompilerOptions.Optimize | CompilerOptions.UseRoslynLatest,
};
@@ -69,6 +71,8 @@ namespace ICSharpCode.Decompiler.Tests
CompilerOptions.Optimize | CompilerOptions.UseRoslyn1_3_2,
CompilerOptions.UseRoslyn2_10_0,
CompilerOptions.Optimize | CompilerOptions.UseRoslyn2_10_0,
+ CompilerOptions.UseRoslyn3_11_0,
+ CompilerOptions.Optimize | CompilerOptions.UseRoslyn3_11_0,
CompilerOptions.UseRoslynLatest,
CompilerOptions.Optimize | CompilerOptions.UseRoslynLatest,
CompilerOptions.UseMcs,
@@ -81,6 +85,8 @@ namespace ICSharpCode.Decompiler.Tests
CompilerOptions.Optimize | CompilerOptions.UseRoslyn1_3_2,
CompilerOptions.UseRoslyn2_10_0,
CompilerOptions.Optimize | CompilerOptions.UseRoslyn2_10_0,
+ CompilerOptions.UseRoslyn3_11_0,
+ CompilerOptions.Optimize | CompilerOptions.UseRoslyn3_11_0,
CompilerOptions.UseRoslynLatest,
CompilerOptions.Optimize | CompilerOptions.UseRoslynLatest,
};
@@ -89,6 +95,8 @@ namespace ICSharpCode.Decompiler.Tests
{
CompilerOptions.UseRoslyn2_10_0,
CompilerOptions.Optimize | CompilerOptions.UseRoslyn2_10_0,
+ CompilerOptions.UseRoslyn3_11_0,
+ CompilerOptions.Optimize | CompilerOptions.UseRoslyn3_11_0,
CompilerOptions.UseRoslynLatest,
CompilerOptions.Optimize | CompilerOptions.UseRoslynLatest,
};
diff --git a/ICSharpCode.Decompiler.Tests/Helpers/Tester.VB.cs b/ICSharpCode.Decompiler.Tests/Helpers/Tester.VB.cs
index 9dde0d530..24c363e7d 100644
--- a/ICSharpCode.Decompiler.Tests/Helpers/Tester.VB.cs
+++ b/ICSharpCode.Decompiler.Tests/Helpers/Tester.VB.cs
@@ -49,6 +49,7 @@ namespace ICSharpCode.Decompiler.Tests.Helpers
0 => ("legacy", "11"),
CompilerOptions.UseRoslyn1_3_2 => ("1.3.2", "14"),
CompilerOptions.UseRoslyn2_10_0 => ("2.10.0", "latest"),
+ CompilerOptions.UseRoslyn3_11_0 => ("3.11.0", "latest"),
_ => (RoslynLatestVersion, flags.HasFlag(CompilerOptions.Preview) ? "preview" : "latest")
};
diff --git a/ICSharpCode.Decompiler.Tests/Helpers/Tester.cs b/ICSharpCode.Decompiler.Tests/Helpers/Tester.cs
index eea0ebd0c..a86b6c0f3 100644
--- a/ICSharpCode.Decompiler.Tests/Helpers/Tester.cs
+++ b/ICSharpCode.Decompiler.Tests/Helpers/Tester.cs
@@ -61,8 +61,9 @@ namespace ICSharpCode.Decompiler.Tests.Helpers
GeneratePdb = 0x100,
Preview = 0x200,
UseRoslyn2_10_0 = 0x400,
- UseRoslynLatest = 0x800,
- UseRoslynMask = UseRoslyn1_3_2 | UseRoslyn2_10_0 | UseRoslynLatest
+ UseRoslyn3_11_0 = 0x800,
+ UseRoslynLatest = 0x1000,
+ UseRoslynMask = UseRoslyn1_3_2 | UseRoslyn2_10_0 | UseRoslyn3_11_0 | UseRoslynLatest
}
[Flags]
@@ -306,23 +307,31 @@ namespace ICSharpCode.Decompiler.Tests.Helpers
preprocessorSymbols.Add("VB11");
preprocessorSymbols.Add("VB14");
if (flags.HasFlag(CompilerOptions.UseRoslyn2_10_0)
+ || flags.HasFlag(CompilerOptions.UseRoslyn3_11_0)
|| flags.HasFlag(CompilerOptions.UseRoslynLatest))
{
preprocessorSymbols.Add("ROSLYN2");
preprocessorSymbols.Add("CS70");
preprocessorSymbols.Add("CS71");
preprocessorSymbols.Add("CS72");
+ preprocessorSymbols.Add("CS73");
preprocessorSymbols.Add("VB15");
}
- if (flags.HasFlag(CompilerOptions.UseRoslynLatest))
+ if (flags.HasFlag(CompilerOptions.UseRoslyn3_11_0)
+ || flags.HasFlag(CompilerOptions.UseRoslynLatest))
{
preprocessorSymbols.Add("ROSLYN3");
- preprocessorSymbols.Add("CS73");
preprocessorSymbols.Add("CS80");
+ preprocessorSymbols.Add("CS90");
preprocessorSymbols.Add("VB16");
+ }
+ if (flags.HasFlag(CompilerOptions.UseRoslynLatest))
+ {
+ preprocessorSymbols.Add("ROSLYN4");
+ preprocessorSymbols.Add("CS100");
if (flags.HasFlag(CompilerOptions.Preview))
{
- preprocessorSymbols.Add("CS90");
+
}
}
}
@@ -361,6 +370,7 @@ namespace ICSharpCode.Decompiler.Tests.Helpers
0 => ("legacy", "5"),
CompilerOptions.UseRoslyn1_3_2 => ("1.3.2", "6"),
CompilerOptions.UseRoslyn2_10_0 => ("2.10.0", "latest"),
+ CompilerOptions.UseRoslyn3_11_0 => ("3.11.0", "latest"),
_ => (RoslynLatestVersion, flags.HasFlag(CompilerOptions.Preview) ? "preview" : "latest")
};
@@ -526,7 +536,8 @@ namespace ICSharpCode.Decompiler.Tests.Helpers
var langVersion = (cscOptions & CompilerOptions.UseRoslynMask) switch {
CompilerOptions.UseRoslyn1_3_2 => CSharp.LanguageVersion.CSharp6,
CompilerOptions.UseRoslyn2_10_0 => CSharp.LanguageVersion.CSharp7_3,
- _ => cscOptions.HasFlag(CompilerOptions.Preview) ? CSharp.LanguageVersion.Latest : CSharp.LanguageVersion.CSharp8_0,
+ CompilerOptions.UseRoslyn3_11_0 => CSharp.LanguageVersion.CSharp9_0,
+ _ => cscOptions.HasFlag(CompilerOptions.Preview) ? CSharp.LanguageVersion.Latest : CSharp.LanguageVersion.CSharp9_0,
};
return new DecompilerSettings(langVersion);
}
@@ -594,6 +605,8 @@ namespace ICSharpCode.Decompiler.Tests.Helpers
suffix += ".roslyn1";
if ((cscOptions & CompilerOptions.UseRoslyn2_10_0) != 0)
suffix += ".roslyn2";
+ if ((cscOptions & CompilerOptions.UseRoslyn3_11_0) != 0)
+ suffix += ".roslyn3";
if ((cscOptions & CompilerOptions.UseRoslynLatest) != 0)
suffix += ".roslyn";
if ((cscOptions & CompilerOptions.UseMcs) != 0)
diff --git a/ICSharpCode.Decompiler.Tests/PrettyTestRunner.cs b/ICSharpCode.Decompiler.Tests/PrettyTestRunner.cs
index e8984124b..4c817a233 100644
--- a/ICSharpCode.Decompiler.Tests/PrettyTestRunner.cs
+++ b/ICSharpCode.Decompiler.Tests/PrettyTestRunner.cs
@@ -63,6 +63,8 @@ namespace ICSharpCode.Decompiler.Tests
CompilerOptions.Optimize | CompilerOptions.UseRoslyn1_3_2,
CompilerOptions.UseRoslyn2_10_0,
CompilerOptions.Optimize | CompilerOptions.UseRoslyn2_10_0,
+ CompilerOptions.UseRoslyn3_11_0,
+ CompilerOptions.Optimize | CompilerOptions.UseRoslyn3_11_0,
CompilerOptions.UseRoslynLatest,
CompilerOptions.Optimize | CompilerOptions.UseRoslynLatest,
};
@@ -71,6 +73,16 @@ namespace ICSharpCode.Decompiler.Tests
{
CompilerOptions.UseRoslyn2_10_0,
CompilerOptions.Optimize | CompilerOptions.UseRoslyn2_10_0,
+ CompilerOptions.UseRoslyn3_11_0,
+ CompilerOptions.Optimize | CompilerOptions.UseRoslyn3_11_0,
+ CompilerOptions.UseRoslynLatest,
+ CompilerOptions.Optimize | CompilerOptions.UseRoslynLatest,
+ };
+
+ static readonly CompilerOptions[] roslyn3OrNewerOptions =
+ {
+ CompilerOptions.UseRoslyn3_11_0,
+ CompilerOptions.Optimize | CompilerOptions.UseRoslyn3_11_0,
CompilerOptions.UseRoslynLatest,
CompilerOptions.Optimize | CompilerOptions.UseRoslynLatest,
};
@@ -83,6 +95,8 @@ namespace ICSharpCode.Decompiler.Tests
static readonly CompilerOptions[] dotnetCoreOnlyOptions =
{
+ CompilerOptions.UseRoslyn3_11_0 | CompilerOptions.ReferenceCore,
+ CompilerOptions.Optimize | CompilerOptions.UseRoslyn3_11_0 | CompilerOptions.ReferenceCore,
CompilerOptions.UseRoslynLatest | CompilerOptions.ReferenceCore,
CompilerOptions.Optimize | CompilerOptions.UseRoslynLatest | CompilerOptions.ReferenceCore,
};
@@ -95,6 +109,8 @@ namespace ICSharpCode.Decompiler.Tests
CompilerOptions.Optimize | CompilerOptions.UseRoslyn1_3_2,
CompilerOptions.UseRoslyn2_10_0,
CompilerOptions.Optimize | CompilerOptions.UseRoslyn2_10_0,
+ CompilerOptions.UseRoslyn3_11_0,
+ CompilerOptions.Optimize | CompilerOptions.UseRoslyn3_11_0,
CompilerOptions.UseRoslynLatest,
CompilerOptions.Optimize | CompilerOptions.UseRoslynLatest,
};
@@ -107,6 +123,8 @@ namespace ICSharpCode.Decompiler.Tests
CompilerOptions.Optimize | CompilerOptions.UseRoslyn1_3_2,
CompilerOptions.UseRoslyn2_10_0,
CompilerOptions.Optimize | CompilerOptions.UseRoslyn2_10_0,
+ CompilerOptions.UseRoslyn3_11_0,
+ CompilerOptions.Optimize | CompilerOptions.UseRoslyn3_11_0,
CompilerOptions.UseRoslynLatest,
CompilerOptions.Optimize | CompilerOptions.UseRoslynLatest,
CompilerOptions.UseMcs,
@@ -123,6 +141,10 @@ namespace ICSharpCode.Decompiler.Tests
[Test]
public void IndexRangeTest([ValueSource(nameof(dotnetCoreOnlyOptions))] CompilerOptions cscOptions)
{
+ if (cscOptions.HasFlag(CompilerOptions.UseRoslynLatest))
+ {
+ Assert.Ignore("See https://github.com/icsharpcode/ILSpy/issues/2540");
+ }
RunForLibrary(cscOptions: cscOptions);
}
@@ -430,7 +452,7 @@ namespace ICSharpCode.Decompiler.Tests
}
[Test]
- public void CS73_StackAllocInitializers([ValueSource(nameof(roslynLatestOnlyOptions))] CompilerOptions cscOptions)
+ public void CS73_StackAllocInitializers([ValueSource(nameof(roslyn3OrNewerOptions))] CompilerOptions cscOptions)
{
RunForLibrary(cscOptions: cscOptions);
}
diff --git a/ICSharpCode.Decompiler.Tests/RoundtripAssembly.cs b/ICSharpCode.Decompiler.Tests/RoundtripAssembly.cs
index a11fab56d..734beebb7 100644
--- a/ICSharpCode.Decompiler.Tests/RoundtripAssembly.cs
+++ b/ICSharpCode.Decompiler.Tests/RoundtripAssembly.cs
@@ -103,17 +103,17 @@ namespace ICSharpCode.Decompiler.Tests
}
[Test]
- [Ignore("Waiting for https://github.com/dotnet/roslyn/issues/45929")]
+ [Ignore("See https://github.com/icsharpcode/ILSpy/issues/2541 - Waiting for https://github.com/dotnet/roslyn/issues/45929")]
public void ExplicitConversions_With_NativeInts()
{
- RunWithOutput("Random Tests\\TestCases", "ExplicitConversions.exe", LanguageVersion.Preview);
+ RunWithOutput("Random Tests\\TestCases", "ExplicitConversions.exe", LanguageVersion.CSharp9_0);
}
[Test]
- [Ignore("Waiting for https://github.com/dotnet/roslyn/issues/45929")]
+ [Ignore("See https://github.com/icsharpcode/ILSpy/issues/2541 - Waiting for https://github.com/dotnet/roslyn/issues/45929")]
public void ExplicitConversions_32_With_NativeInts()
{
- RunWithOutput("Random Tests\\TestCases", "ExplicitConversions_32.exe", LanguageVersion.Preview);
+ RunWithOutput("Random Tests\\TestCases", "ExplicitConversions_32.exe", LanguageVersion.CSharp9_0);
}
[Test]
@@ -123,10 +123,10 @@ namespace ICSharpCode.Decompiler.Tests
}
[Test]
- [Ignore("Waiting for https://github.com/dotnet/roslyn/issues/45929")]
+ [Ignore("See https://github.com/icsharpcode/ILSpy/issues/2541 - Waiting for https://github.com/dotnet/roslyn/issues/45929")]
public void Random_TestCase_1_With_NativeInts()
{
- RunWithOutput("Random Tests\\TestCases", "TestCase-1.exe", LanguageVersion.Preview);
+ RunWithOutput("Random Tests\\TestCases", "TestCase-1.exe", LanguageVersion.CSharp9_0);
}
// Let's limit the roundtrip tests to C# 8.0 for now; because 9.0 is still in preview
diff --git a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/CS73_StackAllocInitializers.cs b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/CS73_StackAllocInitializers.cs
index dd1e0d7c6..d97fa7d14 100644
--- a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/CS73_StackAllocInitializers.cs
+++ b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/CS73_StackAllocInitializers.cs
@@ -193,11 +193,11 @@ namespace ICSharpCode.Decompiler.Tests.TestCases.Pretty
public unsafe string NegativeOffsets(int a, int b, int c)
{
#if OPT
- byte* intPtr = stackalloc byte[12];
- *(int*)intPtr = 1;
- *(int*)(intPtr - 4) = 2;
- *(int*)(intPtr - 8) = 3;
- int* ptr = (int*)intPtr;
+ byte* num = stackalloc byte[12];
+ *(int*)num = 1;
+ *(int*)(num - 4) = 2;
+ *(int*)(num - 8) = 3;
+ int* ptr = (int*)num;
Console.WriteLine(*ptr);
return UsePointer((byte*)ptr);
#else
diff --git a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/InitializerTests.cs b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/InitializerTests.cs
index 93044e83e..63454a416 100644
--- a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/InitializerTests.cs
+++ b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/InitializerTests.cs
@@ -1053,7 +1053,7 @@ namespace ICSharpCode.Decompiler.Tests.TestCases.Pretty.InitializerTests
A = 43
}
}
- }
+ };
}
#endif
diff --git a/ICSharpCode.Decompiler/CSharp/CSharpLanguageVersion.cs b/ICSharpCode.Decompiler/CSharp/CSharpLanguageVersion.cs
index 530f5aa48..375a9de66 100644
--- a/ICSharpCode.Decompiler/CSharp/CSharpLanguageVersion.cs
+++ b/ICSharpCode.Decompiler/CSharp/CSharpLanguageVersion.cs
@@ -1,6 +1,20 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
+// Copyright (c) 2018 Daniel Grunwald
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy of this
+// software and associated documentation files (the "Software"), to deal in the Software
+// without restriction, including without limitation the rights to use, copy, modify, merge,
+// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
+// to whom the Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in all copies or
+// substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
+// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
+// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
+// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
namespace ICSharpCode.Decompiler.CSharp
{
@@ -17,7 +31,9 @@ namespace ICSharpCode.Decompiler.CSharp
CSharp7_2 = 702,
CSharp7_3 = 703,
CSharp8_0 = 800,
- Preview = 900,
+ CSharp9_0 = 900,
+ CSharp10_0 = 1000,
+ Preview = 1000,
Latest = 0x7FFFFFFF
}
}
diff --git a/ICSharpCode.Decompiler/DecompilerSettings.cs b/ICSharpCode.Decompiler/DecompilerSettings.cs
index fc3797092..d564bee88 100644
--- a/ICSharpCode.Decompiler/DecompilerSettings.cs
+++ b/ICSharpCode.Decompiler/DecompilerSettings.cs
@@ -131,7 +131,7 @@ namespace ICSharpCode.Decompiler
ranges = false;
switchExpressions = false;
}
- if (languageVersion < CSharp.LanguageVersion.Preview)
+ if (languageVersion < CSharp.LanguageVersion.CSharp9_0)
{
nativeIntegers = false;
initAccessors = false;
@@ -148,7 +148,7 @@ namespace ICSharpCode.Decompiler
{
if (nativeIntegers || initAccessors || functionPointers || forEachWithGetEnumeratorExtension
|| recordClasses || withExpressions || usePrimaryConstructorSyntax || covariantReturns)
- return CSharp.LanguageVersion.Preview;
+ return CSharp.LanguageVersion.CSharp9_0;
if (nullableReferenceTypes || readOnlyMethods || asyncEnumerator || asyncUsingAndForEachStatement
|| staticLocalFunctions || ranges || switchExpressions)
return CSharp.LanguageVersion.CSharp8_0;
diff --git a/ILSpy/Languages/CSharpLanguage.cs b/ILSpy/Languages/CSharpLanguage.cs
index d05238198..6d0e2d378 100644
--- a/ILSpy/Languages/CSharpLanguage.cs
+++ b/ILSpy/Languages/CSharpLanguage.cs
@@ -111,7 +111,8 @@ namespace ICSharpCode.ILSpy
new LanguageVersion(Decompiler.CSharp.LanguageVersion.CSharp7_2.ToString(), "C# 7.2 / VS 2017.4"),
new LanguageVersion(Decompiler.CSharp.LanguageVersion.CSharp7_3.ToString(), "C# 7.3 / VS 2017.7"),
new LanguageVersion(Decompiler.CSharp.LanguageVersion.CSharp8_0.ToString(), "C# 8.0 / VS 2019"),
- new LanguageVersion(Decompiler.CSharp.LanguageVersion.Preview.ToString(), "C# 9.0 / VS 2019.8"),
+ new LanguageVersion(Decompiler.CSharp.LanguageVersion.CSharp9_0.ToString(), "C# 9.0 / VS 2019.8"),
+ new LanguageVersion(Decompiler.CSharp.LanguageVersion.CSharp10_0.ToString(), "C# 10.0 / VS 2022"),
};
}
return versions;
diff --git a/packages.props b/packages.props
index c6daebed2..3d0af2fa6 100644
--- a/packages.props
+++ b/packages.props
@@ -10,7 +10,7 @@
5.0.0
5.0.1
5.0.0
- 3.11.0-1.final
+ 4.0.0-6.final
0.11.4
6.1.1
2.6.1