Skip to content

Commit f943aff

Browse files
Add CompilerOptions.UseRoslyn4_14_0
1 parent 5e05d60 commit f943aff

File tree

8 files changed

+109
-22
lines changed

8 files changed

+109
-22
lines changed

ICSharpCode.Decompiler.Tests/CorrectnessTestRunner.cs

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ public void AllFilesHaveTests()
5858
CompilerOptions.Optimize | CompilerOptions.UseRoslyn2_10_0 | CompilerOptions.TargetNet40,
5959
CompilerOptions.UseRoslyn3_11_0 | CompilerOptions.TargetNet40,
6060
CompilerOptions.Optimize | CompilerOptions.UseRoslyn3_11_0 | CompilerOptions.TargetNet40,
61+
CompilerOptions.UseRoslyn4_14_0 | CompilerOptions.TargetNet40,
62+
CompilerOptions.Optimize | CompilerOptions.UseRoslyn4_14_0 | CompilerOptions.TargetNet40,
6163
CompilerOptions.UseRoslynLatest | CompilerOptions.TargetNet40,
6264
CompilerOptions.Optimize | CompilerOptions.UseRoslynLatest | CompilerOptions.TargetNet40,
6365
CompilerOptions.UseRoslyn1_3_2,
@@ -66,6 +68,8 @@ public void AllFilesHaveTests()
6668
CompilerOptions.Optimize | CompilerOptions.UseRoslyn2_10_0,
6769
CompilerOptions.UseRoslyn3_11_0,
6870
CompilerOptions.Optimize | CompilerOptions.UseRoslyn3_11_0,
71+
CompilerOptions.UseRoslyn4_14_0,
72+
CompilerOptions.Optimize | CompilerOptions.UseRoslyn4_14_0,
6973
CompilerOptions.UseRoslynLatest,
7074
CompilerOptions.Optimize | CompilerOptions.UseRoslynLatest,
7175
};
@@ -80,8 +84,10 @@ public void AllFilesHaveTests()
8084
CompilerOptions.Optimize | CompilerOptions.UseRoslyn2_10_0 | CompilerOptions.TargetNet40,
8185
CompilerOptions.UseRoslyn3_11_0 | CompilerOptions.TargetNet40,
8286
CompilerOptions.Optimize | CompilerOptions.UseRoslyn3_11_0 | CompilerOptions.TargetNet40,
87+
CompilerOptions.UseRoslyn4_14_0 | CompilerOptions.TargetNet40,
88+
CompilerOptions.Optimize | CompilerOptions.UseRoslyn4_14_0 | CompilerOptions.TargetNet40,
8389
CompilerOptions.UseRoslynLatest | CompilerOptions.TargetNet40,
84-
CompilerOptions.Optimize | CompilerOptions.UseRoslynLatest | CompilerOptions.TargetNet40
90+
CompilerOptions.Optimize | CompilerOptions.UseRoslynLatest | CompilerOptions.TargetNet40,
8591
};
8692

8793
static readonly CompilerOptions[] defaultOptions =
@@ -94,6 +100,8 @@ public void AllFilesHaveTests()
94100
CompilerOptions.Optimize | CompilerOptions.UseRoslyn2_10_0 | CompilerOptions.TargetNet40,
95101
CompilerOptions.UseRoslyn3_11_0 | CompilerOptions.TargetNet40,
96102
CompilerOptions.Optimize | CompilerOptions.UseRoslyn3_11_0 | CompilerOptions.TargetNet40,
103+
CompilerOptions.UseRoslyn4_14_0 | CompilerOptions.TargetNet40,
104+
CompilerOptions.Optimize | CompilerOptions.UseRoslyn4_14_0 | CompilerOptions.TargetNet40,
97105
CompilerOptions.UseRoslynLatest | CompilerOptions.TargetNet40,
98106
CompilerOptions.Optimize | CompilerOptions.UseRoslynLatest | CompilerOptions.TargetNet40,
99107
CompilerOptions.UseRoslyn1_3_2,
@@ -102,6 +110,8 @@ public void AllFilesHaveTests()
102110
CompilerOptions.Optimize | CompilerOptions.UseRoslyn2_10_0,
103111
CompilerOptions.UseRoslyn3_11_0,
104112
CompilerOptions.Optimize | CompilerOptions.UseRoslyn3_11_0,
113+
CompilerOptions.UseRoslyn4_14_0,
114+
CompilerOptions.Optimize | CompilerOptions.UseRoslyn4_14_0,
105115
CompilerOptions.UseRoslynLatest,
106116
CompilerOptions.Optimize | CompilerOptions.UseRoslynLatest,
107117
CompilerOptions.UseMcs2_6_4,
@@ -118,6 +128,8 @@ public void AllFilesHaveTests()
118128
CompilerOptions.Optimize | CompilerOptions.UseRoslyn2_10_0 | CompilerOptions.TargetNet40,
119129
CompilerOptions.UseRoslyn3_11_0 | CompilerOptions.TargetNet40,
120130
CompilerOptions.Optimize | CompilerOptions.UseRoslyn3_11_0 | CompilerOptions.TargetNet40,
131+
CompilerOptions.UseRoslyn4_14_0 | CompilerOptions.TargetNet40,
132+
CompilerOptions.Optimize | CompilerOptions.UseRoslyn4_14_0 | CompilerOptions.TargetNet40,
121133
CompilerOptions.UseRoslynLatest | CompilerOptions.TargetNet40,
122134
CompilerOptions.Optimize | CompilerOptions.UseRoslynLatest | CompilerOptions.TargetNet40,
123135
CompilerOptions.UseRoslyn1_3_2,
@@ -126,6 +138,8 @@ public void AllFilesHaveTests()
126138
CompilerOptions.Optimize | CompilerOptions.UseRoslyn2_10_0,
127139
CompilerOptions.UseRoslyn3_11_0,
128140
CompilerOptions.Optimize | CompilerOptions.UseRoslyn3_11_0,
141+
CompilerOptions.UseRoslyn4_14_0,
142+
CompilerOptions.Optimize | CompilerOptions.UseRoslyn4_14_0,
129143
CompilerOptions.UseRoslynLatest,
130144
CompilerOptions.Optimize | CompilerOptions.UseRoslynLatest,
131145
};
@@ -136,20 +150,16 @@ public void AllFilesHaveTests()
136150
CompilerOptions.Optimize | CompilerOptions.UseRoslyn2_10_0 | CompilerOptions.TargetNet40,
137151
CompilerOptions.UseRoslyn3_11_0 | CompilerOptions.TargetNet40,
138152
CompilerOptions.Optimize | CompilerOptions.UseRoslyn3_11_0 | CompilerOptions.TargetNet40,
153+
CompilerOptions.UseRoslyn4_14_0 | CompilerOptions.TargetNet40,
154+
CompilerOptions.Optimize | CompilerOptions.UseRoslyn4_14_0 | CompilerOptions.TargetNet40,
139155
CompilerOptions.UseRoslynLatest | CompilerOptions.TargetNet40,
140156
CompilerOptions.Optimize | CompilerOptions.UseRoslynLatest | CompilerOptions.TargetNet40,
141157
CompilerOptions.UseRoslyn2_10_0,
142158
CompilerOptions.Optimize | CompilerOptions.UseRoslyn2_10_0,
143159
CompilerOptions.UseRoslyn3_11_0,
144160
CompilerOptions.Optimize | CompilerOptions.UseRoslyn3_11_0,
145-
CompilerOptions.UseRoslynLatest,
146-
CompilerOptions.Optimize | CompilerOptions.UseRoslynLatest,
147-
};
148-
149-
static readonly CompilerOptions[] roslynLatestOnlyOptions =
150-
{
151-
CompilerOptions.UseRoslynLatest | CompilerOptions.TargetNet40,
152-
CompilerOptions.Optimize | CompilerOptions.UseRoslynLatest | CompilerOptions.TargetNet40,
161+
CompilerOptions.UseRoslyn4_14_0,
162+
CompilerOptions.Optimize | CompilerOptions.UseRoslyn4_14_0,
153163
CompilerOptions.UseRoslynLatest,
154164
CompilerOptions.Optimize | CompilerOptions.UseRoslynLatest,
155165
};

ICSharpCode.Decompiler.Tests/Helpers/RoslynToolset.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -166,9 +166,9 @@ string GetCompiler(string compiler, string version)
166166

167167
internal static string SanitizeVersion(string version)
168168
{
169-
int index = version.IndexOf("-");
169+
int index = version.IndexOf('-');
170170
if (index > 0)
171-
return version.Remove(index);
171+
return version[..index];
172172
return version;
173173
}
174174
}

ICSharpCode.Decompiler.Tests/Helpers/Tester.cs

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,10 @@ public enum CompilerOptions
7272
ReferenceUnsafe = 0x10000,
7373
CheckForOverflowUnderflow = 0x20000,
7474
ProcessXmlDoc = 0x40000,
75+
EnableRuntimeAsync = 0x80000,
76+
UseRoslyn4_14_0 = 0x100000,
7577
UseMcsMask = UseMcs2_6_4 | UseMcs5_23,
76-
UseRoslynMask = UseRoslyn1_3_2 | UseRoslyn2_10_0 | UseRoslyn3_11_0 | UseRoslynLatest
78+
UseRoslynMask = UseRoslyn1_3_2 | UseRoslyn2_10_0 | UseRoslyn3_11_0 | UseRoslyn4_14_0 | UseRoslynLatest
7779
}
7880

7981
[Flags]
@@ -135,11 +137,12 @@ internal static async Task Initialize()
135137
await roslynToolset.Fetch("1.3.2", "Microsoft.Net.Compilers", "tools").ConfigureAwait(false);
136138
await roslynToolset.Fetch("2.10.0", "Microsoft.Net.Compilers", "tools").ConfigureAwait(false);
137139
await roslynToolset.Fetch("3.11.0").ConfigureAwait(false);
140+
await roslynToolset.Fetch("4.14.0").ConfigureAwait(false);
138141
await roslynToolset.Fetch(roslynLatestVersion).ConfigureAwait(false);
139142

140143
await vswhereToolset.Fetch().ConfigureAwait(false);
141144
await RefAssembliesToolset.Fetch("5.0.0", sourcePath: "ref/net5.0").ConfigureAwait(false);
142-
await RefAssembliesToolset.Fetch("10.0.0", sourcePath: "ref/net10.0").ConfigureAwait(false);
145+
await RefAssembliesToolset.Fetch("9.0.0", sourcePath: "ref/net9.0").ConfigureAwait(false);
143146
await RefAssembliesToolset.Fetch(CurrentNetCoreRefAsmVersion, sourcePath: $"ref/net{CurrentNetCoreVersion}").ConfigureAwait(false);
144147

145148
#if DEBUG
@@ -347,6 +350,7 @@ private static string ReplacePrivImplDetails(string il)
347350

348351
static readonly Dictionary<string, Lazy<string>> targetFrameworkAttributeSnippetFiles = new() {
349352
{ CurrentNetCoreAppVersion, new Lazy<string>(() => GetTargetFrameworkAttributeSnippetFile(CurrentNetCoreAppVersion)) },
353+
{ ".NETCoreApp,Version=v9.0", new Lazy<string>(() => GetTargetFrameworkAttributeSnippetFile(".NETCoreApp,Version=v9.0")) },
350354
{ ".NETCoreApp,Version=v5.0", new Lazy<string>(() => GetTargetFrameworkAttributeSnippetFile(".NETCoreApp,Version=v5.0")) },
351355
{ ".NETCoreApp,Version=v2.2", new Lazy<string>(() => GetTargetFrameworkAttributeSnippetFile(".NETCoreApp,Version=v2.2")) },
352356
};
@@ -429,6 +433,7 @@ public static List<string> GetPreprocessorSymbols(CompilerOptions flags)
429433
preprocessorSymbols.Add("VB14");
430434
if (flags.HasFlag(CompilerOptions.UseRoslyn2_10_0)
431435
|| flags.HasFlag(CompilerOptions.UseRoslyn3_11_0)
436+
|| flags.HasFlag(CompilerOptions.UseRoslyn4_14_0)
432437
|| flags.HasFlag(CompilerOptions.UseRoslynLatest))
433438
{
434439
preprocessorSymbols.Add("ROSLYN2");
@@ -439,6 +444,7 @@ public static List<string> GetPreprocessorSymbols(CompilerOptions flags)
439444
preprocessorSymbols.Add("VB15");
440445
}
441446
if (flags.HasFlag(CompilerOptions.UseRoslyn3_11_0)
447+
|| flags.HasFlag(CompilerOptions.UseRoslyn4_14_0)
442448
|| flags.HasFlag(CompilerOptions.UseRoslynLatest))
443449
{
444450
if (!flags.HasFlag(CompilerOptions.TargetNet40))
@@ -450,22 +456,30 @@ public static List<string> GetPreprocessorSymbols(CompilerOptions flags)
450456
preprocessorSymbols.Add("CS90");
451457
preprocessorSymbols.Add("VB16");
452458
}
453-
if (flags.HasFlag(CompilerOptions.UseRoslynLatest))
459+
if (flags.HasFlag(CompilerOptions.UseRoslyn4_14_0)
460+
|| flags.HasFlag(CompilerOptions.UseRoslynLatest))
454461
{
455462
if (!flags.HasFlag(CompilerOptions.TargetNet40))
456463
{
457464
preprocessorSymbols.Add("NET60");
458465
preprocessorSymbols.Add("NET70");
459466
preprocessorSymbols.Add("NET80");
460467
preprocessorSymbols.Add("NET90");
461-
preprocessorSymbols.Add("NET100");
462-
preprocessorSymbols.Add("NET110");
463468
}
464469
preprocessorSymbols.Add("ROSLYN4");
465470
preprocessorSymbols.Add("CS100");
466471
preprocessorSymbols.Add("CS110");
467472
preprocessorSymbols.Add("CS120");
468473
preprocessorSymbols.Add("CS130");
474+
}
475+
if (flags.HasFlag(CompilerOptions.UseRoslynLatest))
476+
{
477+
if (!flags.HasFlag(CompilerOptions.TargetNet40))
478+
{
479+
preprocessorSymbols.Add("NET100");
480+
preprocessorSymbols.Add("NET110");
481+
}
482+
preprocessorSymbols.Add("ROSLYN5");
469483
preprocessorSymbols.Add("CS140");
470484
preprocessorSymbols.Add("CS150");
471485
}
@@ -528,6 +542,7 @@ public static async Task<CompilerResults> CompileCSharp(string sourceFileName, C
528542
CompilerOptions.UseRoslyn1_3_2 => ("1.3.2", "6", null),
529543
CompilerOptions.UseRoslyn2_10_0 => ("2.10.0", "latest", targetNet40 ? null : ".NETCoreApp,Version=v2.2"),
530544
CompilerOptions.UseRoslyn3_11_0 => ("3.11.0", "latest", targetNet40 ? null : ".NETCoreApp,Version=v5.0"),
545+
CompilerOptions.UseRoslyn4_14_0 => ("4.14.0", "latest", targetNet40 ? null : ".NETCoreApp,Version=v9.0"),
531546
_ => (roslynLatestVersion, flags.HasFlag(CompilerOptions.Preview) ? "preview" : "latest", targetNet40 ? null : CurrentNetCoreAppVersion)
532547
};
533548

@@ -591,13 +606,18 @@ public static async Task<CompilerResults> CompileCSharp(string sourceFileName, C
591606
if (roslynVersion != "legacy")
592607
{
593608
otherOptions += "/shared ";
594-
if (!targetNet40 && Version.Parse(RoslynToolset.SanitizeVersion(roslynVersion)).Major > 2)
609+
var version = Version.Parse(RoslynToolset.SanitizeVersion(roslynVersion));
610+
if (!targetNet40 && version.Major > 2)
595611
{
596612
if (flags.HasFlag(CompilerOptions.NullableEnable))
597613
otherOptions += "/nullable+ ";
598614
else
599615
otherOptions += "/nullable- ";
600616
}
617+
if (!targetNet40 && roslynVersion == roslynLatestVersion && flags.HasFlag(CompilerOptions.EnableRuntimeAsync))
618+
{
619+
otherOptions += "/features:runtime-async=on ";
620+
}
601621
}
602622

603623
if (flags.HasFlag(CompilerOptions.Library))
@@ -743,6 +763,7 @@ internal static DecompilerSettings GetSettings(CompilerOptions cscOptions)
743763
CompilerOptions.UseRoslyn1_3_2 => CSharp.LanguageVersion.CSharp6,
744764
CompilerOptions.UseRoslyn2_10_0 => CSharp.LanguageVersion.CSharp7_3,
745765
CompilerOptions.UseRoslyn3_11_0 => CSharp.LanguageVersion.CSharp9_0,
766+
CompilerOptions.UseRoslyn4_14_0 => CSharp.LanguageVersion.CSharp13_0,
746767
_ => cscOptions.HasFlag(CompilerOptions.Preview) ? CSharp.LanguageVersion.Latest : CSharp.LanguageVersion.CSharp14_0,
747768
};
748769
DecompilerSettings settings = new(langVersion) {
@@ -819,6 +840,8 @@ internal static string GetSuffix(CompilerOptions cscOptions)
819840
suffix += ".roslyn2";
820841
if ((cscOptions & CompilerOptions.UseRoslyn3_11_0) != 0)
821842
suffix += ".roslyn3";
843+
if ((cscOptions & CompilerOptions.UseRoslyn4_14_0) != 0)
844+
suffix += ".roslyn4";
822845
if ((cscOptions & CompilerOptions.UseRoslynLatest) != 0)
823846
suffix += ".roslyn";
824847
if ((cscOptions & CompilerOptions.UseMcs2_6_4) != 0)

0 commit comments

Comments
 (0)