diff --git a/.gitignore b/.gitignore
index fb7d69711..319f85b7f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -12,6 +12,8 @@ _ReSharper*/
.vs/
/ILSpy.AddIn/Packages/*
/ILSpy.AddIn/source.extension.vsixmanifest
+/ICSharpCode.Decompiler.Tests/TestCases/Disassembler/Pretty/*.dll
+/ICSharpCode.Decompiler.Tests/TestCases/Disassembler/Pretty/*.result.il
/ICSharpCode.Decompiler.Tests/TestCases/Correctness/*.exe
/ICSharpCode.Decompiler.Tests/TestCases/Correctness/*.exe.config
/ICSharpCode.Decompiler/ICSharpCode.Decompiler.nuspec
diff --git a/ICSharpCode.Decompiler.PdbProvider.Cecil/ICSharpCode.Decompiler.PdbProvider.Cecil.csproj b/ICSharpCode.Decompiler.PdbProvider.Cecil/ICSharpCode.Decompiler.PdbProvider.Cecil.csproj
index c545c43a9..0b0a2724e 100644
--- a/ICSharpCode.Decompiler.PdbProvider.Cecil/ICSharpCode.Decompiler.PdbProvider.Cecil.csproj
+++ b/ICSharpCode.Decompiler.PdbProvider.Cecil/ICSharpCode.Decompiler.PdbProvider.Cecil.csproj
@@ -7,7 +7,7 @@
-
+
diff --git a/ICSharpCode.Decompiler.Tests/CorrectnessTestRunner.cs b/ICSharpCode.Decompiler.Tests/CorrectnessTestRunner.cs
index ad3399bf9..58edfd007 100644
--- a/ICSharpCode.Decompiler.Tests/CorrectnessTestRunner.cs
+++ b/ICSharpCode.Decompiler.Tests/CorrectnessTestRunner.cs
@@ -46,152 +46,158 @@ namespace ICSharpCode.Decompiler.Tests
}
}
- static readonly CSharpCompilerOptions[] noMonoOptions =
+ static readonly CompilerOptions[] noMonoOptions =
{
- CSharpCompilerOptions.None,
- CSharpCompilerOptions.Optimize,
- CSharpCompilerOptions.UseRoslyn,
- CSharpCompilerOptions.Optimize | CSharpCompilerOptions.UseRoslyn,
+ CompilerOptions.None,
+ CompilerOptions.Optimize,
+ CompilerOptions.UseRoslyn,
+ CompilerOptions.Optimize | CompilerOptions.UseRoslyn,
};
- static readonly CSharpCompilerOptions[] defaultOptions =
+ static readonly CompilerOptions[] defaultOptions =
{
- CSharpCompilerOptions.None,
- CSharpCompilerOptions.Optimize,
- CSharpCompilerOptions.UseRoslyn,
- CSharpCompilerOptions.Optimize | CSharpCompilerOptions.UseRoslyn,
- CSharpCompilerOptions.UseMcs,
- CSharpCompilerOptions.Optimize | CSharpCompilerOptions.UseMcs
+ CompilerOptions.None,
+ CompilerOptions.Optimize,
+ CompilerOptions.UseRoslyn,
+ CompilerOptions.Optimize | CompilerOptions.UseRoslyn,
+ CompilerOptions.UseMcs,
+ CompilerOptions.Optimize | CompilerOptions.UseMcs
};
- static readonly CSharpCompilerOptions[] roslynOnlyOptions =
+ static readonly CompilerOptions[] roslynOnlyOptions =
{
- CSharpCompilerOptions.UseRoslyn,
- CSharpCompilerOptions.Optimize | CSharpCompilerOptions.UseRoslyn
+ CompilerOptions.UseRoslyn,
+ CompilerOptions.Optimize | CompilerOptions.UseRoslyn
};
[Test]
- public void Comparisons([ValueSource("defaultOptions")] CSharpCompilerOptions options)
+ public void Comparisons([ValueSource("defaultOptions")] CompilerOptions options)
{
RunCS(options: options);
}
[Test]
- public void Conversions([ValueSource("defaultOptions")] CSharpCompilerOptions options)
+ public void Conversions([ValueSource("defaultOptions")] CompilerOptions options)
{
RunCS(options: options);
}
[Test]
- public void FloatingPointArithmetic([ValueSource("defaultOptions")] CSharpCompilerOptions options)
+ public void FloatingPointArithmetic([ValueSource("defaultOptions")] CompilerOptions options)
{
RunCS(options: options);
}
[Test]
- public void HelloWorld([ValueSource("defaultOptions")] CSharpCompilerOptions options)
+ public void HelloWorld([ValueSource("defaultOptions")] CompilerOptions options)
{
RunCS(options: options);
}
[Test]
- public void ControlFlow([ValueSource("defaultOptions")] CSharpCompilerOptions options)
+ public void ControlFlow([ValueSource("defaultOptions")] CompilerOptions options)
{
RunCS(options: options);
}
[Test]
- public void CompoundAssignment([ValueSource("defaultOptions")] CSharpCompilerOptions options)
+ public void CompoundAssignment([ValueSource("defaultOptions")] CompilerOptions options)
{
RunCS(options: options);
}
[Test]
- public void PropertiesAndEvents([ValueSource("defaultOptions")] CSharpCompilerOptions options)
+ public void PropertiesAndEvents([ValueSource("defaultOptions")] CompilerOptions options)
{
RunCS(options: options);
}
[Test]
- public void Switch([ValueSource("defaultOptions")] CSharpCompilerOptions options)
+ public void Switch([ValueSource("defaultOptions")] CompilerOptions options)
{
RunCS(options: options);
}
[Test]
- public void Using([ValueSource("defaultOptions")] CSharpCompilerOptions options)
+ public void Using([ValueSource("defaultOptions")] CompilerOptions options)
{
RunCS(options: options);
}
[Test]
- public void Loops([ValueSource("defaultOptions")] CSharpCompilerOptions options)
+ public void Loops([ValueSource("defaultOptions")] CompilerOptions options)
{
RunCS(options: options);
}
[Test]
- public void NullableTests([ValueSource("defaultOptions")] CSharpCompilerOptions options)
+ public void NullableTests([ValueSource("defaultOptions")] CompilerOptions options)
{
RunCS(options: options);
}
[Test]
- public void Generics([ValueSource("defaultOptions")] CSharpCompilerOptions options)
+ public void Generics([ValueSource("defaultOptions")] CompilerOptions options)
{
RunCS(options: options);
}
[Test]
- public void ValueTypeCall([ValueSource("defaultOptions")] CSharpCompilerOptions options)
+ public void ValueTypeCall([ValueSource("defaultOptions")] CompilerOptions options)
{
RunCS(options: options);
}
[Test]
- public void InitializerTests([ValueSource("defaultOptions")] CSharpCompilerOptions options)
+ public void InitializerTests([ValueSource("defaultOptions")] CompilerOptions options)
{
RunCS(options: options);
}
[Test]
- public void DecimalFields([ValueSource("defaultOptions")] CSharpCompilerOptions options)
+ public void DecimalFields([ValueSource("defaultOptions")] CompilerOptions options)
{
RunCS(options: options);
}
[Test]
- public void UndocumentedExpressions([ValueSource("noMonoOptions")] CSharpCompilerOptions options)
+ public void UndocumentedExpressions([ValueSource("noMonoOptions")] CompilerOptions options)
{
RunCS(options: options);
}
[Test]
- public void MemberLookup([ValueSource("defaultOptions")] CSharpCompilerOptions options)
+ public void Uninit([ValueSource("noMonoOptions")] CompilerOptions options)
+ {
+ RunVB(options: options);
+ }
+
+ [Test]
+ public void MemberLookup([ValueSource("defaultOptions")] CompilerOptions options)
{
RunCS(options: options);
}
[Test]
- public void OverloadResolution([ValueSource("defaultOptions")] CSharpCompilerOptions options)
+ public void OverloadResolution([ValueSource("defaultOptions")] CompilerOptions options)
{
RunCS(options: options);
}
[Test]
- public void ExpressionTrees([ValueSource("defaultOptions")] CSharpCompilerOptions options)
+ public void ExpressionTrees([ValueSource("defaultOptions")] CompilerOptions options)
{
RunCS(options: options);
}
[Test]
- public void NullPropagation([ValueSource("roslynOnlyOptions")] CSharpCompilerOptions options)
+ public void NullPropagation([ValueSource("roslynOnlyOptions")] CompilerOptions options)
{
RunCS(options: options);
}
[Test]
- public void RefLocalsAndReturns([ValueSource("roslynOnlyOptions")] CSharpCompilerOptions options)
+ public void RefLocalsAndReturns([ValueSource("roslynOnlyOptions")] CompilerOptions options)
{
RunCS(options: options);
}
@@ -199,10 +205,10 @@ namespace ICSharpCode.Decompiler.Tests
[Test]
public void BitNot([Values(false, true)] bool force32Bit)
{
- CSharpCompilerOptions compiler = CSharpCompilerOptions.UseDebug;
+ CompilerOptions compiler = CompilerOptions.UseDebug;
AssemblerOptions asm = AssemblerOptions.None;
if (force32Bit) {
- compiler |= CSharpCompilerOptions.Force32Bit;
+ compiler |= CompilerOptions.Force32Bit;
asm |= AssemblerOptions.Force32Bit;
}
RunIL("BitNot.il", compiler, asm);
@@ -217,79 +223,79 @@ namespace ICSharpCode.Decompiler.Tests
[Test]
public void StackTypes([Values(false, true)] bool force32Bit)
{
- CSharpCompilerOptions compiler = CSharpCompilerOptions.UseRoslyn | CSharpCompilerOptions.UseDebug;
+ CompilerOptions compiler = CompilerOptions.UseRoslyn | CompilerOptions.UseDebug;
AssemblerOptions asm = AssemblerOptions.None;
if (force32Bit) {
- compiler |= CSharpCompilerOptions.Force32Bit;
+ compiler |= CompilerOptions.Force32Bit;
asm |= AssemblerOptions.Force32Bit;
}
RunIL("StackTypes.il", compiler, asm);
}
[Test]
- public void UnsafeCode([ValueSource("defaultOptions")] CSharpCompilerOptions options)
+ public void UnsafeCode([ValueSource("defaultOptions")] CompilerOptions options)
{
- if (options.HasFlag(CSharpCompilerOptions.UseMcs)) {
+ if (options.HasFlag(CompilerOptions.UseMcs)) {
Assert.Ignore("Decompiler bug with mono!");
}
RunCS(options: options);
}
[Test]
- public void ConditionalAttr([ValueSource("defaultOptions")] CSharpCompilerOptions options)
+ public void ConditionalAttr([ValueSource("defaultOptions")] CompilerOptions options)
{
RunCS(options: options);
}
[Test]
- public void TrickyTypes([ValueSource("defaultOptions")] CSharpCompilerOptions options)
+ public void TrickyTypes([ValueSource("defaultOptions")] CompilerOptions options)
{
RunCS(options: options);
}
[Test]
- public void Capturing([ValueSource("defaultOptions")] CSharpCompilerOptions options)
+ public void Capturing([ValueSource("defaultOptions")] CompilerOptions options)
{
RunCS(options: options);
}
[Test]
- public void YieldReturn([ValueSource("defaultOptions")] CSharpCompilerOptions options)
+ public void YieldReturn([ValueSource("defaultOptions")] CompilerOptions options)
{
- if (options.HasFlag(CSharpCompilerOptions.UseMcs)) {
+ if (options.HasFlag(CompilerOptions.UseMcs)) {
Assert.Ignore("Decompiler bug with mono!");
}
RunCS(options: options);
}
[Test]
- public void Async([ValueSource("noMonoOptions")] CSharpCompilerOptions options)
+ public void Async([ValueSource("noMonoOptions")] CompilerOptions options)
{
RunCS(options: options);
}
[Test]
- public void LINQRaytracer([ValueSource("defaultOptions")] CSharpCompilerOptions options)
+ public void LINQRaytracer([ValueSource("defaultOptions")] CompilerOptions options)
{
RunCS(options: options);
}
[Test]
- public void MiniJSON([ValueSource("defaultOptions")] CSharpCompilerOptions options)
+ public void MiniJSON([ValueSource("defaultOptions")] CompilerOptions options)
{
- if (options.HasFlag(CSharpCompilerOptions.UseMcs)) {
+ if (options.HasFlag(CompilerOptions.UseMcs)) {
Assert.Ignore("Decompiler bug with mono!");
}
RunCS(options: options);
}
[Test]
- public void LocalFunctions([ValueSource(nameof(roslynOnlyOptions))] CSharpCompilerOptions options)
+ public void LocalFunctions([ValueSource(nameof(roslynOnlyOptions))] CompilerOptions options)
{
RunCS(options: options);
}
- void RunCS([CallerMemberName] string testName = null, CSharpCompilerOptions options = CSharpCompilerOptions.UseDebug)
+ void RunCS([CallerMemberName] string testName = null, CompilerOptions options = CompilerOptions.UseDebug)
{
string testFileName = testName + ".cs";
string testOutputFileName = testName + Tester.GetSuffix(options) + ".exe";
@@ -299,12 +305,12 @@ namespace ICSharpCode.Decompiler.Tests
outputFile = Tester.CompileCSharp(Path.Combine(TestCasePath, testFileName), options,
outputFileName: Path.Combine(TestCasePath, testOutputFileName));
string decompiledCodeFile = Tester.DecompileCSharp(outputFile.PathToAssembly, Tester.GetSettings(options));
- if (options.HasFlag(CSharpCompilerOptions.UseMcs)) {
+ if (options.HasFlag(CompilerOptions.UseMcs)) {
// For second pass, use roslyn instead of mcs.
// mcs has some compiler bugs that cause it to not accept ILSpy-generated code,
// for example when there's unreachable code due to other compiler bugs in the first mcs run.
- options &= ~CSharpCompilerOptions.UseMcs;
- options |= CSharpCompilerOptions.UseRoslyn;
+ options &= ~CompilerOptions.UseMcs;
+ options |= CompilerOptions.UseRoslyn;
// Also, add an .exe.config so that we consistently use the .NET 4.x runtime.
File.WriteAllText(outputFile.PathToAssembly + ".config", @"
@@ -327,7 +333,31 @@ namespace ICSharpCode.Decompiler.Tests
}
}
- void RunIL(string testFileName, CSharpCompilerOptions options = CSharpCompilerOptions.UseDebug, AssemblerOptions asmOptions = AssemblerOptions.None)
+ void RunVB([CallerMemberName] string testName = null, CompilerOptions options = CompilerOptions.UseDebug)
+ {
+ string testFileName = testName + ".vb";
+ string testOutputFileName = testName + Tester.GetSuffix(options) + ".exe";
+ CompilerResults outputFile = null, decompiledOutputFile = null;
+
+ try {
+ outputFile = Tester.CompileVB(Path.Combine(TestCasePath, testFileName), options,
+ outputFileName: Path.Combine(TestCasePath, testOutputFileName));
+ string decompiledCodeFile = Tester.DecompileCSharp(outputFile.PathToAssembly, Tester.GetSettings(options));
+ decompiledOutputFile = Tester.CompileCSharp(decompiledCodeFile, options);
+
+ Tester.RunAndCompareOutput(testFileName, outputFile.PathToAssembly, decompiledOutputFile.PathToAssembly, decompiledCodeFile);
+
+ File.Delete(decompiledCodeFile);
+ File.Delete(decompiledOutputFile.PathToAssembly);
+ } finally {
+ if (outputFile != null)
+ outputFile.TempFiles.Delete();
+ if (decompiledOutputFile != null)
+ decompiledOutputFile.TempFiles.Delete();
+ }
+ }
+
+ void RunIL(string testFileName, CompilerOptions options = CompilerOptions.UseDebug, AssemblerOptions asmOptions = AssemblerOptions.None)
{
string outputFile = null;
CompilerResults decompiledOutputFile = null;
diff --git a/ICSharpCode.Decompiler.Tests/Helpers/Tester.VB.cs b/ICSharpCode.Decompiler.Tests/Helpers/Tester.VB.cs
index 8b766f17b..b543842f8 100644
--- a/ICSharpCode.Decompiler.Tests/Helpers/Tester.VB.cs
+++ b/ICSharpCode.Decompiler.Tests/Helpers/Tester.VB.cs
@@ -12,71 +12,26 @@ using Microsoft.VisualBasic;
namespace ICSharpCode.Decompiler.Tests.Helpers
{
- [Flags]
- public enum VBCompilerOptions
- {
- None,
- Optimize = 0x1,
- UseDebug = 0x2,
- Force32Bit = 0x4,
- Library = 0x8,
- UseRoslyn = 0x10,
- }
-
partial class Tester
{
- internal static string GetSuffix(VBCompilerOptions vbcOptions)
- {
- string suffix = "";
- if ((vbcOptions & VBCompilerOptions.Optimize) != 0)
- suffix += ".opt";
- if ((vbcOptions & VBCompilerOptions.Force32Bit) != 0)
- suffix += ".32";
- if ((vbcOptions & VBCompilerOptions.UseDebug) != 0)
- suffix += ".dbg";
- if ((vbcOptions & VBCompilerOptions.UseRoslyn) != 0)
- suffix += ".roslyn";
- return suffix;
- }
-
- public static List> GetPreprocessorSymbols(VBCompilerOptions flags)
- {
- var preprocessorSymbols = new List>();
- if (flags.HasFlag(VBCompilerOptions.UseDebug)) {
- preprocessorSymbols.Add(new KeyValuePair("DEBUG", 1));
- }
- if (flags.HasFlag(VBCompilerOptions.Optimize)) {
- preprocessorSymbols.Add(new KeyValuePair("OPT", 1));
- }
- if (flags.HasFlag(VBCompilerOptions.UseRoslyn)) {
- preprocessorSymbols.Add(new KeyValuePair("ROSLYN", 1));
- preprocessorSymbols.Add(new KeyValuePair("VB11", 1));
- preprocessorSymbols.Add(new KeyValuePair("VB14", 1));
- preprocessorSymbols.Add(new KeyValuePair("VB15", 1));
- } else {
- preprocessorSymbols.Add(new KeyValuePair("LEGACY_VBC", 1));
- }
- return preprocessorSymbols;
- }
-
- public static CompilerResults CompileVB(string sourceFileName, VBCompilerOptions flags = VBCompilerOptions.UseDebug, string outputFileName = null)
+ public static CompilerResults CompileVB(string sourceFileName, CompilerOptions flags = CompilerOptions.UseDebug, string outputFileName = null)
{
List sourceFileNames = new List { sourceFileName };
foreach (Match match in Regex.Matches(File.ReadAllText(sourceFileName), @"#include ""([\w\d./]+)""")) {
sourceFileNames.Add(Path.GetFullPath(Path.Combine(Path.GetDirectoryName(sourceFileName), match.Groups[1].Value)));
}
- var preprocessorSymbols = GetPreprocessorSymbols(flags);
+ var preprocessorSymbols = GetPreprocessorSymbols(flags).Select(symbol => new KeyValuePair(symbol, 1)).ToList();
- if (flags.HasFlag(VBCompilerOptions.UseRoslyn)) {
+ if (flags.HasFlag(CompilerOptions.UseRoslyn)) {
var parseOptions = new VisualBasicParseOptions(preprocessorSymbols: preprocessorSymbols, languageVersion: LanguageVersion.Latest);
var syntaxTrees = sourceFileNames.Select(f => SyntaxFactory.ParseSyntaxTree(File.ReadAllText(f), parseOptions, path: f));
var compilation = VisualBasicCompilation.Create(Path.GetFileNameWithoutExtension(sourceFileName),
syntaxTrees, defaultReferences.Value,
new VisualBasicCompilationOptions(
- flags.HasFlag(VBCompilerOptions.Library) ? OutputKind.DynamicallyLinkedLibrary : OutputKind.ConsoleApplication,
- platform: flags.HasFlag(VBCompilerOptions.Force32Bit) ? Platform.X86 : Platform.AnyCpu,
- optimizationLevel: flags.HasFlag(VBCompilerOptions.Optimize) ? OptimizationLevel.Release : OptimizationLevel.Debug,
+ flags.HasFlag(CompilerOptions.Library) ? OutputKind.DynamicallyLinkedLibrary : OutputKind.ConsoleApplication,
+ platform: flags.HasFlag(CompilerOptions.Force32Bit) ? Platform.X86 : Platform.AnyCpu,
+ optimizationLevel: flags.HasFlag(CompilerOptions.Optimize) ? OptimizationLevel.Release : OptimizationLevel.Debug,
deterministic: true
));
CompilerResults results = new CompilerResults(new TempFileCollection());
@@ -90,15 +45,18 @@ namespace ICSharpCode.Decompiler.Tests.Helpers
throw new Exception(b.ToString());
}
return results;
+ } else if (flags.HasFlag(CompilerOptions.UseMcs)) {
+ throw new NotSupportedException("Cannot use mcs for VB");
} else {
- var provider = new VBCodeProvider(new Dictionary { { "CompilerVersion", "v10.0" } });
+ var provider = new VBCodeProvider(new Dictionary { { "CompilerVersion", "v4.0" } });
CompilerParameters options = new CompilerParameters();
- options.GenerateExecutable = !flags.HasFlag(VBCompilerOptions.Library);
- options.CompilerOptions = "/o" + (flags.HasFlag(VBCompilerOptions.Optimize) ? "+" : "-");
- options.CompilerOptions += (flags.HasFlag(VBCompilerOptions.UseDebug) ? " /debug" : "");
- options.CompilerOptions += (flags.HasFlag(VBCompilerOptions.Force32Bit) ? " /platform:anycpu32bitpreferred" : "");
+ options.GenerateExecutable = !flags.HasFlag(CompilerOptions.Library);
+ options.CompilerOptions = "/o" + (flags.HasFlag(CompilerOptions.Optimize) ? "+" : "-");
+ options.CompilerOptions += (flags.HasFlag(CompilerOptions.UseDebug) ? " /debug" : "");
+ options.CompilerOptions += (flags.HasFlag(CompilerOptions.Force32Bit) ? " /platform:anycpu32bitpreferred" : "");
+ options.CompilerOptions += "/optioninfer+ /optionexplicit+";
if (preprocessorSymbols.Count > 0) {
- options.CompilerOptions += " /d:" + string.Join(";", preprocessorSymbols);
+ options.CompilerOptions += " /d:" + string.Join(",", preprocessorSymbols.Select(p => $"{p.Key}={p.Value}"));
}
if (outputFileName != null) {
options.OutputAssembly = outputFileName;
@@ -107,6 +65,7 @@ namespace ICSharpCode.Decompiler.Tests.Helpers
options.ReferencedAssemblies.Add("System.dll");
options.ReferencedAssemblies.Add("System.Core.dll");
options.ReferencedAssemblies.Add("System.Xml.dll");
+ options.ReferencedAssemblies.Add("Microsoft.VisualBasic.dll");
CompilerResults results = provider.CompileAssemblyFromFile(options, sourceFileNames.ToArray());
if (results.Errors.Cast().Any(e => !e.IsWarning)) {
StringBuilder b = new StringBuilder("Compiler error:");
@@ -118,6 +77,5 @@ namespace ICSharpCode.Decompiler.Tests.Helpers
return results;
}
}
-
}
}
diff --git a/ICSharpCode.Decompiler.Tests/Helpers/Tester.cs b/ICSharpCode.Decompiler.Tests/Helpers/Tester.cs
index 399e399ae..ace9d1ef9 100644
--- a/ICSharpCode.Decompiler.Tests/Helpers/Tester.cs
+++ b/ICSharpCode.Decompiler.Tests/Helpers/Tester.cs
@@ -42,7 +42,7 @@ using NUnit.Framework;
namespace ICSharpCode.Decompiler.Tests.Helpers
{
[Flags]
- public enum CSharpCompilerOptions
+ public enum CompilerOptions
{
None,
Optimize = 0x1,
@@ -189,36 +189,41 @@ namespace ICSharpCode.Decompiler.Tests.Helpers
MetadataReference.CreateFromFile(Path.Combine(refAsmPath, @"Facades\System.Runtime.dll")),
MetadataReference.CreateFromFile(Path.Combine(refAsmPath, "System.Xml.dll")),
MetadataReference.CreateFromFile(Path.Combine(refAsmPath, "Microsoft.CSharp.dll")),
+ MetadataReference.CreateFromFile(Path.Combine(refAsmPath, "Microsoft.VisualBasic.dll")),
MetadataReference.CreateFromFile(typeof(ValueTuple).Assembly.Location),
MetadataReference.CreateFromFile(typeof(Span<>).Assembly.Location),
};
});
-
- public static List GetPreprocessorSymbols(CSharpCompilerOptions flags)
+ public static List GetPreprocessorSymbols(CompilerOptions flags)
{
var preprocessorSymbols = new List();
- if (flags.HasFlag(CSharpCompilerOptions.UseDebug)) {
+ if (flags.HasFlag(CompilerOptions.UseDebug)) {
preprocessorSymbols.Add("DEBUG");
}
- if (flags.HasFlag(CSharpCompilerOptions.Optimize)) {
+ if (flags.HasFlag(CompilerOptions.Optimize)) {
preprocessorSymbols.Add("OPT");
}
- if (flags.HasFlag(CSharpCompilerOptions.UseRoslyn)) {
+ if (flags.HasFlag(CompilerOptions.UseRoslyn)) {
preprocessorSymbols.Add("ROSLYN");
preprocessorSymbols.Add("CS60");
preprocessorSymbols.Add("CS70");
preprocessorSymbols.Add("CS71");
preprocessorSymbols.Add("CS72");
- } else if (flags.HasFlag(CSharpCompilerOptions.UseMcs)) {
+ preprocessorSymbols.Add("CS73");
+ preprocessorSymbols.Add("VB11");
+ preprocessorSymbols.Add("VB14");
+ preprocessorSymbols.Add("VB15");
+ } else if (flags.HasFlag(CompilerOptions.UseMcs)) {
preprocessorSymbols.Add("MCS");
} else {
preprocessorSymbols.Add("LEGACY_CSC");
+ preprocessorSymbols.Add("LEGACY_VBC");
}
return preprocessorSymbols;
}
- public static CompilerResults CompileCSharp(string sourceFileName, CSharpCompilerOptions flags = CSharpCompilerOptions.UseDebug, string outputFileName = null)
+ public static CompilerResults CompileCSharp(string sourceFileName, CompilerOptions flags = CompilerOptions.UseDebug, string outputFileName = null)
{
List sourceFileNames = new List { sourceFileName };
foreach (Match match in Regex.Matches(File.ReadAllText(sourceFileName), @"#include ""([\w\d./]+)""")) {
@@ -227,15 +232,15 @@ namespace ICSharpCode.Decompiler.Tests.Helpers
var preprocessorSymbols = GetPreprocessorSymbols(flags);
- if (flags.HasFlag(CSharpCompilerOptions.UseRoslyn)) {
+ if (flags.HasFlag(CompilerOptions.UseRoslyn)) {
var parseOptions = new CSharpParseOptions(preprocessorSymbols: preprocessorSymbols.ToArray(), languageVersion: Microsoft.CodeAnalysis.CSharp.LanguageVersion.Latest);
var syntaxTrees = sourceFileNames.Select(f => SyntaxFactory.ParseSyntaxTree(File.ReadAllText(f), parseOptions, path: f));
var compilation = CSharpCompilation.Create(Path.GetFileNameWithoutExtension(sourceFileName),
syntaxTrees, defaultReferences.Value,
new CSharpCompilationOptions(
- flags.HasFlag(CSharpCompilerOptions.Library) ? OutputKind.DynamicallyLinkedLibrary : OutputKind.ConsoleApplication,
- platform: flags.HasFlag(CSharpCompilerOptions.Force32Bit) ? Platform.X86 : Platform.AnyCpu,
- optimizationLevel: flags.HasFlag(CSharpCompilerOptions.Optimize) ? OptimizationLevel.Release : OptimizationLevel.Debug,
+ flags.HasFlag(CompilerOptions.Library) ? OutputKind.DynamicallyLinkedLibrary : OutputKind.ConsoleApplication,
+ platform: flags.HasFlag(CompilerOptions.Force32Bit) ? Platform.X86 : Platform.AnyCpu,
+ optimizationLevel: flags.HasFlag(CompilerOptions.Optimize) ? OptimizationLevel.Release : OptimizationLevel.Debug,
allowUnsafe: true,
deterministic: true
));
@@ -250,7 +255,7 @@ namespace ICSharpCode.Decompiler.Tests.Helpers
throw new Exception(b.ToString());
}
return results;
- } else if (flags.HasFlag(CSharpCompilerOptions.UseMcs)) {
+ } else if (flags.HasFlag(CompilerOptions.UseMcs)) {
CompilerResults results = new CompilerResults(new TempFileCollection());
results.PathToAssembly = outputFileName ?? Path.GetTempFileName();
string testBasePath = RoundtripAssembly.TestDir;
@@ -259,19 +264,19 @@ namespace ICSharpCode.Decompiler.Tests.Helpers
$"git clone https://github.com/icsharpcode/ILSpy-tests \"{testBasePath}\"");
}
string mcsPath = Path.Combine(testBasePath, @"mcs\2.6.4\bin\gmcs.bat");
- string otherOptions = " -unsafe -o" + (flags.HasFlag(CSharpCompilerOptions.Optimize) ? "+ " : "- ");
+ string otherOptions = " -unsafe -o" + (flags.HasFlag(CompilerOptions.Optimize) ? "+ " : "- ");
- if (flags.HasFlag(CSharpCompilerOptions.Library)) {
+ if (flags.HasFlag(CompilerOptions.Library)) {
otherOptions += "-t:library ";
} else {
otherOptions += "-t:exe ";
}
- if (flags.HasFlag(CSharpCompilerOptions.UseDebug)) {
+ if (flags.HasFlag(CompilerOptions.UseDebug)) {
otherOptions += "-g ";
}
- if (flags.HasFlag(CSharpCompilerOptions.Force32Bit)) {
+ if (flags.HasFlag(CompilerOptions.Force32Bit)) {
otherOptions += "-platform:x86 ";
} else {
otherOptions += "-platform:anycpu ";
@@ -303,10 +308,10 @@ namespace ICSharpCode.Decompiler.Tests.Helpers
} else {
var provider = new CSharpCodeProvider(new Dictionary { { "CompilerVersion", "v4.0" } });
CompilerParameters options = new CompilerParameters();
- options.GenerateExecutable = !flags.HasFlag(CSharpCompilerOptions.Library);
- options.CompilerOptions = "/unsafe /o" + (flags.HasFlag(CSharpCompilerOptions.Optimize) ? "+" : "-");
- options.CompilerOptions += (flags.HasFlag(CSharpCompilerOptions.UseDebug) ? " /debug" : "");
- options.CompilerOptions += (flags.HasFlag(CSharpCompilerOptions.Force32Bit) ? " /platform:anycpu32bitpreferred" : "");
+ options.GenerateExecutable = !flags.HasFlag(CompilerOptions.Library);
+ options.CompilerOptions = "/unsafe /o" + (flags.HasFlag(CompilerOptions.Optimize) ? "+" : "-");
+ options.CompilerOptions += (flags.HasFlag(CompilerOptions.UseDebug) ? " /debug" : "");
+ options.CompilerOptions += (flags.HasFlag(CompilerOptions.Force32Bit) ? " /platform:anycpu32bitpreferred" : "");
if (preprocessorSymbols.Count > 0) {
options.CompilerOptions += " /d:" + string.Join(";", preprocessorSymbols);
}
@@ -318,6 +323,7 @@ namespace ICSharpCode.Decompiler.Tests.Helpers
options.ReferencedAssemblies.Add("System.Core.dll");
options.ReferencedAssemblies.Add("System.Xml.dll");
options.ReferencedAssemblies.Add("Microsoft.CSharp.dll");
+ options.ReferencedAssemblies.Add("Microsoft.VisualBasic.dll");
CompilerResults results = provider.CompileAssemblyFromFile(options, sourceFileNames.ToArray());
if (results.Errors.Cast().Any(e => !e.IsWarning)) {
StringBuilder b = new StringBuilder("Compiler error:");
@@ -330,9 +336,9 @@ namespace ICSharpCode.Decompiler.Tests.Helpers
}
}
- internal static DecompilerSettings GetSettings(CSharpCompilerOptions cscOptions)
+ internal static DecompilerSettings GetSettings(CompilerOptions cscOptions)
{
- if (cscOptions.HasFlag(CSharpCompilerOptions.UseRoslyn)) {
+ if (cscOptions.HasFlag(CompilerOptions.UseRoslyn)) {
return new DecompilerSettings(CSharp.LanguageVersion.Latest);
} else {
return new DecompilerSettings(CSharp.LanguageVersion.CSharp5);
@@ -358,18 +364,18 @@ namespace ICSharpCode.Decompiler.Tests.Helpers
return decompiler;
}
- internal static string GetSuffix(CSharpCompilerOptions cscOptions)
+ internal static string GetSuffix(CompilerOptions cscOptions)
{
string suffix = "";
- if ((cscOptions & CSharpCompilerOptions.Optimize) != 0)
+ if ((cscOptions & CompilerOptions.Optimize) != 0)
suffix += ".opt";
- if ((cscOptions & CSharpCompilerOptions.Force32Bit) != 0)
+ if ((cscOptions & CompilerOptions.Force32Bit) != 0)
suffix += ".32";
- if ((cscOptions & CSharpCompilerOptions.UseDebug) != 0)
+ if ((cscOptions & CompilerOptions.UseDebug) != 0)
suffix += ".dbg";
- if ((cscOptions & CSharpCompilerOptions.UseRoslyn) != 0)
+ if ((cscOptions & CompilerOptions.UseRoslyn) != 0)
suffix += ".roslyn";
- if ((cscOptions & CSharpCompilerOptions.UseMcs) != 0)
+ if ((cscOptions & CompilerOptions.UseMcs) != 0)
suffix += ".mcs";
return suffix;
}
diff --git a/ICSharpCode.Decompiler.Tests/ICSharpCode.Decompiler.Tests.csproj b/ICSharpCode.Decompiler.Tests/ICSharpCode.Decompiler.Tests.csproj
index ddb15c1d5..a2852c603 100644
--- a/ICSharpCode.Decompiler.Tests/ICSharpCode.Decompiler.Tests.csproj
+++ b/ICSharpCode.Decompiler.Tests/ICSharpCode.Decompiler.Tests.csproj
@@ -2,7 +2,7 @@
- net46
+ net462
7.3
True
@@ -52,6 +52,7 @@
+
diff --git a/ICSharpCode.Decompiler.Tests/PrettyTestRunner.cs b/ICSharpCode.Decompiler.Tests/PrettyTestRunner.cs
index ed2abf072..269193fc7 100644
--- a/ICSharpCode.Decompiler.Tests/PrettyTestRunner.cs
+++ b/ICSharpCode.Decompiler.Tests/PrettyTestRunner.cs
@@ -47,34 +47,34 @@ namespace ICSharpCode.Decompiler.Tests
}
}
- static readonly CSharpCompilerOptions[] noRoslynOptions =
+ static readonly CompilerOptions[] noRoslynOptions =
{
- CSharpCompilerOptions.None,
- CSharpCompilerOptions.Optimize
+ CompilerOptions.None,
+ CompilerOptions.Optimize
};
- static readonly CSharpCompilerOptions[] roslynOnlyOptions =
+ static readonly CompilerOptions[] roslynOnlyOptions =
{
- CSharpCompilerOptions.UseRoslyn,
- CSharpCompilerOptions.Optimize | CSharpCompilerOptions.UseRoslyn
+ CompilerOptions.UseRoslyn,
+ CompilerOptions.Optimize | CompilerOptions.UseRoslyn
};
- static readonly CSharpCompilerOptions[] defaultOptions =
+ static readonly CompilerOptions[] defaultOptions =
{
- CSharpCompilerOptions.None,
- CSharpCompilerOptions.Optimize,
- CSharpCompilerOptions.UseRoslyn,
- CSharpCompilerOptions.Optimize | CSharpCompilerOptions.UseRoslyn
+ CompilerOptions.None,
+ CompilerOptions.Optimize,
+ CompilerOptions.UseRoslyn,
+ CompilerOptions.Optimize | CompilerOptions.UseRoslyn
};
- static readonly CSharpCompilerOptions[] defaultOptionsWithMcs =
+ static readonly CompilerOptions[] defaultOptionsWithMcs =
{
- CSharpCompilerOptions.None,
- CSharpCompilerOptions.Optimize,
- CSharpCompilerOptions.UseRoslyn,
- CSharpCompilerOptions.Optimize | CSharpCompilerOptions.UseRoslyn,
- CSharpCompilerOptions.UseMcs,
- CSharpCompilerOptions.Optimize | CSharpCompilerOptions.UseMcs
+ CompilerOptions.None,
+ CompilerOptions.Optimize,
+ CompilerOptions.UseRoslyn,
+ CompilerOptions.Optimize | CompilerOptions.UseRoslyn,
+ CompilerOptions.UseMcs,
+ CompilerOptions.Optimize | CompilerOptions.UseMcs
};
[Test]
@@ -85,316 +85,316 @@ namespace ICSharpCode.Decompiler.Tests
}
[Test]
- public void InlineAssignmentTest([ValueSource(nameof(defaultOptions))] CSharpCompilerOptions cscOptions)
+ public void InlineAssignmentTest([ValueSource(nameof(defaultOptions))] CompilerOptions cscOptions)
{
RunForLibrary(cscOptions: cscOptions);
}
[Test]
- public void CompoundAssignmentTest([ValueSource(nameof(defaultOptions))] CSharpCompilerOptions cscOptions)
+ public void CompoundAssignmentTest([ValueSource(nameof(defaultOptions))] CompilerOptions cscOptions)
{
RunForLibrary(cscOptions: cscOptions);
}
[Test]
- public void ShortCircuit([ValueSource(nameof(defaultOptions))] CSharpCompilerOptions cscOptions)
+ public void ShortCircuit([ValueSource(nameof(defaultOptions))] CompilerOptions cscOptions)
{
RunForLibrary(cscOptions: cscOptions);
}
[Test]
- public void CustomShortCircuitOperators([ValueSource(nameof(defaultOptions))] CSharpCompilerOptions cscOptions)
+ public void CustomShortCircuitOperators([ValueSource(nameof(defaultOptions))] CompilerOptions cscOptions)
{
RunForLibrary(cscOptions: cscOptions);
}
[Test]
- public void ExceptionHandling([ValueSource(nameof(defaultOptions))] CSharpCompilerOptions cscOptions)
+ public void ExceptionHandling([ValueSource(nameof(defaultOptions))] CompilerOptions cscOptions)
{
RunForLibrary(cscOptions: cscOptions, decompilerSettings: new DecompilerSettings {
NullPropagation = false,
// legacy csc generates a dead store in debug builds
- RemoveDeadCode = (cscOptions == CSharpCompilerOptions.None)
+ RemoveDeadCode = (cscOptions == CompilerOptions.None)
});
}
[Test]
- public void Switch([ValueSource(nameof(defaultOptions))] CSharpCompilerOptions cscOptions)
+ public void Switch([ValueSource(nameof(defaultOptions))] CompilerOptions cscOptions)
{
RunForLibrary(cscOptions: cscOptions, decompilerSettings: new DecompilerSettings {
// legacy csc generates a dead store in debug builds
- RemoveDeadCode = (cscOptions == CSharpCompilerOptions.None)
+ RemoveDeadCode = (cscOptions == CompilerOptions.None)
});
}
[Test]
- public void ReduceNesting([ValueSource(nameof(defaultOptions))] CSharpCompilerOptions cscOptions)
+ public void ReduceNesting([ValueSource(nameof(defaultOptions))] CompilerOptions cscOptions)
{
RunForLibrary(cscOptions: cscOptions);
}
[Test]
- public void DelegateConstruction([ValueSource(nameof(defaultOptions))] CSharpCompilerOptions cscOptions)
+ public void DelegateConstruction([ValueSource(nameof(defaultOptions))] CompilerOptions cscOptions)
{
RunForLibrary(cscOptions: cscOptions);
}
[Test]
- public void AnonymousTypes([ValueSource(nameof(defaultOptionsWithMcs))] CSharpCompilerOptions cscOptions)
+ public void AnonymousTypes([ValueSource(nameof(defaultOptionsWithMcs))] CompilerOptions cscOptions)
{
RunForLibrary(cscOptions: cscOptions);
}
[Test]
- public void Async([ValueSource(nameof(defaultOptions))] CSharpCompilerOptions cscOptions)
+ public void Async([ValueSource(nameof(defaultOptions))] CompilerOptions cscOptions)
{
RunForLibrary(cscOptions: cscOptions);
}
[Test]
- public void Lock([ValueSource(nameof(defaultOptionsWithMcs))] CSharpCompilerOptions cscOptions)
+ public void Lock([ValueSource(nameof(defaultOptionsWithMcs))] CompilerOptions cscOptions)
{
RunForLibrary(cscOptions: cscOptions);
}
[Test]
- public void Using([ValueSource(nameof(defaultOptions))] CSharpCompilerOptions cscOptions)
+ public void Using([ValueSource(nameof(defaultOptions))] CompilerOptions cscOptions)
{
RunForLibrary(cscOptions: cscOptions);
}
[Test]
- public void LiftedOperators([ValueSource(nameof(defaultOptions))] CSharpCompilerOptions cscOptions)
+ public void LiftedOperators([ValueSource(nameof(defaultOptions))] CompilerOptions cscOptions)
{
RunForLibrary(cscOptions: cscOptions);
}
[Test]
- public void Generics([ValueSource(nameof(defaultOptions))] CSharpCompilerOptions cscOptions)
+ public void Generics([ValueSource(nameof(defaultOptions))] CompilerOptions cscOptions)
{
RunForLibrary(cscOptions: cscOptions);
}
[Test]
- public void Loops([ValueSource(nameof(defaultOptionsWithMcs))] CSharpCompilerOptions cscOptions)
+ public void Loops([ValueSource(nameof(defaultOptionsWithMcs))] CompilerOptions cscOptions)
{
RunForLibrary(cscOptions: cscOptions, decompilerSettings: new DecompilerSettings {
// legacy csc generates a dead store in debug builds
- RemoveDeadCode = (cscOptions == CSharpCompilerOptions.None)
+ RemoveDeadCode = (cscOptions == CompilerOptions.None)
});
}
[Test]
- public void PropertiesAndEvents([ValueSource(nameof(defaultOptions))] CSharpCompilerOptions cscOptions)
+ public void PropertiesAndEvents([ValueSource(nameof(defaultOptions))] CompilerOptions cscOptions)
{
RunForLibrary(cscOptions: cscOptions);
}
[Test]
- public void AutoProperties([ValueSource(nameof(roslynOnlyOptions))] CSharpCompilerOptions cscOptions)
+ public void AutoProperties([ValueSource(nameof(roslynOnlyOptions))] CompilerOptions cscOptions)
{
RunForLibrary(cscOptions: cscOptions);
}
[Test]
- public void QueryExpressions([ValueSource(nameof(defaultOptions))] CSharpCompilerOptions cscOptions)
+ public void QueryExpressions([ValueSource(nameof(defaultOptions))] CompilerOptions cscOptions)
{
RunForLibrary(cscOptions: cscOptions);
}
[Test]
- public void TypeAnalysisTests([ValueSource(nameof(defaultOptions))] CSharpCompilerOptions cscOptions)
+ public void TypeAnalysisTests([ValueSource(nameof(defaultOptions))] CompilerOptions cscOptions)
{
RunForLibrary(cscOptions: cscOptions);
}
[Test]
- public void CheckedUnchecked([ValueSource(nameof(defaultOptions))] CSharpCompilerOptions cscOptions)
+ public void CheckedUnchecked([ValueSource(nameof(defaultOptions))] CompilerOptions cscOptions)
{
RunForLibrary(cscOptions: cscOptions);
}
[Test]
- public void UnsafeCode([ValueSource(nameof(defaultOptions))] CSharpCompilerOptions cscOptions)
+ public void UnsafeCode([ValueSource(nameof(defaultOptions))] CompilerOptions cscOptions)
{
RunForLibrary(cscOptions: cscOptions);
}
[Test]
- public void ConstructorInitializers([ValueSource(nameof(defaultOptionsWithMcs))] CSharpCompilerOptions cscOptions)
+ public void ConstructorInitializers([ValueSource(nameof(defaultOptionsWithMcs))] CompilerOptions cscOptions)
{
RunForLibrary(cscOptions: cscOptions);
}
[Test]
- public void PInvoke([ValueSource(nameof(defaultOptions))] CSharpCompilerOptions cscOptions)
+ public void PInvoke([ValueSource(nameof(defaultOptions))] CompilerOptions cscOptions)
{
// This tests needs our own disassembler; ildasm has a bug with marshalinfo.
RunForLibrary(cscOptions: cscOptions, asmOptions: AssemblerOptions.UseOwnDisassembler);
}
[Test]
- public void InitializerTests([ValueSource(nameof(defaultOptions))] CSharpCompilerOptions cscOptions)
+ public void InitializerTests([ValueSource(nameof(defaultOptions))] CompilerOptions cscOptions)
{
RunForLibrary(cscOptions: cscOptions);
}
[Test]
- public void DynamicTests([ValueSource(nameof(defaultOptions))] CSharpCompilerOptions cscOptions)
+ public void DynamicTests([ValueSource(nameof(defaultOptions))] CompilerOptions cscOptions)
{
RunForLibrary(cscOptions: cscOptions);
}
[Test]
- public void ExpressionTrees([ValueSource(nameof(defaultOptions))] CSharpCompilerOptions cscOptions)
+ public void ExpressionTrees([ValueSource(nameof(defaultOptions))] CompilerOptions cscOptions)
{
RunForLibrary(cscOptions: cscOptions);
}
[Test]
- public void FixProxyCalls([Values(CSharpCompilerOptions.None, CSharpCompilerOptions.Optimize, CSharpCompilerOptions.UseRoslyn)] CSharpCompilerOptions cscOptions)
+ public void FixProxyCalls([Values(CompilerOptions.None, CompilerOptions.Optimize, CompilerOptions.UseRoslyn)] CompilerOptions cscOptions)
{
RunForLibrary(cscOptions: cscOptions);
}
[Test]
- public void VariableNaming([ValueSource(nameof(defaultOptions))] CSharpCompilerOptions cscOptions)
+ public void VariableNaming([ValueSource(nameof(defaultOptions))] CompilerOptions cscOptions)
{
RunForLibrary(cscOptions: cscOptions);
}
[Test]
- public void VariableNamingWithoutSymbols([ValueSource(nameof(defaultOptions))] CSharpCompilerOptions cscOptions)
+ public void VariableNamingWithoutSymbols([ValueSource(nameof(defaultOptions))] CompilerOptions cscOptions)
{
RunForLibrary(cscOptions: cscOptions, decompilerSettings: new DecompilerSettings { UseDebugSymbols = false });
}
[Test]
- public void CS72_PrivateProtected([ValueSource(nameof(roslynOnlyOptions))] CSharpCompilerOptions cscOptions)
+ public void CS72_PrivateProtected([ValueSource(nameof(roslynOnlyOptions))] CompilerOptions cscOptions)
{
RunForLibrary(cscOptions: cscOptions);
}
[Test]
- public void AsyncMain([ValueSource(nameof(roslynOnlyOptions))] CSharpCompilerOptions cscOptions)
+ public void AsyncMain([ValueSource(nameof(roslynOnlyOptions))] CompilerOptions cscOptions)
{
Run(cscOptions: cscOptions);
}
[Test]
- public void NullPropagation([ValueSource(nameof(roslynOnlyOptions))] CSharpCompilerOptions cscOptions)
+ public void NullPropagation([ValueSource(nameof(roslynOnlyOptions))] CompilerOptions cscOptions)
{
RunForLibrary(cscOptions: cscOptions);
}
[Test]
- public void CS6_StringInterpolation([ValueSource(nameof(roslynOnlyOptions))] CSharpCompilerOptions cscOptions)
+ public void CS6_StringInterpolation([ValueSource(nameof(roslynOnlyOptions))] CompilerOptions cscOptions)
{
Run(cscOptions: cscOptions);
}
[Test]
- public void CS73_StackAllocInitializers([ValueSource(nameof(roslynOnlyOptions))] CSharpCompilerOptions cscOptions)
+ public void CS73_StackAllocInitializers([ValueSource(nameof(roslynOnlyOptions))] CompilerOptions cscOptions)
{
RunForLibrary(cscOptions: cscOptions);
}
[Test]
- public void RefLocalsAndReturns([ValueSource(nameof(roslynOnlyOptions))] CSharpCompilerOptions cscOptions)
+ public void RefLocalsAndReturns([ValueSource(nameof(roslynOnlyOptions))] CompilerOptions cscOptions)
{
RunForLibrary(cscOptions: cscOptions);
}
[Test]
- public void WellKnownConstants([ValueSource(nameof(defaultOptions))] CSharpCompilerOptions cscOptions)
+ public void WellKnownConstants([ValueSource(nameof(defaultOptions))] CompilerOptions cscOptions)
{
RunForLibrary(cscOptions: cscOptions);
}
[Test]
- public void QualifierTests([ValueSource(nameof(defaultOptions))] CSharpCompilerOptions cscOptions)
+ public void QualifierTests([ValueSource(nameof(defaultOptions))] CompilerOptions cscOptions)
{
RunForLibrary(cscOptions: cscOptions);
}
[Test]
- public void TupleTests([ValueSource(nameof(roslynOnlyOptions))] CSharpCompilerOptions cscOptions)
+ public void TupleTests([ValueSource(nameof(roslynOnlyOptions))] CompilerOptions cscOptions)
{
RunForLibrary(cscOptions: cscOptions);
}
[Test]
- public void NamedArguments([ValueSource(nameof(defaultOptions))] CSharpCompilerOptions cscOptions)
+ public void NamedArguments([ValueSource(nameof(defaultOptions))] CompilerOptions cscOptions)
{
RunForLibrary(cscOptions: cscOptions);
}
[Test]
- public void OptionalArguments([ValueSource(nameof(defaultOptions))] CSharpCompilerOptions cscOptions)
+ public void OptionalArguments([ValueSource(nameof(defaultOptions))] CompilerOptions cscOptions)
{
RunForLibrary(cscOptions: cscOptions);
}
[Test]
- public void ConstantsTests([ValueSource(nameof(defaultOptions))] CSharpCompilerOptions cscOptions)
+ public void ConstantsTests([ValueSource(nameof(defaultOptions))] CompilerOptions cscOptions)
{
RunForLibrary(cscOptions: cscOptions);
}
[Test]
- public void Issue1080([ValueSource(nameof(roslynOnlyOptions))] CSharpCompilerOptions cscOptions)
+ public void Issue1080([ValueSource(nameof(roslynOnlyOptions))] CompilerOptions cscOptions)
{
RunForLibrary(cscOptions: cscOptions);
}
[Test]
- public void AssemblyCustomAttributes([ValueSource(nameof(defaultOptions))] CSharpCompilerOptions cscOptions)
+ public void AssemblyCustomAttributes([ValueSource(nameof(defaultOptions))] CompilerOptions cscOptions)
{
RunForLibrary(cscOptions: cscOptions);
}
[Test]
- public void CustomAttributes([ValueSource(nameof(defaultOptions))] CSharpCompilerOptions cscOptions)
+ public void CustomAttributes([ValueSource(nameof(defaultOptions))] CompilerOptions cscOptions)
{
RunForLibrary(cscOptions: cscOptions);
}
[Test]
- public void CustomAttributeConflicts([ValueSource(nameof(defaultOptions))] CSharpCompilerOptions cscOptions)
+ public void CustomAttributeConflicts([ValueSource(nameof(defaultOptions))] CompilerOptions cscOptions)
{
RunForLibrary(cscOptions: cscOptions);
}
[Test]
- public void CustomAttributeSamples([ValueSource(nameof(defaultOptions))] CSharpCompilerOptions cscOptions)
+ public void CustomAttributeSamples([ValueSource(nameof(defaultOptions))] CompilerOptions cscOptions)
{
RunForLibrary(cscOptions: cscOptions);
}
[Test]
- public void MemberTests([ValueSource(nameof(defaultOptions))] CSharpCompilerOptions cscOptions)
+ public void MemberTests([ValueSource(nameof(defaultOptions))] CompilerOptions cscOptions)
{
RunForLibrary(cscOptions: cscOptions);
}
[Test]
- public void TypeTests([ValueSource(nameof(defaultOptions))] CSharpCompilerOptions cscOptions)
+ public void TypeTests([ValueSource(nameof(defaultOptions))] CompilerOptions cscOptions)
{
RunForLibrary(cscOptions: cscOptions);
}
[Test]
- public void YieldReturn([ValueSource(nameof(defaultOptions))] CSharpCompilerOptions cscOptions)
+ public void YieldReturn([ValueSource(nameof(defaultOptions))] CompilerOptions cscOptions)
{
RunForLibrary(cscOptions: cscOptions);
}
- void RunForLibrary([CallerMemberName] string testName = null, AssemblerOptions asmOptions = AssemblerOptions.None, CSharpCompilerOptions cscOptions = CSharpCompilerOptions.None, DecompilerSettings decompilerSettings = null)
+ void RunForLibrary([CallerMemberName] string testName = null, AssemblerOptions asmOptions = AssemblerOptions.None, CompilerOptions cscOptions = CompilerOptions.None, DecompilerSettings decompilerSettings = null)
{
- Run(testName, asmOptions | AssemblerOptions.Library, cscOptions | CSharpCompilerOptions.Library, decompilerSettings);
+ Run(testName, asmOptions | AssemblerOptions.Library, cscOptions | CompilerOptions.Library, decompilerSettings);
}
- void Run([CallerMemberName] string testName = null, AssemblerOptions asmOptions = AssemblerOptions.None, CSharpCompilerOptions cscOptions = CSharpCompilerOptions.None, DecompilerSettings decompilerSettings = null)
+ void Run([CallerMemberName] string testName = null, AssemblerOptions asmOptions = AssemblerOptions.None, CompilerOptions cscOptions = CompilerOptions.None, DecompilerSettings decompilerSettings = null)
{
var ilFile = Path.Combine(TestCasePath, testName) + Tester.GetSuffix(cscOptions) + ".il";
var csFile = Path.Combine(TestCasePath, testName + ".cs");
@@ -404,7 +404,7 @@ namespace ICSharpCode.Decompiler.Tests
CompilerResults output = null;
try {
string outputFile = Path.ChangeExtension(ilFile,
- cscOptions.HasFlag(CSharpCompilerOptions.Library) ? ".dll" : ".exe");
+ cscOptions.HasFlag(CompilerOptions.Library) ? ".dll" : ".exe");
output = Tester.CompileCSharp(csFile, cscOptions, outputFile);
Tester.Disassemble(output.PathToAssembly, ilFile, asmOptions);
} finally {
diff --git a/ICSharpCode.Decompiler.Tests/TestCases/Correctness/Uninit.vb b/ICSharpCode.Decompiler.Tests/TestCases/Correctness/Uninit.vb
new file mode 100644
index 000000000..209c9fa19
--- /dev/null
+++ b/ICSharpCode.Decompiler.Tests/TestCases/Correctness/Uninit.vb
@@ -0,0 +1,21 @@
+Imports System
+
+Module UninitTest
+ Sub Main()
+ Dim i = 0
+ Dim result As Integer = -5
+ Dim num As Integer
+ Do
+ If num > result Then
+ num += 5
+ result += 5
+ End If
+ result += 1
+ i += 1
+ If i > 10 Then
+ Exit Do
+ End If
+ Loop
+ Console.WriteLine(result)
+ End Sub
+End Module
\ No newline at end of file
diff --git a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/Generics.cs b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/Generics.cs
index f3ad3c213..da8f4b369 100644
--- a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/Generics.cs
+++ b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/Generics.cs
@@ -16,6 +16,7 @@
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
using System;
+using System.Collections.Generic;
namespace ICSharpCode.Decompiler.Tests.TestCases.Pretty
{
@@ -96,5 +97,19 @@ namespace ICSharpCode.Decompiler.Tests.TestCases.Pretty
{
return new T[size1, size2];
}
+
+ public Type[] TestTypeOf()
+ {
+ return new Type[8] {
+ typeof(int),
+ typeof(int[]),
+ typeof(GenericClass<>),
+ typeof(GenericClass),
+ typeof(GenericClass),
+ typeof(Dictionary<, >),
+ typeof(List.Enumerator),
+ typeof(List<>.Enumerator)
+ };
+ }
}
}
diff --git a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/Generics.il b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/Generics.il
index 7dedb9a29..09dd68e77 100644
--- a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/Generics.il
+++ b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/Generics.il
@@ -304,6 +304,65 @@
IL_000c: ret
} // end of method Generics::NewArray
+ .method public hidebysig instance class [mscorlib]System.Type[]
+ TestTypeOf() cil managed
+ {
+ // Code size 118 (0x76)
+ .maxstack 3
+ .locals init (class [mscorlib]System.Type[] V_0,
+ class [mscorlib]System.Type[] V_1)
+ IL_0000: nop
+ IL_0001: ldc.i4.8
+ IL_0002: newarr [mscorlib]System.Type
+ IL_0007: stloc.1
+ IL_0008: ldloc.1
+ IL_0009: ldc.i4.0
+ IL_000a: ldtoken [mscorlib]System.Int32
+ IL_000f: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_0014: stelem.ref
+ IL_0015: ldloc.1
+ IL_0016: ldc.i4.1
+ IL_0017: ldtoken int32[]
+ IL_001c: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_0021: stelem.ref
+ IL_0022: ldloc.1
+ IL_0023: ldc.i4.2
+ IL_0024: ldtoken ICSharpCode.Decompiler.Tests.TestCases.Pretty.Generics/GenericClass`1
+ IL_0029: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_002e: stelem.ref
+ IL_002f: ldloc.1
+ IL_0030: ldc.i4.3
+ IL_0031: ldtoken class ICSharpCode.Decompiler.Tests.TestCases.Pretty.Generics/GenericClass`1
+ IL_0036: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_003b: stelem.ref
+ IL_003c: ldloc.1
+ IL_003d: ldc.i4.4
+ IL_003e: ldtoken class ICSharpCode.Decompiler.Tests.TestCases.Pretty.Generics/GenericClass`1
+ IL_0043: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_0048: stelem.ref
+ IL_0049: ldloc.1
+ IL_004a: ldc.i4.5
+ IL_004b: ldtoken [mscorlib]System.Collections.Generic.Dictionary`2
+ IL_0050: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_0055: stelem.ref
+ IL_0056: ldloc.1
+ IL_0057: ldc.i4.6
+ IL_0058: ldtoken valuetype [mscorlib]System.Collections.Generic.List`1/Enumerator
+ IL_005d: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_0062: stelem.ref
+ IL_0063: ldloc.1
+ IL_0064: ldc.i4.7
+ IL_0065: ldtoken [mscorlib]System.Collections.Generic.List`1/Enumerator
+ IL_006a: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_006f: stelem.ref
+ IL_0070: ldloc.1
+ IL_0071: stloc.0
+ IL_0072: br.s IL_0074
+
+ IL_0074: ldloc.0
+ IL_0075: ret
+ } // end of method Generics::TestTypeOf
+
.method public hidebysig specialname rtspecialname
instance void .ctor() cil managed
{
diff --git a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/Generics.opt.il b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/Generics.opt.il
index af5b2d1a4..d8e83a93d 100644
--- a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/Generics.opt.il
+++ b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/Generics.opt.il
@@ -231,6 +231,59 @@
IL_0007: ret
} // end of method Generics::NewArray
+ .method public hidebysig instance class [mscorlib]System.Type[]
+ TestTypeOf() cil managed
+ {
+ // Code size 113 (0x71)
+ .maxstack 3
+ .locals init (class [mscorlib]System.Type[] V_0)
+ IL_0000: ldc.i4.8
+ IL_0001: newarr [mscorlib]System.Type
+ IL_0006: stloc.0
+ IL_0007: ldloc.0
+ IL_0008: ldc.i4.0
+ IL_0009: ldtoken [mscorlib]System.Int32
+ IL_000e: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_0013: stelem.ref
+ IL_0014: ldloc.0
+ IL_0015: ldc.i4.1
+ IL_0016: ldtoken int32[]
+ IL_001b: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_0020: stelem.ref
+ IL_0021: ldloc.0
+ IL_0022: ldc.i4.2
+ IL_0023: ldtoken ICSharpCode.Decompiler.Tests.TestCases.Pretty.Generics/GenericClass`1
+ IL_0028: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_002d: stelem.ref
+ IL_002e: ldloc.0
+ IL_002f: ldc.i4.3
+ IL_0030: ldtoken class ICSharpCode.Decompiler.Tests.TestCases.Pretty.Generics/GenericClass`1
+ IL_0035: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_003a: stelem.ref
+ IL_003b: ldloc.0
+ IL_003c: ldc.i4.4
+ IL_003d: ldtoken class ICSharpCode.Decompiler.Tests.TestCases.Pretty.Generics/GenericClass`1
+ IL_0042: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_0047: stelem.ref
+ IL_0048: ldloc.0
+ IL_0049: ldc.i4.5
+ IL_004a: ldtoken [mscorlib]System.Collections.Generic.Dictionary`2
+ IL_004f: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_0054: stelem.ref
+ IL_0055: ldloc.0
+ IL_0056: ldc.i4.6
+ IL_0057: ldtoken valuetype [mscorlib]System.Collections.Generic.List`1/Enumerator
+ IL_005c: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_0061: stelem.ref
+ IL_0062: ldloc.0
+ IL_0063: ldc.i4.7
+ IL_0064: ldtoken [mscorlib]System.Collections.Generic.List`1/Enumerator
+ IL_0069: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_006e: stelem.ref
+ IL_006f: ldloc.0
+ IL_0070: ret
+ } // end of method Generics::TestTypeOf
+
.method public hidebysig specialname rtspecialname
instance void .ctor() cil managed
{
diff --git a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/Generics.opt.roslyn.il b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/Generics.opt.roslyn.il
index 3112d5a7a..86ef337db 100644
--- a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/Generics.opt.roslyn.il
+++ b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/Generics.opt.roslyn.il
@@ -222,6 +222,56 @@
IL_0007: ret
} // end of method Generics::NewArray
+ .method public hidebysig instance class [mscorlib]System.Type[]
+ TestTypeOf() cil managed
+ {
+ // Code size 111 (0x6f)
+ .maxstack 4
+ IL_0000: ldc.i4.8
+ IL_0001: newarr [mscorlib]System.Type
+ IL_0006: dup
+ IL_0007: ldc.i4.0
+ IL_0008: ldtoken [mscorlib]System.Int32
+ IL_000d: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_0012: stelem.ref
+ IL_0013: dup
+ IL_0014: ldc.i4.1
+ IL_0015: ldtoken int32[]
+ IL_001a: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_001f: stelem.ref
+ IL_0020: dup
+ IL_0021: ldc.i4.2
+ IL_0022: ldtoken ICSharpCode.Decompiler.Tests.TestCases.Pretty.Generics/GenericClass`1
+ IL_0027: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_002c: stelem.ref
+ IL_002d: dup
+ IL_002e: ldc.i4.3
+ IL_002f: ldtoken class ICSharpCode.Decompiler.Tests.TestCases.Pretty.Generics/GenericClass`1
+ IL_0034: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_0039: stelem.ref
+ IL_003a: dup
+ IL_003b: ldc.i4.4
+ IL_003c: ldtoken class ICSharpCode.Decompiler.Tests.TestCases.Pretty.Generics/GenericClass`1
+ IL_0041: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_0046: stelem.ref
+ IL_0047: dup
+ IL_0048: ldc.i4.5
+ IL_0049: ldtoken [mscorlib]System.Collections.Generic.Dictionary`2
+ IL_004e: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_0053: stelem.ref
+ IL_0054: dup
+ IL_0055: ldc.i4.6
+ IL_0056: ldtoken valuetype [mscorlib]System.Collections.Generic.List`1/Enumerator
+ IL_005b: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_0060: stelem.ref
+ IL_0061: dup
+ IL_0062: ldc.i4.7
+ IL_0063: ldtoken [mscorlib]System.Collections.Generic.List`1/Enumerator
+ IL_0068: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_006d: stelem.ref
+ IL_006e: ret
+ } // end of method Generics::TestTypeOf
+
.method public hidebysig specialname rtspecialname
instance void .ctor() cil managed
{
diff --git a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/Generics.roslyn.il b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/Generics.roslyn.il
index a433f6f70..fb056af8f 100644
--- a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/Generics.roslyn.il
+++ b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/Generics.roslyn.il
@@ -298,6 +298,62 @@
IL_000c: ret
} // end of method Generics::NewArray
+ .method public hidebysig instance class [mscorlib]System.Type[]
+ TestTypeOf() cil managed
+ {
+ // Code size 116 (0x74)
+ .maxstack 4
+ .locals init (class [mscorlib]System.Type[] V_0)
+ IL_0000: nop
+ IL_0001: ldc.i4.8
+ IL_0002: newarr [mscorlib]System.Type
+ IL_0007: dup
+ IL_0008: ldc.i4.0
+ IL_0009: ldtoken [mscorlib]System.Int32
+ IL_000e: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_0013: stelem.ref
+ IL_0014: dup
+ IL_0015: ldc.i4.1
+ IL_0016: ldtoken int32[]
+ IL_001b: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_0020: stelem.ref
+ IL_0021: dup
+ IL_0022: ldc.i4.2
+ IL_0023: ldtoken ICSharpCode.Decompiler.Tests.TestCases.Pretty.Generics/GenericClass`1
+ IL_0028: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_002d: stelem.ref
+ IL_002e: dup
+ IL_002f: ldc.i4.3
+ IL_0030: ldtoken class ICSharpCode.Decompiler.Tests.TestCases.Pretty.Generics/GenericClass`1
+ IL_0035: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_003a: stelem.ref
+ IL_003b: dup
+ IL_003c: ldc.i4.4
+ IL_003d: ldtoken class ICSharpCode.Decompiler.Tests.TestCases.Pretty.Generics/GenericClass`1
+ IL_0042: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_0047: stelem.ref
+ IL_0048: dup
+ IL_0049: ldc.i4.5
+ IL_004a: ldtoken [mscorlib]System.Collections.Generic.Dictionary`2
+ IL_004f: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_0054: stelem.ref
+ IL_0055: dup
+ IL_0056: ldc.i4.6
+ IL_0057: ldtoken valuetype [mscorlib]System.Collections.Generic.List`1/Enumerator
+ IL_005c: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_0061: stelem.ref
+ IL_0062: dup
+ IL_0063: ldc.i4.7
+ IL_0064: ldtoken [mscorlib]System.Collections.Generic.List`1/Enumerator
+ IL_0069: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
+ IL_006e: stelem.ref
+ IL_006f: stloc.0
+ IL_0070: br.s IL_0072
+
+ IL_0072: ldloc.0
+ IL_0073: ret
+ } // end of method Generics::TestTypeOf
+
.method public hidebysig specialname rtspecialname
instance void .ctor() cil managed
{
diff --git a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/QueryExpressions.cs b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/QueryExpressions.cs
index ebcf87829..37a16167d 100644
--- a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/QueryExpressions.cs
+++ b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/QueryExpressions.cs
@@ -213,6 +213,25 @@ namespace ICSharpCode.Decompiler.Tests.TestCases.Pretty
select (x);
}
+ public static IEnumerable Issue1310a(bool test)
+ {
+#if ROSLYN && OPT
+ IEnumerable obj = test ? (from c in Enumerable.Range(0, 255)
+ where char.IsLetter((char)c)
+ select (char)c) : (from c in Enumerable.Range(0, 255)
+ where char.IsDigit((char)c)
+ select (char)c);
+ return obj.Concat(obj);
+#else
+ IEnumerable enumerable = test ? (from c in Enumerable.Range(0, 255)
+ where char.IsLetter((char)c)
+ select (char)c) : (from c in Enumerable.Range(0, 255)
+ where char.IsDigit((char)c)
+ select (char)c);
+ return enumerable.Concat(enumerable);
+#endif
+ }
+
public static Maybe Cast(Maybe a) where TB : class
{
return from m in a
diff --git a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/QueryExpressions.il b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/QueryExpressions.il
index a73a6d0ea..2aa36ab3a 100644
--- a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/QueryExpressions.il
+++ b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/QueryExpressions.il
@@ -17,8 +17,8 @@
{
.custom instance void [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::.ctor() = ( 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78 // ....T..WrapNonEx
63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 ) // ceptionThrows.
- .custom instance void [mscorlib]System.Runtime.CompilerServices.ExtensionAttribute::.ctor() = ( 01 00 00 00 )
.custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 )
+ .custom instance void [mscorlib]System.Runtime.CompilerServices.ExtensionAttribute::.ctor() = ( 01 00 00 00 )
.permissionset reqmin
= {[mscorlib]System.Security.Permissions.SecurityPermissionAttribute = {property bool 'SkipVerification' = bool(true)}}
.hash algorithm 0x00008004
@@ -273,6 +273,14 @@
.custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 )
.field private static class [mscorlib]System.Func`2 'CS$<>9__CachedAnonymousMethodDelegate6a'
.custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 )
+ .field private static class [mscorlib]System.Func`2 'CS$<>9__CachedAnonymousMethodDelegate6f'
+ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 )
+ .field private static class [mscorlib]System.Func`2 'CS$<>9__CachedAnonymousMethodDelegate70'
+ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 )
+ .field private static class [mscorlib]System.Func`2 'CS$<>9__CachedAnonymousMethodDelegate71'
+ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 )
+ .field private static class [mscorlib]System.Func`2 'CS$<>9__CachedAnonymousMethodDelegate72'
+ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 )
.method public hidebysig instance object
MultipleWhere() cil managed
{
@@ -1097,6 +1105,92 @@
IL_004e: ret
} // end of method QueryExpressions::Issue437
+ .method public hidebysig static class [mscorlib]System.Collections.Generic.IEnumerable`1
+ Issue1310a(bool test) cil managed
+ {
+ // Code size 186 (0xba)
+ .maxstack 3
+ .locals init (class [mscorlib]System.Collections.Generic.IEnumerable`1 V_0,
+ class [mscorlib]System.Collections.Generic.IEnumerable`1 V_1)
+ IL_0000: nop
+ IL_0001: ldarg.0
+ IL_0002: brtrue.s IL_0059
+
+ IL_0004: ldc.i4.0
+ IL_0005: ldc.i4 0xff
+ IL_000a: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [System.Core]System.Linq.Enumerable::Range(int32,
+ int32)
+ IL_000f: ldsfld class [mscorlib]System.Func`2 ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions::'CS$<>9__CachedAnonymousMethodDelegate71'
+ IL_0014: brtrue.s IL_0029
+
+ IL_0016: ldnull
+ IL_0017: ldftn bool ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions::'b__6d'(int32)
+ IL_001d: newobj instance void class [mscorlib]System.Func`2::.ctor(object,
+ native int)
+ IL_0022: stsfld class [mscorlib]System.Func`2 ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions::'CS$<>9__CachedAnonymousMethodDelegate71'
+ IL_0027: br.s IL_0029
+
+ IL_0029: ldsfld class [mscorlib]System.Func`2 ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions::'CS$<>9__CachedAnonymousMethodDelegate71'
+ IL_002e: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [System.Core]System.Linq.Enumerable::Where(class [mscorlib]System.Collections.Generic.IEnumerable`1,
+ class [mscorlib]System.Func`2)
+ IL_0033: ldsfld class [mscorlib]System.Func`2 ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions::'CS$<>9__CachedAnonymousMethodDelegate72'
+ IL_0038: brtrue.s IL_004d
+
+ IL_003a: ldnull
+ IL_003b: ldftn char ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions::'b__6e'(int32)
+ IL_0041: newobj instance void class [mscorlib]System.Func`2::.ctor(object,
+ native int)
+ IL_0046: stsfld class [mscorlib]System.Func`2 ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions::'CS$<>9__CachedAnonymousMethodDelegate72'
+ IL_004b: br.s IL_004d
+
+ IL_004d: ldsfld class [mscorlib]System.Func`2 ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions::'CS$<>9__CachedAnonymousMethodDelegate72'
+ IL_0052: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [System.Core]System.Linq.Enumerable::Select(class [mscorlib]System.Collections.Generic.IEnumerable`1,
+ class [mscorlib]System.Func`2)
+ IL_0057: br.s IL_00ac
+
+ IL_0059: ldc.i4.0
+ IL_005a: ldc.i4 0xff
+ IL_005f: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [System.Core]System.Linq.Enumerable::Range(int32,
+ int32)
+ IL_0064: ldsfld class [mscorlib]System.Func`2 ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions::'CS$<>9__CachedAnonymousMethodDelegate6f'
+ IL_0069: brtrue.s IL_007e
+
+ IL_006b: ldnull
+ IL_006c: ldftn bool ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions::'b__6b'(int32)
+ IL_0072: newobj instance void class [mscorlib]System.Func`2::.ctor(object,
+ native int)
+ IL_0077: stsfld class [mscorlib]System.Func`2 ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions::'CS$<>9__CachedAnonymousMethodDelegate6f'
+ IL_007c: br.s IL_007e
+
+ IL_007e: ldsfld class [mscorlib]System.Func`2 ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions::'CS$<>9__CachedAnonymousMethodDelegate6f'
+ IL_0083: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [System.Core]System.Linq.Enumerable::Where(class [mscorlib]System.Collections.Generic.IEnumerable`1,
+ class [mscorlib]System.Func`2)
+ IL_0088: ldsfld class [mscorlib]System.Func`2 ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions::'CS$<>9__CachedAnonymousMethodDelegate70'
+ IL_008d: brtrue.s IL_00a2
+
+ IL_008f: ldnull
+ IL_0090: ldftn char ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions::'b__6c'(int32)
+ IL_0096: newobj instance void class [mscorlib]System.Func`2::.ctor(object,
+ native int)
+ IL_009b: stsfld class [mscorlib]System.Func`2 ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions::'CS$<>9__CachedAnonymousMethodDelegate70'
+ IL_00a0: br.s IL_00a2
+
+ IL_00a2: ldsfld class [mscorlib]System.Func`2 ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions::'CS$<>9__CachedAnonymousMethodDelegate70'
+ IL_00a7: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [System.Core]System.Linq.Enumerable::Select(class [mscorlib]System.Collections.Generic.IEnumerable`1,
+ class [mscorlib]System.Func`2)
+ IL_00ac: nop
+ IL_00ad: stloc.0
+ IL_00ae: ldloc.0
+ IL_00af: ldloc.0
+ IL_00b0: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [System.Core]System.Linq.Enumerable::Concat(class [mscorlib]System.Collections.Generic.IEnumerable`1,
+ class [mscorlib]System.Collections.Generic.IEnumerable`1)
+ IL_00b5: stloc.1
+ IL_00b6: br.s IL_00b8
+
+ IL_00b8: ldloc.1
+ IL_00b9: ret
+ } // end of method QueryExpressions::Issue1310a
+
.method public hidebysig static valuetype ICSharpCode.Decompiler.Tests.TestCases.Pretty.Maybe`1
Cast(valuetype ICSharpCode.Decompiler.Tests.TestCases.Pretty.Maybe`1 a) cil managed
{
@@ -1106,19 +1200,19 @@
IL_0000: nop
IL_0001: ldarg.0
IL_0002: ldnull
- IL_0003: ldftn class '<>f__AnonymousType11`2' ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions::'b__6c'(!!0)
+ IL_0003: ldftn class '<>f__AnonymousType11`2' ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions::'b__74'(!!0)
IL_0009: newobj instance void class [mscorlib]System.Func`2f__AnonymousType11`2'>::.ctor(object,
native int)
IL_000e: call valuetype ICSharpCode.Decompiler.Tests.TestCases.Pretty.Maybe`1 ICSharpCode.Decompiler.Tests.TestCases.Pretty.MaybeExtensions::Selectf__AnonymousType11`2'>(valuetype ICSharpCode.Decompiler.Tests.TestCases.Pretty.Maybe`1,
class [mscorlib]System.Func`2)
IL_0013: ldnull
- IL_0014: ldftn bool ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions::'b__6d'(class '<>f__AnonymousType11`2')
+ IL_0014: ldftn bool ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions::'b__75'(class '<>f__AnonymousType11`2')
IL_001a: newobj instance void class [mscorlib]System.Func`2f__AnonymousType11`2',bool>::.ctor(object,
native int)
IL_001f: call valuetype ICSharpCode.Decompiler.Tests.TestCases.Pretty.Maybe`1 ICSharpCode.Decompiler.Tests.TestCases.Pretty.MaybeExtensions::Wheref__AnonymousType11`2'>(valuetype ICSharpCode.Decompiler.Tests.TestCases.Pretty.Maybe`1,
class [mscorlib]System.Func`2)
IL_0024: ldnull
- IL_0025: ldftn !!1 ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions::'b__6e'(class '<>f__AnonymousType11`2')
+ IL_0025: ldftn !!1 ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions::'b__76'(class '<>f__AnonymousType11`2')
IL_002b: newobj instance void class [mscorlib]System.Func`2f__AnonymousType11`2',!!TB>::.ctor(object,
native int)
IL_0030: call valuetype ICSharpCode.Decompiler.Tests.TestCases.Pretty.Maybe`1 ICSharpCode.Decompiler.Tests.TestCases.Pretty.MaybeExtensions::Selectf__AnonymousType11`2',!!1>(valuetype ICSharpCode.Decompiler.Tests.TestCases.Pretty.Maybe`1,
@@ -2055,8 +2149,70 @@
IL_0005: ret
} // end of method QueryExpressions::'b__68'
+ .method private hidebysig static bool 'b__6b'(int32 c) cil managed
+ {
+ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 )
+ // Code size 12 (0xc)
+ .maxstack 1
+ .locals init (bool V_0)
+ IL_0000: ldarg.0
+ IL_0001: conv.u2
+ IL_0002: call bool [mscorlib]System.Char::IsLetter(char)
+ IL_0007: stloc.0
+ IL_0008: br.s IL_000a
+
+ IL_000a: ldloc.0
+ IL_000b: ret
+ } // end of method QueryExpressions::'b__6b'
+
+ .method private hidebysig static char 'b__6c'(int32 c) cil managed
+ {
+ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 )
+ // Code size 7 (0x7)
+ .maxstack 1
+ .locals init (char V_0)
+ IL_0000: ldarg.0
+ IL_0001: conv.u2
+ IL_0002: stloc.0
+ IL_0003: br.s IL_0005
+
+ IL_0005: ldloc.0
+ IL_0006: ret
+ } // end of method QueryExpressions::'b__6c'
+
+ .method private hidebysig static bool 'b__6d'(int32 c) cil managed
+ {
+ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 )
+ // Code size 12 (0xc)
+ .maxstack 1
+ .locals init (bool V_0)
+ IL_0000: ldarg.0
+ IL_0001: conv.u2
+ IL_0002: call bool [mscorlib]System.Char::IsDigit(char)
+ IL_0007: stloc.0
+ IL_0008: br.s IL_000a
+
+ IL_000a: ldloc.0
+ IL_000b: ret
+ } // end of method QueryExpressions::'b__6d'
+
+ .method private hidebysig static char 'b__6e'(int32 c) cil managed
+ {
+ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 )
+ // Code size 7 (0x7)
+ .maxstack 1
+ .locals init (char V_0)
+ IL_0000: ldarg.0
+ IL_0001: conv.u2
+ IL_0002: stloc.0
+ IL_0003: br.s IL_0005
+
+ IL_0005: ldloc.0
+ IL_0006: ret
+ } // end of method QueryExpressions::'b__6e'
+
.method private hidebysig static class '<>f__AnonymousType11`2'
- 'b__6c'(!!TA m) cil managed
+ 'b__74'(!!TA m) cil managed
{
.custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 )
// Code size 27 (0x1b)
@@ -2074,9 +2230,9 @@
IL_0019: ldloc.0
IL_001a: ret
- } // end of method QueryExpressions::'b__6c'
+ } // end of method QueryExpressions::'b__74'
- .method private hidebysig static bool 'b__6d'(class '<>f__AnonymousType11`2' '<>h__TransparentIdentifier6b') cil managed
+ .method private hidebysig static bool 'b__75'(class '<>f__AnonymousType11`2' '<>h__TransparentIdentifier73') cil managed
{
.custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 )
// Code size 22 (0x16)
@@ -2094,9 +2250,9 @@
IL_0014: ldloc.0
IL_0015: ret
- } // end of method QueryExpressions::'b__6d'
+ } // end of method QueryExpressions::'b__75'
- .method private hidebysig static !!TB 'b__6e'(class '<>f__AnonymousType11`2' '<>h__TransparentIdentifier6b') cil managed
+ .method private hidebysig static !!TB 'b__76'(class '<>f__AnonymousType11`2' '<>h__TransparentIdentifier73') cil managed
{
.custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 )
// Code size 11 (0xb)
@@ -2109,7 +2265,7 @@
IL_0009: ldloc.0
IL_000a: ret
- } // end of method QueryExpressions::'b__6e'
+ } // end of method QueryExpressions::'b__76'
} // end of class ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions
diff --git a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/QueryExpressions.opt.il b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/QueryExpressions.opt.il
index 487f6754b..4997aebba 100644
--- a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/QueryExpressions.opt.il
+++ b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/QueryExpressions.opt.il
@@ -17,8 +17,8 @@
{
.custom instance void [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::.ctor() = ( 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78 // ....T..WrapNonEx
63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 ) // ceptionThrows.
- .custom instance void [mscorlib]System.Runtime.CompilerServices.ExtensionAttribute::.ctor() = ( 01 00 00 00 )
.custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 )
+ .custom instance void [mscorlib]System.Runtime.CompilerServices.ExtensionAttribute::.ctor() = ( 01 00 00 00 )
.permissionset reqmin
= {[mscorlib]System.Security.Permissions.SecurityPermissionAttribute = {property bool 'SkipVerification' = bool(true)}}
.hash algorithm 0x00008004
@@ -263,6 +263,14 @@
.custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 )
.field private static class [mscorlib]System.Func`2 'CS$<>9__CachedAnonymousMethodDelegate6a'
.custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 )
+ .field private static class [mscorlib]System.Func`2 'CS$<>9__CachedAnonymousMethodDelegate6f'
+ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 )
+ .field private static class [mscorlib]System.Func`2 'CS$<>9__CachedAnonymousMethodDelegate70'
+ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 )
+ .field private static class [mscorlib]System.Func`2 'CS$<>9__CachedAnonymousMethodDelegate71'
+ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 )
+ .field private static class [mscorlib]System.Func`2 'CS$<>9__CachedAnonymousMethodDelegate72'
+ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 )
.method public hidebysig instance object
MultipleWhere() cil managed
{
@@ -909,6 +917,77 @@
IL_0045: ret
} // end of method QueryExpressions::Issue437
+ .method public hidebysig static class [mscorlib]System.Collections.Generic.IEnumerable`1
+ Issue1310a(bool test) cil managed
+ {
+ // Code size 172 (0xac)
+ .maxstack 3
+ .locals init (class [mscorlib]System.Collections.Generic.IEnumerable`1 V_0)
+ IL_0000: ldarg.0
+ IL_0001: brtrue.s IL_0054
+
+ IL_0003: ldc.i4.0
+ IL_0004: ldc.i4 0xff
+ IL_0009: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [System.Core]System.Linq.Enumerable::Range(int32,
+ int32)
+ IL_000e: ldsfld class [mscorlib]System.Func`2 ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions::'CS$<>9__CachedAnonymousMethodDelegate71'
+ IL_0013: brtrue.s IL_0026
+
+ IL_0015: ldnull
+ IL_0016: ldftn bool ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions::'b__6d'(int32)
+ IL_001c: newobj instance void class [mscorlib]System.Func`2::.ctor(object,
+ native int)
+ IL_0021: stsfld class [mscorlib]System.Func`2 ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions::'CS$<>9__CachedAnonymousMethodDelegate71'
+ IL_0026: ldsfld class [mscorlib]System.Func`2 ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions::'CS$<>9__CachedAnonymousMethodDelegate71'
+ IL_002b: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [System.Core]System.Linq.Enumerable::Where(class [mscorlib]System.Collections.Generic.IEnumerable`1,
+ class [mscorlib]System.Func`2)
+ IL_0030: ldsfld class [mscorlib]System.Func`2 ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions::'CS$<>9__CachedAnonymousMethodDelegate72'
+ IL_0035: brtrue.s IL_0048
+
+ IL_0037: ldnull
+ IL_0038: ldftn char ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions::'b__6e'(int32)
+ IL_003e: newobj instance void class [mscorlib]System.Func`2::.ctor(object,
+ native int)
+ IL_0043: stsfld class [mscorlib]System.Func`2 ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions::'CS$<>9__CachedAnonymousMethodDelegate72'
+ IL_0048: ldsfld class [mscorlib]System.Func`2 ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions::'CS$<>9__CachedAnonymousMethodDelegate72'
+ IL_004d: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [System.Core]System.Linq.Enumerable::Select(class [mscorlib]System.Collections.Generic.IEnumerable`1,
+ class [mscorlib]System.Func`2)
+ IL_0052: br.s IL_00a3
+
+ IL_0054: ldc.i4.0
+ IL_0055: ldc.i4 0xff
+ IL_005a: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [System.Core]System.Linq.Enumerable::Range(int32,
+ int32)
+ IL_005f: ldsfld class [mscorlib]System.Func`2 ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions::'CS$<>9__CachedAnonymousMethodDelegate6f'
+ IL_0064: brtrue.s IL_0077
+
+ IL_0066: ldnull
+ IL_0067: ldftn bool ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions::'b__6b'(int32)
+ IL_006d: newobj instance void class [mscorlib]System.Func`2::.ctor(object,
+ native int)
+ IL_0072: stsfld class [mscorlib]System.Func`2 ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions::'CS$<>9__CachedAnonymousMethodDelegate6f'
+ IL_0077: ldsfld class [mscorlib]System.Func`2 ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions::'CS$<>9__CachedAnonymousMethodDelegate6f'
+ IL_007c: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [System.Core]System.Linq.Enumerable::Where(class [mscorlib]System.Collections.Generic.IEnumerable`1,
+ class [mscorlib]System.Func`2)
+ IL_0081: ldsfld class [mscorlib]System.Func`2 ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions::'CS$<>9__CachedAnonymousMethodDelegate70'
+ IL_0086: brtrue.s IL_0099
+
+ IL_0088: ldnull
+ IL_0089: ldftn char ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions::'b__6c'(int32)
+ IL_008f: newobj instance void class [mscorlib]System.Func`2::.ctor(object,
+ native int)
+ IL_0094: stsfld class [mscorlib]System.Func`2 ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions::'CS$<>9__CachedAnonymousMethodDelegate70'
+ IL_0099: ldsfld class [mscorlib]System.Func`2 ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions::'CS$<>9__CachedAnonymousMethodDelegate70'
+ IL_009e: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [System.Core]System.Linq.Enumerable::Select(class [mscorlib]System.Collections.Generic.IEnumerable`1,
+ class [mscorlib]System.Func`2)
+ IL_00a3: stloc.0
+ IL_00a4: ldloc.0
+ IL_00a5: ldloc.0
+ IL_00a6: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [System.Core]System.Linq.Enumerable::Concat(class [mscorlib]System.Collections.Generic.IEnumerable`1,
+ class [mscorlib]System.Collections.Generic.IEnumerable`1)
+ IL_00ab: ret
+ } // end of method QueryExpressions::Issue1310a
+
.method public hidebysig static valuetype ICSharpCode.Decompiler.Tests.TestCases.Pretty.Maybe`1
Cast(valuetype ICSharpCode.Decompiler.Tests.TestCases.Pretty.Maybe`1 a) cil managed
{
@@ -916,19 +995,19 @@
.maxstack 8
IL_0000: ldarg.0
IL_0001: ldnull
- IL_0002: ldftn class '<>f__AnonymousType11`2' ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions::'b__6c'(!!0)
+ IL_0002: ldftn class '<>f__AnonymousType11`2' ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions::'b__74'(!!0)
IL_0008: newobj instance void class [mscorlib]System.Func`2f__AnonymousType11`2'>::.ctor(object,
native int)
IL_000d: call valuetype ICSharpCode.Decompiler.Tests.TestCases.Pretty.Maybe`1 ICSharpCode.Decompiler.Tests.TestCases.Pretty.MaybeExtensions::Selectf__AnonymousType11`2'>(valuetype ICSharpCode.Decompiler.Tests.TestCases.Pretty.Maybe`1,
class [mscorlib]System.Func`2)
IL_0012: ldnull
- IL_0013: ldftn bool ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions::'b__6d'(class '<>f__AnonymousType11`2')
+ IL_0013: ldftn bool ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions::'b__75'(class '<>f__AnonymousType11`2')
IL_0019: newobj instance void class [mscorlib]System.Func`2f__AnonymousType11`2',bool>::.ctor(object,
native int)
IL_001e: call valuetype ICSharpCode.Decompiler.Tests.TestCases.Pretty.Maybe`1 ICSharpCode.Decompiler.Tests.TestCases.Pretty.MaybeExtensions::Wheref__AnonymousType11`2'>(valuetype ICSharpCode.Decompiler.Tests.TestCases.Pretty.Maybe`1,
class [mscorlib]System.Func`2)
IL_0023: ldnull
- IL_0024: ldftn !!1 ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions::'b__6e'(class '<>f__AnonymousType11`2')
+ IL_0024: ldftn !!1 ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions::'b__76'(class '<>f__AnonymousType11`2')
IL_002a: newobj instance void class [mscorlib]System.Func`2f__AnonymousType11`2',!!TB>::.ctor(object,
native int)
IL_002f: call valuetype ICSharpCode.Decompiler.Tests.TestCases.Pretty.Maybe`1 ICSharpCode.Decompiler.Tests.TestCases.Pretty.MaybeExtensions::Selectf__AnonymousType11`2',!!1>(valuetype ICSharpCode.Decompiler.Tests.TestCases.Pretty.Maybe`1,
@@ -1626,8 +1705,50 @@
IL_0001: ret
} // end of method QueryExpressions::'b__68'
+ .method private hidebysig static bool 'b__6b'(int32 c) cil managed
+ {
+ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 )
+ // Code size 8 (0x8)
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: conv.u2
+ IL_0002: call bool [mscorlib]System.Char::IsLetter(char)
+ IL_0007: ret
+ } // end of method QueryExpressions::'b__6b'
+
+ .method private hidebysig static char 'b__6c'(int32 c) cil managed
+ {
+ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 )
+ // Code size 3 (0x3)
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: conv.u2
+ IL_0002: ret
+ } // end of method QueryExpressions::'b__6c'
+
+ .method private hidebysig static bool 'b__6d'(int32 c) cil managed
+ {
+ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 )
+ // Code size 8 (0x8)
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: conv.u2
+ IL_0002: call bool [mscorlib]System.Char::IsDigit(char)
+ IL_0007: ret
+ } // end of method QueryExpressions::'b__6d'
+
+ .method private hidebysig static char 'b__6e'(int32 c) cil managed
+ {
+ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 )
+ // Code size 3 (0x3)
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: conv.u2
+ IL_0002: ret
+ } // end of method QueryExpressions::'b__6e'
+
.method private hidebysig static class '<>f__AnonymousType11`2'
- 'b__6c'(!!TA m) cil managed
+ 'b__74'(!!TA m) cil managed
{
.custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 )
// Code size 23 (0x17)
@@ -1640,9 +1761,9 @@
IL_0011: newobj instance void class '<>f__AnonymousType11`2'::.ctor(!0,
!1)
IL_0016: ret
- } // end of method QueryExpressions::'b__6c'
+ } // end of method QueryExpressions::'b__74'
- .method private hidebysig static bool 'b__6d'(class '<>f__AnonymousType11`2' '<>h__TransparentIdentifier6b') cil managed
+ .method private hidebysig static bool 'b__75'(class '<>f__AnonymousType11`2' '<>h__TransparentIdentifier73') cil managed
{
.custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 )
// Code size 18 (0x12)
@@ -1655,9 +1776,9 @@
IL_000e: ldc.i4.0
IL_000f: ceq
IL_0011: ret
- } // end of method QueryExpressions::'b__6d'
+ } // end of method QueryExpressions::'b__75'
- .method private hidebysig static !!TB 'b__6e'(class '<>f__AnonymousType11`2' '<>h__TransparentIdentifier6b') cil managed
+ .method private hidebysig static !!TB 'b__76'(class '<>f__AnonymousType11`2' '<>h__TransparentIdentifier73') cil managed
{
.custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 )
// Code size 7 (0x7)
@@ -1665,7 +1786,7 @@
IL_0000: ldarg.0
IL_0001: callvirt instance !1 class '<>f__AnonymousType11`2'::get_t()
IL_0006: ret
- } // end of method QueryExpressions::'b__6e'
+ } // end of method QueryExpressions::'b__76'
} // end of class ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions
diff --git a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/QueryExpressions.opt.roslyn.il b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/QueryExpressions.opt.roslyn.il
index f1e4543e1..91a5ac863 100644
--- a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/QueryExpressions.opt.roslyn.il
+++ b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/QueryExpressions.opt.roslyn.il
@@ -3857,6 +3857,10 @@
.field public static class [mscorlib]System.Func`2,class '<>f__AnonymousType16`2'> '<>9__19_1'
.field public static class [mscorlib]System.Func`2 '<>9__20_0'
.field public static class [mscorlib]System.Func`2 '<>9__20_1'
+ .field public static class [mscorlib]System.Func`2 '<>9__21_0'
+ .field public static class [mscorlib]System.Func`2 '<>9__21_1'
+ .field public static class [mscorlib]System.Func`2 '<>9__21_2'
+ .field public static class [mscorlib]System.Func`2 '<>9__21_3'
.method private hidebysig specialname rtspecialname static
void .cctor() cil managed
{
@@ -4499,25 +4503,67 @@
IL_0001: ret
} // end of method '<>c'::'b__20_1'
+ .method assembly hidebysig instance bool
+ 'b__21_0'(int32 c) cil managed
+ {
+ // Code size 8 (0x8)
+ .maxstack 8
+ IL_0000: ldarg.1
+ IL_0001: conv.u2
+ IL_0002: call bool [mscorlib]System.Char::IsLetter(char)
+ IL_0007: ret
+ } // end of method '<>c'::'b__21_0'
+
+ .method assembly hidebysig instance char
+ 'b__21_1'(int32 c) cil managed
+ {
+ // Code size 3 (0x3)
+ .maxstack 8
+ IL_0000: ldarg.1
+ IL_0001: conv.u2
+ IL_0002: ret
+ } // end of method '<>c'::'b__21_1'
+
+ .method assembly hidebysig instance bool
+ 'b__21_2'(int32 c) cil managed
+ {
+ // Code size 8 (0x8)
+ .maxstack 8
+ IL_0000: ldarg.1
+ IL_0001: conv.u2
+ IL_0002: call bool [mscorlib]System.Char::IsDigit(char)
+ IL_0007: ret
+ } // end of method '<>c'::'b__21_2'
+
+ .method assembly hidebysig instance char
+ 'b__21_3'(int32 c) cil managed
+ {
+ // Code size 3 (0x3)
+ .maxstack 8
+ IL_0000: ldarg.1
+ IL_0001: conv.u2
+ IL_0002: ret
+ } // end of method '<>c'::'b__21_3'
+
} // end of class '<>c'
- .class auto ansi serializable sealed nested private beforefieldinit '<>c__21`2'
+ .class auto ansi serializable sealed nested private beforefieldinit '<>c__22`2'
extends [mscorlib]System.Object
{
.custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 )
- .field public static initonly class ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions/'<>c__21`2' '<>9'
- .field public static class [mscorlib]System.Func`2f__AnonymousType17`2'> '<>9__21_0'
- .field public static class [mscorlib]System.Func`2f__AnonymousType17`2',bool> '<>9__21_1'
- .field public static class [mscorlib]System.Func`2f__AnonymousType17`2',!TB> '<>9__21_2'
+ .field public static initonly class ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions/'<>c__22`2' '<>9'
+ .field public static class [mscorlib]System.Func`2f__AnonymousType17`2'> '<>9__22_0'
+ .field public static class [mscorlib]System.Func`2f__AnonymousType17`2',bool> '<>9__22_1'
+ .field public static class [mscorlib]System.Func`2f__AnonymousType17`2',!TB> '<>9__22_2'
.method private hidebysig specialname rtspecialname static
void .cctor() cil managed
{
// Code size 11 (0xb)
.maxstack 8
- IL_0000: newobj instance void class ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions/'<>c__21`2'::.ctor()
- IL_0005: stsfld class ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions/'<>c__21`2' class ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions/'<>c__21`2'::'<>9'
+ IL_0000: newobj instance void class ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions/'<>c__22`2'::.ctor()
+ IL_0005: stsfld class ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions/'<>c__22`2' class ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions/'<>c__22`2'::'<>9'
IL_000a: ret
- } // end of method '<>c__21`2'::.cctor
+ } // end of method '<>c__22`2'::.cctor
.method public hidebysig specialname rtspecialname
instance void .ctor() cil managed
@@ -4527,10 +4573,10 @@
IL_0000: ldarg.0
IL_0001: call instance void [mscorlib]System.Object::.ctor()
IL_0006: ret
- } // end of method '<>c__21`2'::.ctor
+ } // end of method '<>c__22`2'::.ctor
.method assembly hidebysig instance class '<>f__AnonymousType17`2'
- 'b__21_0'(!TA m) cil managed
+ 'b__22_0'(!TA m) cil managed
{
// Code size 23 (0x17)
.maxstack 8
@@ -4542,10 +4588,10 @@
IL_0011: newobj instance void class '<>f__AnonymousType17`2'::.ctor(!0,
!1)
IL_0016: ret
- } // end of method '<>c__21`2'::'b__21_0'
+ } // end of method '<>c__22`2'::'b__22_0'
.method assembly hidebysig instance bool
- 'b__21_1'(class '<>f__AnonymousType17`2' '<>h__TransparentIdentifier0') cil managed
+ 'b__22_1'(class '<>f__AnonymousType17`2' '<>h__TransparentIdentifier0') cil managed
{
// Code size 15 (0xf)
.maxstack 8
@@ -4555,19 +4601,19 @@
IL_000b: ldnull
IL_000c: cgt.un
IL_000e: ret
- } // end of method '<>c__21`2'::'b__21_1'
+ } // end of method '<>c__22`2'::'b__22_1'
.method assembly hidebysig instance !TB
- 'b__21_2'(class '<>f__AnonymousType17`2' '<>h__TransparentIdentifier0') cil managed
+ 'b__22_2'(class '<>f__AnonymousType17`2' '<>h__TransparentIdentifier0') cil managed
{
// Code size 7 (0x7)
.maxstack 8
IL_0000: ldarg.1
IL_0001: callvirt instance !1 class '<>f__AnonymousType17`2'::get_t()
IL_0006: ret
- } // end of method '<>c__21`2'::'b__21_2'
+ } // end of method '<>c__22`2'::'b__22_2'
- } // end of class '<>c__21`2'
+ } // end of class '<>c__22`2'
.field public class [mscorlib]System.Collections.Generic.IEnumerable`1 customers
.field public class [mscorlib]System.Collections.Generic.IEnumerable`1 orders
@@ -5305,49 +5351,125 @@
IL_0049: ret
} // end of method QueryExpressions::Issue437
+ .method public hidebysig static class [mscorlib]System.Collections.Generic.IEnumerable`1
+ Issue1310a(bool test) cil managed
+ {
+ // Code size 178 (0xb2)
+ .maxstack 3
+ IL_0000: ldarg.0
+ IL_0001: brtrue.s IL_0058
+
+ IL_0003: ldc.i4.0
+ IL_0004: ldc.i4 0xff
+ IL_0009: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [System.Core]System.Linq.Enumerable::Range(int32,
+ int32)
+ IL_000e: ldsfld class [mscorlib]System.Func`2 ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions/'<>c'::'<>9__21_2'
+ IL_0013: dup
+ IL_0014: brtrue.s IL_002d
+
+ IL_0016: pop
+ IL_0017: ldsfld class ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions/'<>c' ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions/'<>c'::'<>9'
+ IL_001c: ldftn instance bool ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions/'<>c'::'b__21_2'(int32)
+ IL_0022: newobj instance void class [mscorlib]System.Func`2::.ctor(object,
+ native int)
+ IL_0027: dup
+ IL_0028: stsfld class [mscorlib]System.Func`2 ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions/'<>c'::'<>9__21_2'
+ IL_002d: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [System.Core]System.Linq.Enumerable::Where(class [mscorlib]System.Collections.Generic.IEnumerable`1,
+ class [mscorlib]System.Func`2)
+ IL_0032: ldsfld class [mscorlib]System.Func`2 ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions/'<>c'::'<>9__21_3'
+ IL_0037: dup
+ IL_0038: brtrue.s IL_0051
+
+ IL_003a: pop
+ IL_003b: ldsfld class ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions/'<>c' ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions/'<>c'::'<>9'
+ IL_0040: ldftn instance char ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions/'<>c'::'b__21_3'(int32)
+ IL_0046: newobj instance void class [mscorlib]System.Func`2::.ctor(object,
+ native int)
+ IL_004b: dup
+ IL_004c: stsfld class [mscorlib]System.Func`2 ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions/'<>c'::'<>9__21_3'
+ IL_0051: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [System.Core]System.Linq.Enumerable::Select(class [mscorlib]System.Collections.Generic.IEnumerable`1,
+ class [mscorlib]System.Func`2)
+ IL_0056: br.s IL_00ab
+
+ IL_0058: ldc.i4.0
+ IL_0059: ldc.i4 0xff
+ IL_005e: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [System.Core]System.Linq.Enumerable::Range(int32,
+ int32)
+ IL_0063: ldsfld class [mscorlib]System.Func`2 ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions/'<>c'::'<>9__21_0'
+ IL_0068: dup
+ IL_0069: brtrue.s IL_0082
+
+ IL_006b: pop
+ IL_006c: ldsfld class ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions/'<>c' ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions/'<>c'::'<>9'
+ IL_0071: ldftn instance bool ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions/'<>c'::'b__21_0'(int32)
+ IL_0077: newobj instance void class [mscorlib]System.Func`2::.ctor(object,
+ native int)
+ IL_007c: dup
+ IL_007d: stsfld class [mscorlib]System.Func`2 ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions/'<>c'::'<>9__21_0'
+ IL_0082: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [System.Core]System.Linq.Enumerable::Where(class [mscorlib]System.Collections.Generic.IEnumerable`1,
+ class [mscorlib]System.Func`2)
+ IL_0087: ldsfld class [mscorlib]System.Func`2 ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions/'<>c'::'<>9__21_1'
+ IL_008c: dup
+ IL_008d: brtrue.s IL_00a6
+
+ IL_008f: pop
+ IL_0090: ldsfld class ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions/'<>c' ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions/'<>c'::'<>9'
+ IL_0095: ldftn instance char ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions/'<>c'::'b__21_1'(int32)
+ IL_009b: newobj instance void class [mscorlib]System.Func`2::.ctor(object,
+ native int)
+ IL_00a0: dup
+ IL_00a1: stsfld class [mscorlib]System.Func`2 ICSharpCode.Decompiler.Tests.TestCases.Pretty.QueryExpressions/'<>c'::'<>9__21_1'
+ IL_00a6: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [System.Core]System.Linq.Enumerable::Select(class [mscorlib]System.Collections.Generic.IEnumerable`1,
+ class [mscorlib]System.Func`2)
+ IL_00ab: dup
+ IL_00ac: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [System.Core]System.Linq.Enumerable::Concat(class [mscorlib]System.Collections.Generic.IEnumerable`1,
+ class [mscorlib]System.Collections.Generic.IEnumerable`1)
+ IL_00b1: ret
+ } // end of method QueryExpressions::Issue1310a
+
.method public hidebysig static valuetype ICSharpCode.Decompiler.Tests.TestCases.Pretty.Maybe`1
Cast