mirror of https://github.com/icsharpcode/ILSpy.git
70 changed files with 7585 additions and 689 deletions
@ -1,30 +0,0 @@ |
|||||||
using NUnit.Framework; |
|
||||||
using System; |
|
||||||
using System.Collections.Generic; |
|
||||||
using System.Linq; |
|
||||||
using System.Reflection; |
|
||||||
using System.Text; |
|
||||||
using System.Threading.Tasks; |
|
||||||
|
|
||||||
namespace ICSharpCode.Decompiler.Tests.FSharpPatterns |
|
||||||
{ |
|
||||||
[TestFixture] |
|
||||||
public class FSharpPatternTests |
|
||||||
{ |
|
||||||
[Test] |
|
||||||
public void FSharpUsingDecompilesToCSharpUsing_Debug() |
|
||||||
{ |
|
||||||
var ilCode = TestHelpers.FuzzyReadResource("FSharpUsing.fs.Debug.il"); |
|
||||||
var csharpCode = TestHelpers.FuzzyReadResource("FSharpUsing.fs.Debug.cs"); |
|
||||||
TestHelpers.RunIL(ilCode, csharpCode); |
|
||||||
} |
|
||||||
|
|
||||||
[Test] |
|
||||||
public void FSharpUsingDecompilesToCSharpUsing_Release() |
|
||||||
{ |
|
||||||
var ilCode = TestHelpers.FuzzyReadResource("FSharpUsing.fs.Release.il"); |
|
||||||
var csharpCode = TestHelpers.FuzzyReadResource("FSharpUsing.fs.Release.cs"); |
|
||||||
TestHelpers.RunIL(ilCode, csharpCode); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
@ -1,64 +0,0 @@ |
|||||||
using System; |
|
||||||
using System.IO; |
|
||||||
|
|
||||||
public static class FSharpUsingPatterns |
|
||||||
{ |
|
||||||
public static void sample1() |
|
||||||
{ |
|
||||||
using (FileStream fs = File.Create("x.txt")) |
|
||||||
{ |
|
||||||
fs.WriteByte((byte)1); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public static void sample2() |
|
||||||
{ |
|
||||||
Console.WriteLine("some text"); |
|
||||||
using (FileStream fs = File.Create("x.txt")) |
|
||||||
{ |
|
||||||
fs.WriteByte((byte)2); |
|
||||||
Console.WriteLine("some text"); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public static void sample3() |
|
||||||
{ |
|
||||||
Console.WriteLine("some text"); |
|
||||||
using (FileStream fs = File.Create("x.txt")) |
|
||||||
{ |
|
||||||
fs.WriteByte((byte)3); |
|
||||||
} |
|
||||||
Console.WriteLine("some text"); |
|
||||||
} |
|
||||||
|
|
||||||
public static void sample4() |
|
||||||
{ |
|
||||||
Console.WriteLine("some text"); |
|
||||||
int num; |
|
||||||
using (FileStream fs = File.OpenRead("x.txt")) |
|
||||||
{ |
|
||||||
num = fs.ReadByte(); |
|
||||||
} |
|
||||||
int firstByte = num; |
|
||||||
Console.WriteLine("read:" + firstByte.ToString()); |
|
||||||
} |
|
||||||
|
|
||||||
public static void sample5() |
|
||||||
{ |
|
||||||
Console.WriteLine("some text"); |
|
||||||
int num; |
|
||||||
using (FileStream fs = File.OpenRead("x.txt")) |
|
||||||
{ |
|
||||||
num = fs.ReadByte(); |
|
||||||
} |
|
||||||
int firstByte = num; |
|
||||||
int num3; |
|
||||||
using (FileStream fs = File.OpenRead("x.txt")) |
|
||||||
{ |
|
||||||
int num2 = fs.ReadByte(); |
|
||||||
num3 = fs.ReadByte(); |
|
||||||
} |
|
||||||
int secondByte = num3; |
|
||||||
Console.WriteLine("read: {0}, {1}", firstByte, secondByte); |
|
||||||
} |
|
||||||
} |
|
||||||
@ -1,64 +0,0 @@ |
|||||||
using System; |
|
||||||
using System.IO; |
|
||||||
|
|
||||||
public static class FSharpUsingPatterns |
|
||||||
{ |
|
||||||
public static void sample1() |
|
||||||
{ |
|
||||||
using (FileStream fs = File.Create("x.txt")) |
|
||||||
{ |
|
||||||
fs.WriteByte(1); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public static void sample2() |
|
||||||
{ |
|
||||||
Console.WriteLine("some text"); |
|
||||||
using (FileStream fs = File.Create("x.txt")) |
|
||||||
{ |
|
||||||
fs.WriteByte(2); |
|
||||||
Console.WriteLine("some text"); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public static void sample3() |
|
||||||
{ |
|
||||||
Console.WriteLine("some text"); |
|
||||||
using (FileStream fs = File.Create("x.txt")) |
|
||||||
{ |
|
||||||
fs.WriteByte(3); |
|
||||||
} |
|
||||||
Console.WriteLine("some text"); |
|
||||||
} |
|
||||||
|
|
||||||
public static void sample4() |
|
||||||
{ |
|
||||||
Console.WriteLine("some text"); |
|
||||||
int num; |
|
||||||
using (FileStream fs = File.OpenRead("x.txt")) |
|
||||||
{ |
|
||||||
num = fs.ReadByte(); |
|
||||||
} |
|
||||||
int firstByte = num; |
|
||||||
Console.WriteLine("read:" + firstByte.ToString()); |
|
||||||
} |
|
||||||
|
|
||||||
public static void sample5() |
|
||||||
{ |
|
||||||
Console.WriteLine("some text"); |
|
||||||
int secondByte; |
|
||||||
using (FileStream fs = File.OpenRead("x.txt")) |
|
||||||
{ |
|
||||||
secondByte = fs.ReadByte(); |
|
||||||
} |
|
||||||
int firstByte = secondByte; |
|
||||||
int num2; |
|
||||||
using (FileStream fs = File.OpenRead("x.txt")) |
|
||||||
{ |
|
||||||
int num = fs.ReadByte(); |
|
||||||
num2 = fs.ReadByte(); |
|
||||||
} |
|
||||||
secondByte = num2; |
|
||||||
Console.WriteLine("read: {0}, {1}", firstByte, secondByte); |
|
||||||
} |
|
||||||
} |
|
||||||
@ -1,87 +0,0 @@ |
|||||||
using ICSharpCode.Decompiler.Ast; |
|
||||||
using ICSharpCode.Decompiler.Tests.Helpers; |
|
||||||
using ICSharpCode.NRefactory.CSharp; |
|
||||||
using Mono.Cecil; |
|
||||||
using NUnit.Framework; |
|
||||||
using System; |
|
||||||
using System.Collections.Generic; |
|
||||||
using System.Diagnostics; |
|
||||||
using System.IO; |
|
||||||
using System.Linq; |
|
||||||
using System.Reflection; |
|
||||||
using System.Text; |
|
||||||
using System.Threading.Tasks; |
|
||||||
|
|
||||||
namespace ICSharpCode.Decompiler.Tests.FSharpPatterns |
|
||||||
{ |
|
||||||
public class TestHelpers |
|
||||||
{ |
|
||||||
public static string FuzzyReadResource(string resourceName) |
|
||||||
{ |
|
||||||
var asm = Assembly.GetExecutingAssembly(); |
|
||||||
var allResources = asm.GetManifestResourceNames(); |
|
||||||
var fullResourceName = allResources.Single(r => r.EndsWith(resourceName, StringComparison.OrdinalIgnoreCase)); |
|
||||||
return new StreamReader(asm.GetManifestResourceStream(fullResourceName)).ReadToEnd(); |
|
||||||
} |
|
||||||
|
|
||||||
static Lazy<string> ilasm = new Lazy<string>(() => ToolLocator.FindTool("ilasm.exe")); |
|
||||||
static Lazy<string> ildasm = new Lazy<string>(() => ToolLocator.FindTool("ildasm.exe")); |
|
||||||
|
|
||||||
public static string CompileIL(string source) |
|
||||||
{ |
|
||||||
if (ilasm.Value == null) |
|
||||||
Assert.NotNull(ilasm.Value, "Could not find ILASM.exe"); |
|
||||||
var tmp = Path.GetTempFileName(); |
|
||||||
File.Delete(tmp); |
|
||||||
var sourceFile = Path.ChangeExtension(tmp, ".il"); |
|
||||||
File.WriteAllText(sourceFile, source); |
|
||||||
var asmFile = Path.ChangeExtension(sourceFile, ".dll"); |
|
||||||
|
|
||||||
var args = string.Format("{0} /dll /debug /output:{1}", sourceFile, asmFile); |
|
||||||
using (var proc = Process.Start(new ProcessStartInfo(ilasm.Value, args) { UseShellExecute = false, })) |
|
||||||
{ |
|
||||||
proc.WaitForExit(); |
|
||||||
Assert.AreEqual(0, proc.ExitCode); |
|
||||||
} |
|
||||||
|
|
||||||
File.Delete(sourceFile); |
|
||||||
Assert.True(File.Exists(asmFile), "Assembly File does not exist"); |
|
||||||
return asmFile; |
|
||||||
} |
|
||||||
|
|
||||||
public static void RunIL(string ilCode, string expectedCSharpCode) |
|
||||||
{ |
|
||||||
var asmFilePath = CompileIL(ilCode); |
|
||||||
CompareAssemblyAgainstCSharp(expectedCSharpCode, asmFilePath); |
|
||||||
} |
|
||||||
|
|
||||||
private static void CompareAssemblyAgainstCSharp(string expectedCSharpCode, string asmFilePath) |
|
||||||
{ |
|
||||||
var module = ModuleDefinition.ReadModule(asmFilePath); |
|
||||||
try |
|
||||||
{ |
|
||||||
try { module.ReadSymbols(); } catch { } |
|
||||||
AstBuilder decompiler = new AstBuilder(new DecompilerContext(module)); |
|
||||||
decompiler.AddAssembly(module); |
|
||||||
new Helpers.RemoveCompilerAttribute().Run(decompiler.SyntaxTree); |
|
||||||
StringWriter output = new StringWriter(); |
|
||||||
|
|
||||||
// the F# assembly contains a namespace `<StartupCode$tmp6D55>` where the part after tmp is randomly generated.
|
|
||||||
// remove this from the ast to simplify the diff
|
|
||||||
var startupCodeNode = decompiler.SyntaxTree.Children.OfType<NamespaceDeclaration>().SingleOrDefault(d => d.Name.StartsWith("<StartupCode$", StringComparison.Ordinal)); |
|
||||||
if (startupCodeNode != null) |
|
||||||
startupCodeNode.Remove(); |
|
||||||
|
|
||||||
decompiler.GenerateCode(new PlainTextOutput(output)); |
|
||||||
var fullCSharpCode = output.ToString(); |
|
||||||
|
|
||||||
CodeAssert.AreEqual(expectedCSharpCode, output.ToString()); |
|
||||||
} |
|
||||||
finally |
|
||||||
{ |
|
||||||
File.Delete(asmFilePath); |
|
||||||
File.Delete(Path.ChangeExtension(asmFilePath, ".pdb")); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
@ -1,99 +0,0 @@ |
|||||||
using System; |
|
||||||
using System.Collections.Generic; |
|
||||||
using System.IO; |
|
||||||
using System.Linq; |
|
||||||
using System.Text; |
|
||||||
using System.Threading.Tasks; |
|
||||||
|
|
||||||
namespace ICSharpCode.Decompiler.Tests.FSharpPatterns |
|
||||||
{ |
|
||||||
public class ToolLocator |
|
||||||
{ |
|
||||||
public static string FindTool(string fileName) |
|
||||||
{ |
|
||||||
var allPaths = FindPathForDotNetFramework().Concat(FindPathForWindowsSdk()); |
|
||||||
return allPaths.Select(dir => Path.Combine(dir, fileName)).FirstOrDefault(File.Exists); |
|
||||||
} |
|
||||||
|
|
||||||
private static IEnumerable<string> FindPathForWindowsSdk() |
|
||||||
{ |
|
||||||
string[] windowsSdkPaths = new[] |
|
||||||
{ |
|
||||||
@"Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\", |
|
||||||
@"Microsoft SDKs\Windows\v8.0A\bin\", |
|
||||||
@"Microsoft SDKs\Windows\v8.0\bin\NETFX 4.0 Tools\", |
|
||||||
@"Microsoft SDKs\Windows\v8.0\bin\", |
|
||||||
@"Microsoft SDKs\Windows\v7.1A\bin\NETFX 4.0 Tools\", |
|
||||||
@"Microsoft SDKs\Windows\v7.1A\bin\", |
|
||||||
@"Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools\", |
|
||||||
@"Microsoft SDKs\Windows\v7.0A\bin\", |
|
||||||
@"Microsoft SDKs\Windows\v6.1A\bin\", |
|
||||||
@"Microsoft SDKs\Windows\v6.0A\bin\", |
|
||||||
@"Microsoft SDKs\Windows\v6.0\bin\", |
|
||||||
@"Microsoft.NET\FrameworkSDK\bin" |
|
||||||
}; |
|
||||||
|
|
||||||
foreach (var possiblePath in windowsSdkPaths) |
|
||||||
{ |
|
||||||
string fullPath = string.Empty; |
|
||||||
|
|
||||||
// Check alternate program file paths as well as 64-bit versions.
|
|
||||||
if (Environment.Is64BitProcess) |
|
||||||
{ |
|
||||||
fullPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), possiblePath, "x64"); |
|
||||||
if (Directory.Exists(fullPath)) |
|
||||||
{ |
|
||||||
yield return fullPath; |
|
||||||
} |
|
||||||
|
|
||||||
fullPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86), possiblePath, "x64"); |
|
||||||
if (Directory.Exists(fullPath)) |
|
||||||
{ |
|
||||||
yield return fullPath; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
fullPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), possiblePath); |
|
||||||
if (Directory.Exists(fullPath)) |
|
||||||
{ |
|
||||||
yield return fullPath; |
|
||||||
} |
|
||||||
|
|
||||||
fullPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86), possiblePath); |
|
||||||
if (Directory.Exists(fullPath)) |
|
||||||
{ |
|
||||||
yield return fullPath; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
private static IEnumerable<string> FindPathForDotNetFramework() |
|
||||||
{ |
|
||||||
string[] frameworkPaths = new[] |
|
||||||
{ |
|
||||||
@"Microsoft.NET\Framework\v4.0.30319", |
|
||||||
@"Microsoft.NET\Framework\v2.0.50727" |
|
||||||
}; |
|
||||||
|
|
||||||
foreach (var possiblePath in frameworkPaths) |
|
||||||
{ |
|
||||||
string fullPath = string.Empty; |
|
||||||
|
|
||||||
if (Environment.Is64BitProcess) |
|
||||||
{ |
|
||||||
fullPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Windows), possiblePath.Replace(@"\Framework\", @"\Framework64\")); |
|
||||||
if (Directory.Exists(fullPath)) |
|
||||||
{ |
|
||||||
yield return fullPath; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
fullPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Windows), possiblePath); |
|
||||||
if (Directory.Exists(fullPath)) |
|
||||||
{ |
|
||||||
yield return fullPath; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
@ -0,0 +1 @@ |
|||||||
|
/*.dll |
||||||
@ -0,0 +1,30 @@ |
|||||||
|
open System |
||||||
|
|
||||||
|
let disposable() = { new IDisposable with member x.Dispose() = () } |
||||||
|
|
||||||
|
let getSeq() = seq { yield 1; } |
||||||
|
let getList() = [ 1 ] |
||||||
|
let getArray() = [| 1 |] |
||||||
|
|
||||||
|
[<EntryPoint>] |
||||||
|
let main argv = |
||||||
|
|
||||||
|
// nested using scopes? |
||||||
|
use disp1 = |
||||||
|
use disp2 = disposable() |
||||||
|
Console.WriteLine "Hello 1" |
||||||
|
disposable() |
||||||
|
|
||||||
|
// for loop over seq |
||||||
|
for i in getSeq() do |
||||||
|
Console.WriteLine i |
||||||
|
|
||||||
|
// for loop over list |
||||||
|
for i in getList() do |
||||||
|
Console.WriteLine i |
||||||
|
|
||||||
|
// for loop over array |
||||||
|
for i in getArray() do |
||||||
|
Console.WriteLine i |
||||||
|
|
||||||
|
0 // return an integer exit code |
||||||
@ -0,0 +1,209 @@ |
|||||||
|
|
||||||
|
// C:\Users\Siegfried\Documents\Visual Studio 2017\Projects\ConsoleApp13\ConsoleApplication1\bin\Debug\ConsoleApplication1.exe
|
||||||
|
// ConsoleApplication1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
|
||||||
|
// Global type: <Module>
|
||||||
|
// Entry point: Program.main
|
||||||
|
// Architecture: AnyCPU (32-bit preferred)
|
||||||
|
// Runtime: .NET 4.0
|
||||||
|
|
||||||
|
using Microsoft.FSharp.Collections; |
||||||
|
using Microsoft.FSharp.Core; |
||||||
|
using Microsoft.FSharp.Core.CompilerServices; |
||||||
|
using System; |
||||||
|
using System.Collections.Generic; |
||||||
|
using System.Diagnostics; |
||||||
|
using System.Reflection; |
||||||
|
using System.Runtime.CompilerServices; |
||||||
|
using System.Runtime.InteropServices; |
||||||
|
using System.Runtime.Versioning; |
||||||
|
|
||||||
|
[assembly: FSharpInterfaceDataVersion(2, 0, 0)] |
||||||
|
[assembly: TargetFramework(".NETFramework,Version=v4.6.1", FrameworkDisplayName = ".NET Framework 4.6.1")] |
||||||
|
[assembly: AssemblyTitle("ConsoleApplication1")] |
||||||
|
[assembly: AssemblyDescription("")] |
||||||
|
[assembly: AssemblyConfiguration("")] |
||||||
|
[assembly: AssemblyCompany("")] |
||||||
|
[assembly: AssemblyProduct("ConsoleApplication1")] |
||||||
|
[assembly: AssemblyCopyright("Copyright © 2017")] |
||||||
|
[assembly: AssemblyTrademark("")] |
||||||
|
[assembly: AssemblyCulture("")] |
||||||
|
[assembly: ComVisible(false)] |
||||||
|
[assembly: Guid("e0674ff5-5e8f-4d4e-a88f-e447192454c7")] |
||||||
|
[assembly: AssemblyVersion("1.0.0.0")] |
||||||
|
[assembly: AssemblyFileVersion("1.0.0.0")] |
||||||
|
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations)] |
||||||
|
[assembly: AssemblyVersion("1.0.0.0")] |
||||||
|
[CompilationMapping(SourceConstructFlags.Module)] |
||||||
|
public static class Program |
||||||
|
{ |
||||||
|
[Serializable] |
||||||
|
[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)] |
||||||
|
[CompilationMapping(SourceConstructFlags.Closure)] |
||||||
|
internal sealed class disposable@3 : IDisposable |
||||||
|
{ |
||||||
|
public disposable@3() |
||||||
|
{ |
||||||
|
((object)this)..ctor(); |
||||||
|
} |
||||||
|
|
||||||
|
private void System-IDisposable-Dispose() |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
void IDisposable.Dispose() |
||||||
|
{ |
||||||
|
//ILSpy generated this explicit interface implementation from .override directive in System-IDisposable-Dispose
|
||||||
|
this.System-IDisposable-Dispose(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
[Serializable] |
||||||
|
[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)] |
||||||
|
[CompilationMapping(SourceConstructFlags.Closure)] |
||||||
|
internal sealed class getSeq@5 : GeneratedSequenceBase<int> |
||||||
|
{ |
||||||
|
[DebuggerBrowsable(DebuggerBrowsableState.Never)] |
||||||
|
[CompilerGenerated] |
||||||
|
[DebuggerNonUserCode] |
||||||
|
public int pc = pc; |
||||||
|
|
||||||
|
[DebuggerBrowsable(DebuggerBrowsableState.Never)] |
||||||
|
[CompilerGenerated] |
||||||
|
[DebuggerNonUserCode] |
||||||
|
public int current = current; |
||||||
|
|
||||||
|
public getSeq@5(int pc, int current) |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
public override int GenerateNext(ref IEnumerable<int> next) |
||||||
|
{ |
||||||
|
switch (this.pc) |
||||||
|
{ |
||||||
|
default: |
||||||
|
this.pc = 1; |
||||||
|
this.current = 1; |
||||||
|
return 1; |
||||||
|
case 1: |
||||||
|
this.pc = 2; |
||||||
|
break; |
||||||
|
case 2: |
||||||
|
break; |
||||||
|
} |
||||||
|
this.current = 0; |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
public override void Close() |
||||||
|
{ |
||||||
|
this.pc = 2; |
||||||
|
} |
||||||
|
|
||||||
|
public override bool get_CheckClose() |
||||||
|
{ |
||||||
|
switch (this.pc) |
||||||
|
{ |
||||||
|
default: |
||||||
|
return false; |
||||||
|
case 0: |
||||||
|
case 2: |
||||||
|
return false; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
[CompilerGenerated] |
||||||
|
[DebuggerNonUserCode] |
||||||
|
public override int get_LastGenerated() |
||||||
|
{ |
||||||
|
return this.current; |
||||||
|
} |
||||||
|
|
||||||
|
[CompilerGenerated] |
||||||
|
[DebuggerNonUserCode] |
||||||
|
public override IEnumerator<int> GetFreshEnumerator() |
||||||
|
{ |
||||||
|
return new getSeq@5(0, 0); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public static IDisposable disposable() |
||||||
|
{ |
||||||
|
return new disposable@3(); |
||||||
|
} |
||||||
|
|
||||||
|
public static IEnumerable<int> getSeq() |
||||||
|
{ |
||||||
|
return new getSeq@5(0, 0); |
||||||
|
} |
||||||
|
|
||||||
|
public static FSharpList<int> getList() |
||||||
|
{ |
||||||
|
return FSharpList<int>.Cons(1, FSharpList<int>.Empty); |
||||||
|
} |
||||||
|
|
||||||
|
public static int[] getArray() |
||||||
|
{ |
||||||
|
return new int[1] |
||||||
|
{ |
||||||
|
1 |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
[EntryPoint] |
||||||
|
public static int main(string[] argv) |
||||||
|
{ |
||||||
|
IDisposable disposable = default(IDisposable); |
||||||
|
using (Program.disposable()) |
||||||
|
{ |
||||||
|
Console.WriteLine("Hello 1"); |
||||||
|
disposable = Program.disposable(); |
||||||
|
} |
||||||
|
using (disposable) |
||||||
|
{ |
||||||
|
IEnumerable<int> seq = Program.getSeq(); |
||||||
|
using (IEnumerator<int> enumerator = seq.GetEnumerator()) |
||||||
|
{ |
||||||
|
while (true) |
||||||
|
{ |
||||||
|
if (!enumerator.MoveNext()) |
||||||
|
break; |
||||||
|
int k = enumerator.Current; |
||||||
|
Console.WriteLine(k); |
||||||
|
} |
||||||
|
} |
||||||
|
FSharpList<int> fSharpList = Program.getList(); |
||||||
|
FSharpList<int> tailOrNull = fSharpList.TailOrNull; |
||||||
|
while (true) |
||||||
|
{ |
||||||
|
if (tailOrNull == null) |
||||||
|
break; |
||||||
|
int j = fSharpList.HeadOrDefault; |
||||||
|
Console.WriteLine(j); |
||||||
|
fSharpList = tailOrNull; |
||||||
|
tailOrNull = fSharpList.TailOrNull; |
||||||
|
} |
||||||
|
int[] array = Program.getArray(); |
||||||
|
for (int l = 0; l < array.Length; l++) |
||||||
|
{ |
||||||
|
int i = array[l]; |
||||||
|
Console.WriteLine(i); |
||||||
|
} |
||||||
|
return 0; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
namespace <StartupCode$ConsoleApplication1> |
||||||
|
{ |
||||||
|
internal static class $Program |
||||||
|
{ |
||||||
|
} |
||||||
|
internal static class $AssemblyInfo |
||||||
|
{ |
||||||
|
} |
||||||
|
} |
||||||
|
namespace <StartupCode$ConsoleApplication1>.$.NETFramework,Version=v4.6.1 |
||||||
|
{ |
||||||
|
internal static class AssemblyAttributes |
||||||
|
{ |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,586 @@ |
|||||||
|
// C:\Users\Siegfried\Documents\Visual Studio 2017\Projects\ConsoleApp13\ConsoleApplication1\bin\Debug\ConsoleApplication1.exe |
||||||
|
|
||||||
|
.assembly extern mscorlib |
||||||
|
{ |
||||||
|
.publickeytoken = ( |
||||||
|
b7 7a 5c 56 19 34 e0 89 |
||||||
|
) |
||||||
|
.ver 4:0:0:0 |
||||||
|
} |
||||||
|
.assembly extern FSharp.Core |
||||||
|
{ |
||||||
|
.publickeytoken = ( |
||||||
|
b0 3f 5f 7f 11 d5 0a 3a |
||||||
|
) |
||||||
|
.ver 4:4:1:0 |
||||||
|
} |
||||||
|
.assembly ConsoleApplication1 |
||||||
|
{ |
||||||
|
.custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, int32, int32) = ( |
||||||
|
01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 |
||||||
|
) |
||||||
|
.custom instance void [mscorlib]System.Runtime.Versioning.TargetFrameworkAttribute::.ctor(string) = ( |
||||||
|
01 00 1c 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b |
||||||
|
2c 56 65 72 73 69 6f 6e 3d 76 34 2e 36 2e 31 01 |
||||||
|
00 54 0e 14 46 72 61 6d 65 77 6f 72 6b 44 69 73 |
||||||
|
70 6c 61 79 4e 61 6d 65 14 2e 4e 45 54 20 46 72 |
||||||
|
61 6d 65 77 6f 72 6b 20 34 2e 36 2e 31 |
||||||
|
) |
||||||
|
.custom instance void [mscorlib]System.Reflection.AssemblyTitleAttribute::.ctor(string) = ( |
||||||
|
01 00 13 43 6f 6e 73 6f 6c 65 41 70 70 6c 69 63 |
||||||
|
61 74 69 6f 6e 31 00 00 |
||||||
|
) |
||||||
|
.custom instance void [mscorlib]System.Reflection.AssemblyDescriptionAttribute::.ctor(string) = ( |
||||||
|
01 00 00 00 00 |
||||||
|
) |
||||||
|
.custom instance void [mscorlib]System.Reflection.AssemblyConfigurationAttribute::.ctor(string) = ( |
||||||
|
01 00 00 00 00 |
||||||
|
) |
||||||
|
.custom instance void [mscorlib]System.Reflection.AssemblyCompanyAttribute::.ctor(string) = ( |
||||||
|
01 00 00 00 00 |
||||||
|
) |
||||||
|
.custom instance void [mscorlib]System.Reflection.AssemblyProductAttribute::.ctor(string) = ( |
||||||
|
01 00 13 43 6f 6e 73 6f 6c 65 41 70 70 6c 69 63 |
||||||
|
61 74 69 6f 6e 31 00 00 |
||||||
|
) |
||||||
|
.custom instance void [mscorlib]System.Reflection.AssemblyCopyrightAttribute::.ctor(string) = ( |
||||||
|
01 00 12 43 6f 70 79 72 69 67 68 74 20 c2 a9 20 |
||||||
|
20 32 30 31 37 00 00 |
||||||
|
) |
||||||
|
.custom instance void [mscorlib]System.Reflection.AssemblyTrademarkAttribute::.ctor(string) = ( |
||||||
|
01 00 00 00 00 |
||||||
|
) |
||||||
|
.custom instance void [mscorlib]System.Reflection.AssemblyCultureAttribute::.ctor(string) = ( |
||||||
|
01 00 00 00 00 |
||||||
|
) |
||||||
|
.custom instance void [mscorlib]System.Runtime.InteropServices.ComVisibleAttribute::.ctor(bool) = ( |
||||||
|
01 00 00 00 00 |
||||||
|
) |
||||||
|
.custom instance void [mscorlib]System.Runtime.InteropServices.GuidAttribute::.ctor(string) = ( |
||||||
|
01 00 24 65 30 36 37 34 66 66 35 2d 35 65 38 66 |
||||||
|
2d 34 64 34 65 2d 61 38 38 66 2d 65 34 34 37 31 |
||||||
|
39 32 34 35 34 63 37 00 00 |
||||||
|
) |
||||||
|
.custom instance void [mscorlib]System.Reflection.AssemblyVersionAttribute::.ctor(string) = ( |
||||||
|
01 00 07 31 2e 30 2e 30 2e 30 00 00 |
||||||
|
) |
||||||
|
.custom instance void [mscorlib]System.Reflection.AssemblyFileVersionAttribute::.ctor(string) = ( |
||||||
|
01 00 07 31 2e 30 2e 30 2e 30 00 00 |
||||||
|
) |
||||||
|
.custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( |
||||||
|
01 00 01 01 00 00 00 00 |
||||||
|
) |
||||||
|
.hash algorithm 0x00008004 // SHA1 |
||||||
|
.ver 1:0:0:0 |
||||||
|
} |
||||||
|
|
||||||
|
.module ConsoleApplication1.exe |
||||||
|
// MVID: {59F64D20-6A1F-D4CE-A745-0383204DF659} |
||||||
|
.corflags 0x00020003 // ILOnly, Required32Bit, Preferred32Bit |
||||||
|
|
||||||
|
|
||||||
|
.class private auto ansi '<Module>' |
||||||
|
extends [mscorlib]System.Object |
||||||
|
{ |
||||||
|
} // end of class <Module> |
||||||
|
|
||||||
|
.class public auto ansi abstract sealed Program |
||||||
|
extends [mscorlib]System.Object |
||||||
|
{ |
||||||
|
.custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( |
||||||
|
01 00 07 00 00 00 00 00 |
||||||
|
) |
||||||
|
// Nested Types |
||||||
|
.class nested assembly auto auto sealed specialname serializable beforefieldinit disposable@3 |
||||||
|
extends [mscorlib]System.Object |
||||||
|
implements [mscorlib]System.IDisposable |
||||||
|
{ |
||||||
|
.custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( |
||||||
|
01 00 06 00 00 00 00 00 |
||||||
|
) |
||||||
|
// Methods |
||||||
|
.method public specialname rtspecialname |
||||||
|
instance void .ctor () cil managed |
||||||
|
{ |
||||||
|
// Method begins at RVA 0x21c8 |
||||||
|
// Code size 9 (0x9) |
||||||
|
.maxstack 8 |
||||||
|
|
||||||
|
IL_0000: ldarg.0 |
||||||
|
IL_0001: callvirt instance void [mscorlib]System.Object::.ctor() |
||||||
|
IL_0006: ldarg.0 |
||||||
|
IL_0007: pop |
||||||
|
IL_0008: ret |
||||||
|
} // end of method disposable@3::.ctor |
||||||
|
|
||||||
|
.method private final hidebysig newslot virtual |
||||||
|
instance void 'System-IDisposable-Dispose' () cil managed |
||||||
|
{ |
||||||
|
.override method instance void [mscorlib]System.IDisposable::Dispose() |
||||||
|
// Method begins at RVA 0x21d4 |
||||||
|
// Code size 1 (0x1) |
||||||
|
.maxstack 8 |
||||||
|
|
||||||
|
IL_0000: ret |
||||||
|
} // end of method disposable@3::'System-IDisposable-Dispose' |
||||||
|
|
||||||
|
} // end of class disposable@3 |
||||||
|
|
||||||
|
.class nested assembly auto auto sealed specialname serializable beforefieldinit getSeq@5 |
||||||
|
extends class [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1<int32> |
||||||
|
{ |
||||||
|
.custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( |
||||||
|
01 00 06 00 00 00 00 00 |
||||||
|
) |
||||||
|
// Fields |
||||||
|
.field public int32 pc |
||||||
|
.custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( |
||||||
|
01 00 00 00 00 00 00 00 |
||||||
|
) |
||||||
|
.custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( |
||||||
|
01 00 00 00 |
||||||
|
) |
||||||
|
.custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( |
||||||
|
01 00 00 00 |
||||||
|
) |
||||||
|
.field public int32 current |
||||||
|
.custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( |
||||||
|
01 00 00 00 00 00 00 00 |
||||||
|
) |
||||||
|
.custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( |
||||||
|
01 00 00 00 |
||||||
|
) |
||||||
|
.custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( |
||||||
|
01 00 00 00 |
||||||
|
) |
||||||
|
|
||||||
|
// Methods |
||||||
|
.method public specialname rtspecialname |
||||||
|
instance void .ctor ( |
||||||
|
int32 pc, |
||||||
|
int32 current |
||||||
|
) cil managed |
||||||
|
{ |
||||||
|
// Method begins at RVA 0x21d8 |
||||||
|
// Code size 21 (0x15) |
||||||
|
.maxstack 8 |
||||||
|
|
||||||
|
IL_0000: ldarg.0 |
||||||
|
IL_0001: ldarg.1 |
||||||
|
IL_0002: stfld int32 Program/getSeq@5::pc |
||||||
|
IL_0007: ldarg.0 |
||||||
|
IL_0008: ldarg.2 |
||||||
|
IL_0009: stfld int32 Program/getSeq@5::current |
||||||
|
IL_000e: ldarg.0 |
||||||
|
IL_000f: call instance void class [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1<int32>::.ctor() |
||||||
|
IL_0014: ret |
||||||
|
} // end of method getSeq@5::.ctor |
||||||
|
|
||||||
|
.method public strict virtual |
||||||
|
instance int32 GenerateNext ( |
||||||
|
class [mscorlib]System.Collections.Generic.IEnumerable`1<int32>& next |
||||||
|
) cil managed |
||||||
|
{ |
||||||
|
// Method begins at RVA 0x21f0 |
||||||
|
// Code size 66 (0x42) |
||||||
|
.maxstack 6 |
||||||
|
|
||||||
|
IL_0000: ldarg.0 |
||||||
|
IL_0001: ldfld int32 Program/getSeq@5::pc |
||||||
|
IL_0006: ldc.i4.1 |
||||||
|
IL_0007: sub |
||||||
|
IL_0008: switch (IL_0017, IL_0019) |
||||||
|
|
||||||
|
IL_0015: br.s IL_0021 |
||||||
|
|
||||||
|
IL_0017: br.s IL_001b |
||||||
|
|
||||||
|
IL_0019: br.s IL_001e |
||||||
|
|
||||||
|
IL_001b: nop |
||||||
|
IL_001c: br.s IL_0032 |
||||||
|
|
||||||
|
IL_001e: nop |
||||||
|
IL_001f: br.s IL_0039 |
||||||
|
|
||||||
|
IL_0021: nop |
||||||
|
IL_0022: ldarg.0 |
||||||
|
IL_0023: ldc.i4.1 |
||||||
|
IL_0024: stfld int32 Program/getSeq@5::pc |
||||||
|
IL_0029: ldarg.0 |
||||||
|
IL_002a: ldc.i4.1 |
||||||
|
IL_002b: stfld int32 Program/getSeq@5::current |
||||||
|
IL_0030: ldc.i4.1 |
||||||
|
IL_0031: ret |
||||||
|
|
||||||
|
IL_0032: ldarg.0 |
||||||
|
IL_0033: ldc.i4.2 |
||||||
|
IL_0034: stfld int32 Program/getSeq@5::pc |
||||||
|
|
||||||
|
IL_0039: ldarg.0 |
||||||
|
IL_003a: ldc.i4.0 |
||||||
|
IL_003b: stfld int32 Program/getSeq@5::current |
||||||
|
IL_0040: ldc.i4.0 |
||||||
|
IL_0041: ret |
||||||
|
} // end of method getSeq@5::GenerateNext |
||||||
|
|
||||||
|
.method public strict virtual |
||||||
|
instance void Close () cil managed |
||||||
|
{ |
||||||
|
// Method begins at RVA 0x2240 |
||||||
|
// Code size 8 (0x8) |
||||||
|
.maxstack 8 |
||||||
|
|
||||||
|
IL_0000: ldarg.0 |
||||||
|
IL_0001: ldc.i4.2 |
||||||
|
IL_0002: stfld int32 Program/getSeq@5::pc |
||||||
|
IL_0007: ret |
||||||
|
} // end of method getSeq@5::Close |
||||||
|
|
||||||
|
.method public strict virtual |
||||||
|
instance bool get_CheckClose () cil managed |
||||||
|
{ |
||||||
|
// Method begins at RVA 0x224c |
||||||
|
// Code size 45 (0x2d) |
||||||
|
.maxstack 8 |
||||||
|
|
||||||
|
IL_0000: ldarg.0 |
||||||
|
IL_0001: ldfld int32 Program/getSeq@5::pc |
||||||
|
IL_0006: switch (IL_0019, IL_001b, IL_001d) |
||||||
|
|
||||||
|
IL_0017: br.s IL_0028 |
||||||
|
|
||||||
|
IL_0019: br.s IL_001f |
||||||
|
|
||||||
|
IL_001b: br.s IL_0022 |
||||||
|
|
||||||
|
IL_001d: br.s IL_0025 |
||||||
|
|
||||||
|
IL_001f: nop |
||||||
|
IL_0020: br.s IL_002b |
||||||
|
|
||||||
|
IL_0022: nop |
||||||
|
IL_0023: br.s IL_0029 |
||||||
|
|
||||||
|
IL_0025: nop |
||||||
|
IL_0026: br.s IL_002b |
||||||
|
|
||||||
|
IL_0028: nop |
||||||
|
|
||||||
|
IL_0029: ldc.i4.0 |
||||||
|
IL_002a: ret |
||||||
|
|
||||||
|
IL_002b: ldc.i4.0 |
||||||
|
IL_002c: ret |
||||||
|
} // end of method getSeq@5::get_CheckClose |
||||||
|
|
||||||
|
.method public strict virtual |
||||||
|
instance int32 get_LastGenerated () cil managed |
||||||
|
{ |
||||||
|
.custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( |
||||||
|
01 00 00 00 |
||||||
|
) |
||||||
|
.custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( |
||||||
|
01 00 00 00 |
||||||
|
) |
||||||
|
// Method begins at RVA 0x227c |
||||||
|
// Code size 7 (0x7) |
||||||
|
.maxstack 8 |
||||||
|
|
||||||
|
IL_0000: ldarg.0 |
||||||
|
IL_0001: ldfld int32 Program/getSeq@5::current |
||||||
|
IL_0006: ret |
||||||
|
} // end of method getSeq@5::get_LastGenerated |
||||||
|
|
||||||
|
.method public strict virtual |
||||||
|
instance class [mscorlib]System.Collections.Generic.IEnumerator`1<int32> GetFreshEnumerator () cil managed |
||||||
|
{ |
||||||
|
.custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( |
||||||
|
01 00 00 00 |
||||||
|
) |
||||||
|
.custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( |
||||||
|
01 00 00 00 |
||||||
|
) |
||||||
|
// Method begins at RVA 0x2284 |
||||||
|
// Code size 8 (0x8) |
||||||
|
.maxstack 8 |
||||||
|
|
||||||
|
IL_0000: ldc.i4.0 |
||||||
|
IL_0001: ldc.i4.0 |
||||||
|
IL_0002: newobj instance void Program/getSeq@5::.ctor(int32, int32) |
||||||
|
IL_0007: ret |
||||||
|
} // end of method getSeq@5::GetFreshEnumerator |
||||||
|
|
||||||
|
} // end of class getSeq@5 |
||||||
|
|
||||||
|
|
||||||
|
// Methods |
||||||
|
.method public static |
||||||
|
class [mscorlib]System.IDisposable disposable () cil managed |
||||||
|
{ |
||||||
|
// Method begins at RVA 0x2050 |
||||||
|
// Code size 6 (0x6) |
||||||
|
.maxstack 8 |
||||||
|
|
||||||
|
IL_0000: newobj instance void Program/disposable@3::.ctor() |
||||||
|
IL_0005: ret |
||||||
|
} // end of method Program::disposable |
||||||
|
|
||||||
|
.method public static |
||||||
|
class [mscorlib]System.Collections.Generic.IEnumerable`1<int32> getSeq () cil managed |
||||||
|
{ |
||||||
|
// Method begins at RVA 0x2058 |
||||||
|
// Code size 8 (0x8) |
||||||
|
.maxstack 8 |
||||||
|
|
||||||
|
IL_0000: ldc.i4.0 |
||||||
|
IL_0001: ldc.i4.0 |
||||||
|
IL_0002: newobj instance void Program/getSeq@5::.ctor(int32, int32) |
||||||
|
IL_0007: ret |
||||||
|
} // end of method Program::getSeq |
||||||
|
|
||||||
|
.method public static |
||||||
|
class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<int32> getList () cil managed |
||||||
|
{ |
||||||
|
// Method begins at RVA 0x2064 |
||||||
|
// Code size 12 (0xc) |
||||||
|
.maxstack 8 |
||||||
|
|
||||||
|
IL_0000: ldc.i4.1 |
||||||
|
IL_0001: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<!0> class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<int32>::get_Empty() |
||||||
|
IL_0006: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<!0> class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<int32>::Cons(!0, class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<!0>) |
||||||
|
IL_000b: ret |
||||||
|
} // end of method Program::getList |
||||||
|
|
||||||
|
.method public static |
||||||
|
int32[] getArray () cil managed |
||||||
|
{ |
||||||
|
// Method begins at RVA 0x2074 |
||||||
|
// Code size 15 (0xf) |
||||||
|
.maxstack 8 |
||||||
|
|
||||||
|
IL_0000: ldc.i4.1 |
||||||
|
IL_0001: newarr [mscorlib]System.Int32 |
||||||
|
IL_0006: dup |
||||||
|
IL_0007: ldc.i4.0 |
||||||
|
IL_0008: ldc.i4.1 |
||||||
|
IL_0009: stelem.any [mscorlib]System.Int32 |
||||||
|
IL_000e: ret |
||||||
|
} // end of method Program::getArray |
||||||
|
|
||||||
|
.method public static |
||||||
|
int32 main ( |
||||||
|
string[] argv |
||||||
|
) cil managed |
||||||
|
{ |
||||||
|
.custom instance void [FSharp.Core]Microsoft.FSharp.Core.EntryPointAttribute::.ctor() = ( |
||||||
|
01 00 00 00 |
||||||
|
) |
||||||
|
// Method begins at RVA 0x2084 |
||||||
|
// Code size 270 (0x10e) |
||||||
|
.maxstack 4 |
||||||
|
.entrypoint |
||||||
|
.locals init ( |
||||||
|
[0] class [mscorlib]System.IDisposable, |
||||||
|
[1] class [mscorlib]System.IDisposable, |
||||||
|
[2] class [mscorlib]System.IDisposable, |
||||||
|
[3] class [mscorlib]System.IDisposable, |
||||||
|
[4] int32, |
||||||
|
[5] class [mscorlib]System.Collections.Generic.IEnumerable`1<int32>, |
||||||
|
[6] class [mscorlib]System.Collections.Generic.IEnumerator`1<int32>, |
||||||
|
[7] class [FSharp.Core]Microsoft.FSharp.Core.Unit, |
||||||
|
[8] int32, |
||||||
|
[9] class [mscorlib]System.IDisposable, |
||||||
|
[10] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<int32>, |
||||||
|
[11] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<int32>, |
||||||
|
[12] int32, |
||||||
|
[13] int32[], |
||||||
|
[14] int32, |
||||||
|
[15] int32, |
||||||
|
[16] class [mscorlib]System.IDisposable |
||||||
|
) |
||||||
|
|
||||||
|
IL_0000: call class [mscorlib]System.IDisposable Program::disposable() |
||||||
|
IL_0005: stloc.1 |
||||||
|
.try |
||||||
|
{ |
||||||
|
IL_0006: ldstr "Hello 1" |
||||||
|
IL_000b: call void [mscorlib]System.Console::WriteLine(string) |
||||||
|
IL_0010: call class [mscorlib]System.IDisposable Program::disposable() |
||||||
|
IL_0015: stloc.2 |
||||||
|
IL_0016: leave.s IL_0032 |
||||||
|
} // end .try |
||||||
|
finally |
||||||
|
{ |
||||||
|
IL_0018: ldloc.1 |
||||||
|
IL_0019: isinst [mscorlib]System.IDisposable |
||||||
|
IL_001e: stloc.3 |
||||||
|
IL_001f: ldloc.3 |
||||||
|
IL_0020: brfalse.s IL_0024 |
||||||
|
|
||||||
|
IL_0022: br.s IL_0026 |
||||||
|
|
||||||
|
IL_0024: br.s IL_002f |
||||||
|
|
||||||
|
IL_0026: ldloc.3 |
||||||
|
IL_0027: callvirt instance void [mscorlib]System.IDisposable::Dispose() |
||||||
|
IL_002c: ldnull |
||||||
|
IL_002d: pop |
||||||
|
IL_002e: endfinally |
||||||
|
|
||||||
|
IL_002f: ldnull |
||||||
|
IL_0030: pop |
||||||
|
IL_0031: endfinally |
||||||
|
} // end handler |
||||||
|
|
||||||
|
IL_0032: ldloc.2 |
||||||
|
IL_0033: stloc.0 |
||||||
|
.try |
||||||
|
{ |
||||||
|
IL_0034: call class [mscorlib]System.Collections.Generic.IEnumerable`1<int32> Program::getSeq() |
||||||
|
IL_0039: stloc.s 5 |
||||||
|
IL_003b: ldloc.s 5 |
||||||
|
IL_003d: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1<!0> class [mscorlib]System.Collections.Generic.IEnumerable`1<int32>::GetEnumerator() |
||||||
|
IL_0042: stloc.s 6 |
||||||
|
.try |
||||||
|
{ |
||||||
|
// loop start (head: IL_0044) |
||||||
|
IL_0044: ldloc.s 6 |
||||||
|
IL_0046: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() |
||||||
|
IL_004b: brfalse.s IL_0060 |
||||||
|
|
||||||
|
IL_004d: ldloc.s 6 |
||||||
|
IL_004f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1<int32>::get_Current() |
||||||
|
IL_0054: stloc.s 8 |
||||||
|
IL_0056: ldloc.s 8 |
||||||
|
IL_0058: call void [mscorlib]System.Console::WriteLine(int32) |
||||||
|
IL_005d: nop |
||||||
|
IL_005e: br.s IL_0044 |
||||||
|
// end loop |
||||||
|
|
||||||
|
IL_0060: ldnull |
||||||
|
IL_0061: stloc.s 7 |
||||||
|
IL_0063: leave.s IL_0083 |
||||||
|
} // end .try |
||||||
|
finally |
||||||
|
{ |
||||||
|
IL_0065: ldloc.s 6 |
||||||
|
IL_0067: isinst [mscorlib]System.IDisposable |
||||||
|
IL_006c: stloc.s 9 |
||||||
|
IL_006e: ldloc.s 9 |
||||||
|
IL_0070: brfalse.s IL_0074 |
||||||
|
|
||||||
|
IL_0072: br.s IL_0076 |
||||||
|
|
||||||
|
IL_0074: br.s IL_0080 |
||||||
|
|
||||||
|
IL_0076: ldloc.s 9 |
||||||
|
IL_0078: callvirt instance void [mscorlib]System.IDisposable::Dispose() |
||||||
|
IL_007d: ldnull |
||||||
|
IL_007e: pop |
||||||
|
IL_007f: endfinally |
||||||
|
|
||||||
|
IL_0080: ldnull |
||||||
|
IL_0081: pop |
||||||
|
IL_0082: endfinally |
||||||
|
} // end handler |
||||||
|
|
||||||
|
IL_0083: ldloc.s 7 |
||||||
|
IL_0085: pop |
||||||
|
IL_0086: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<int32> Program::getList() |
||||||
|
IL_008b: stloc.s 10 |
||||||
|
IL_008d: ldloc.s 10 |
||||||
|
IL_008f: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<!0> class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<int32>::get_TailOrNull() |
||||||
|
IL_0094: stloc.s 11 |
||||||
|
// loop start (head: IL_0096) |
||||||
|
IL_0096: ldloc.s 11 |
||||||
|
IL_0098: ldnull |
||||||
|
IL_0099: cgt.un |
||||||
|
IL_009b: brfalse.s IL_00bd |
||||||
|
|
||||||
|
IL_009d: ldloc.s 10 |
||||||
|
IL_009f: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<int32>::get_HeadOrDefault() |
||||||
|
IL_00a4: stloc.s 12 |
||||||
|
IL_00a6: ldloc.s 12 |
||||||
|
IL_00a8: call void [mscorlib]System.Console::WriteLine(int32) |
||||||
|
IL_00ad: ldloc.s 11 |
||||||
|
IL_00af: stloc.s 10 |
||||||
|
IL_00b1: ldloc.s 10 |
||||||
|
IL_00b3: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<!0> class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<int32>::get_TailOrNull() |
||||||
|
IL_00b8: stloc.s 11 |
||||||
|
IL_00ba: nop |
||||||
|
IL_00bb: br.s IL_0096 |
||||||
|
// end loop |
||||||
|
|
||||||
|
IL_00bd: call int32[] Program::getArray() |
||||||
|
IL_00c2: stloc.s 13 |
||||||
|
IL_00c4: ldc.i4.0 |
||||||
|
IL_00c5: stloc.s 14 |
||||||
|
IL_00c7: br.s IL_00e1 |
||||||
|
// loop start (head: IL_00e1) |
||||||
|
IL_00c9: ldloc.s 13 |
||||||
|
IL_00cb: ldloc.s 14 |
||||||
|
IL_00cd: ldelem.any [mscorlib]System.Int32 |
||||||
|
IL_00d2: stloc.s 15 |
||||||
|
IL_00d4: ldloc.s 15 |
||||||
|
IL_00d6: call void [mscorlib]System.Console::WriteLine(int32) |
||||||
|
IL_00db: ldloc.s 14 |
||||||
|
IL_00dd: ldc.i4.1 |
||||||
|
IL_00de: add |
||||||
|
IL_00df: stloc.s 14 |
||||||
|
|
||||||
|
IL_00e1: ldloc.s 14 |
||||||
|
IL_00e3: ldloc.s 13 |
||||||
|
IL_00e5: ldlen |
||||||
|
IL_00e6: conv.i4 |
||||||
|
IL_00e7: blt.s IL_00c9 |
||||||
|
// end loop |
||||||
|
|
||||||
|
IL_00e9: ldc.i4.0 |
||||||
|
IL_00ea: stloc.s 4 |
||||||
|
IL_00ec: leave.s IL_010b |
||||||
|
} // end .try |
||||||
|
finally |
||||||
|
{ |
||||||
|
IL_00ee: ldloc.0 |
||||||
|
IL_00ef: isinst [mscorlib]System.IDisposable |
||||||
|
IL_00f4: stloc.s 16 |
||||||
|
IL_00f6: ldloc.s 16 |
||||||
|
IL_00f8: brfalse.s IL_00fc |
||||||
|
|
||||||
|
IL_00fa: br.s IL_00fe |
||||||
|
|
||||||
|
IL_00fc: br.s IL_0108 |
||||||
|
|
||||||
|
IL_00fe: ldloc.s 16 |
||||||
|
IL_0100: callvirt instance void [mscorlib]System.IDisposable::Dispose() |
||||||
|
IL_0105: ldnull |
||||||
|
IL_0106: pop |
||||||
|
IL_0107: endfinally |
||||||
|
|
||||||
|
IL_0108: ldnull |
||||||
|
IL_0109: pop |
||||||
|
IL_010a: endfinally |
||||||
|
} // end handler |
||||||
|
|
||||||
|
IL_010b: ldloc.s 4 |
||||||
|
IL_010d: ret |
||||||
|
} // end of method Program::main |
||||||
|
|
||||||
|
} // end of class Program |
||||||
|
|
||||||
|
.class private auto ansi abstract sealed '<StartupCode$ConsoleApplication1>.$Program' |
||||||
|
extends [mscorlib]System.Object |
||||||
|
{ |
||||||
|
} // end of class <StartupCode$ConsoleApplication1>.$Program |
||||||
|
|
||||||
|
.class private auto ansi abstract sealed '<StartupCode$ConsoleApplication1>.$AssemblyInfo' |
||||||
|
extends [mscorlib]System.Object |
||||||
|
{ |
||||||
|
} // end of class <StartupCode$ConsoleApplication1>.$AssemblyInfo |
||||||
|
|
||||||
|
.class private auto ansi abstract sealed '<StartupCode$ConsoleApplication1>.$.NETFramework,Version=v4.6.1.AssemblyAttributes' |
||||||
|
extends [mscorlib]System.Object |
||||||
|
{ |
||||||
|
} // end of class <StartupCode$ConsoleApplication1>.$.NETFramework,Version=v4.6.1.AssemblyAttributes |
||||||
|
|
||||||
@ -0,0 +1,210 @@ |
|||||||
|
|
||||||
|
// C:\Users\Siegfried\Documents\Visual Studio 2017\Projects\ConsoleApp13\ConsoleApplication1\bin\Release\ConsoleApplication1.exe
|
||||||
|
// ConsoleApplication1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
|
||||||
|
// Global type: <Module>
|
||||||
|
// Entry point: Program.main
|
||||||
|
// Architecture: AnyCPU (32-bit preferred)
|
||||||
|
// Runtime: .NET 4.0
|
||||||
|
|
||||||
|
using Microsoft.FSharp.Collections; |
||||||
|
using Microsoft.FSharp.Core; |
||||||
|
using Microsoft.FSharp.Core.CompilerServices; |
||||||
|
using System; |
||||||
|
using System.Collections.Generic; |
||||||
|
using System.Diagnostics; |
||||||
|
using System.Reflection; |
||||||
|
using System.Runtime.CompilerServices; |
||||||
|
using System.Runtime.InteropServices; |
||||||
|
using System.Runtime.Versioning; |
||||||
|
|
||||||
|
[assembly: FSharpInterfaceDataVersion(2, 0, 0)] |
||||||
|
[assembly: TargetFramework(".NETFramework,Version=v4.6.1", FrameworkDisplayName = ".NET Framework 4.6.1")] |
||||||
|
[assembly: AssemblyTitle("ConsoleApplication1")] |
||||||
|
[assembly: AssemblyDescription("")] |
||||||
|
[assembly: AssemblyConfiguration("")] |
||||||
|
[assembly: AssemblyCompany("")] |
||||||
|
[assembly: AssemblyProduct("ConsoleApplication1")] |
||||||
|
[assembly: AssemblyCopyright("Copyright © 2017")] |
||||||
|
[assembly: AssemblyTrademark("")] |
||||||
|
[assembly: AssemblyCulture("")] |
||||||
|
[assembly: ComVisible(false)] |
||||||
|
[assembly: Guid("e0674ff5-5e8f-4d4e-a88f-e447192454c7")] |
||||||
|
[assembly: AssemblyVersion("1.0.0.0")] |
||||||
|
[assembly: AssemblyFileVersion("1.0.0.0")] |
||||||
|
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.None)] |
||||||
|
[assembly: AssemblyVersion("1.0.0.0")] |
||||||
|
[CompilationMapping(SourceConstructFlags.Module)] |
||||||
|
public static class Program |
||||||
|
{ |
||||||
|
[Serializable] |
||||||
|
[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)] |
||||||
|
[CompilationMapping(SourceConstructFlags.Closure)] |
||||||
|
internal sealed class disposable@3 : IDisposable |
||||||
|
{ |
||||||
|
public disposable@3() |
||||||
|
{ |
||||||
|
((object)this)..ctor(); |
||||||
|
} |
||||||
|
|
||||||
|
private void System-IDisposable-Dispose() |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
void IDisposable.Dispose() |
||||||
|
{ |
||||||
|
//ILSpy generated this explicit interface implementation from .override directive in System-IDisposable-Dispose
|
||||||
|
this.System-IDisposable-Dispose(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
[Serializable] |
||||||
|
[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)] |
||||||
|
[CompilationMapping(SourceConstructFlags.Closure)] |
||||||
|
internal sealed class getSeq@5 : GeneratedSequenceBase<int> |
||||||
|
{ |
||||||
|
[DebuggerBrowsable(DebuggerBrowsableState.Never)] |
||||||
|
[CompilerGenerated] |
||||||
|
[DebuggerNonUserCode] |
||||||
|
public int pc = pc; |
||||||
|
|
||||||
|
[DebuggerBrowsable(DebuggerBrowsableState.Never)] |
||||||
|
[CompilerGenerated] |
||||||
|
[DebuggerNonUserCode] |
||||||
|
public int current = current; |
||||||
|
|
||||||
|
public getSeq@5(int pc, int current) |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
public override int GenerateNext(ref IEnumerable<int> next) |
||||||
|
{ |
||||||
|
switch (this.pc) |
||||||
|
{ |
||||||
|
default: |
||||||
|
this.pc = 1; |
||||||
|
this.current = 1; |
||||||
|
return 1; |
||||||
|
case 1: |
||||||
|
this.pc = 2; |
||||||
|
break; |
||||||
|
case 2: |
||||||
|
break; |
||||||
|
} |
||||||
|
this.current = 0; |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
public override void Close() |
||||||
|
{ |
||||||
|
this.pc = 2; |
||||||
|
} |
||||||
|
|
||||||
|
public override bool get_CheckClose() |
||||||
|
{ |
||||||
|
switch (this.pc) |
||||||
|
{ |
||||||
|
default: |
||||||
|
return false; |
||||||
|
case 0: |
||||||
|
case 2: |
||||||
|
return false; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
[CompilerGenerated] |
||||||
|
[DebuggerNonUserCode] |
||||||
|
public override int get_LastGenerated() |
||||||
|
{ |
||||||
|
return this.current; |
||||||
|
} |
||||||
|
|
||||||
|
[CompilerGenerated] |
||||||
|
[DebuggerNonUserCode] |
||||||
|
public override IEnumerator<int> GetFreshEnumerator() |
||||||
|
{ |
||||||
|
return new getSeq@5(0, 0); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public static IDisposable disposable() |
||||||
|
{ |
||||||
|
return new disposable@3(); |
||||||
|
} |
||||||
|
|
||||||
|
public static IEnumerable<int> getSeq() |
||||||
|
{ |
||||||
|
return new getSeq@5(0, 0); |
||||||
|
} |
||||||
|
|
||||||
|
public static FSharpList<int> getList() |
||||||
|
{ |
||||||
|
return FSharpList<int>.Cons(1, FSharpList<int>.Empty); |
||||||
|
} |
||||||
|
|
||||||
|
public static int[] getArray() |
||||||
|
{ |
||||||
|
return new int[1] |
||||||
|
{ |
||||||
|
1 |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
[EntryPoint] |
||||||
|
public static int main(string[] argv) |
||||||
|
{ |
||||||
|
IDisposable disposable = default(IDisposable); |
||||||
|
using (Program.disposable()) |
||||||
|
{ |
||||||
|
Console.WriteLine("Hello 1"); |
||||||
|
disposable = Program.disposable(); |
||||||
|
} |
||||||
|
using (disposable) |
||||||
|
{ |
||||||
|
IEnumerable<int> seq = Program.getSeq(); |
||||||
|
using (IEnumerator<int> enumerator = seq.GetEnumerator()) |
||||||
|
{ |
||||||
|
while (true) |
||||||
|
{ |
||||||
|
if (!enumerator.MoveNext()) |
||||||
|
break; |
||||||
|
Console.WriteLine(enumerator.Current); |
||||||
|
} |
||||||
|
} |
||||||
|
FSharpList<int> fSharpList = FSharpList<int>.Cons(1, FSharpList<int>.Empty); |
||||||
|
FSharpList<int> tailOrNull = fSharpList.TailOrNull; |
||||||
|
while (true) |
||||||
|
{ |
||||||
|
if (tailOrNull == null) |
||||||
|
break; |
||||||
|
int j = fSharpList.HeadOrDefault; |
||||||
|
Console.WriteLine(j); |
||||||
|
fSharpList = tailOrNull; |
||||||
|
tailOrNull = fSharpList.TailOrNull; |
||||||
|
} |
||||||
|
int[] array = new int[1] |
||||||
|
{ |
||||||
|
1 |
||||||
|
}; |
||||||
|
for (int j = 0; j < array.Length; j++) |
||||||
|
{ |
||||||
|
Console.WriteLine(array[j]); |
||||||
|
} |
||||||
|
return 0; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
namespace <StartupCode$ConsoleApplication1> |
||||||
|
{ |
||||||
|
internal static class $Program |
||||||
|
{ |
||||||
|
} |
||||||
|
internal static class $AssemblyInfo |
||||||
|
{ |
||||||
|
} |
||||||
|
} |
||||||
|
namespace <StartupCode$ConsoleApplication1>.$.NETFramework,Version=v4.6.1 |
||||||
|
{ |
||||||
|
internal static class AssemblyAttributes |
||||||
|
{ |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,561 @@ |
|||||||
|
// C:\Users\Siegfried\Documents\Visual Studio 2017\Projects\ConsoleApp13\ConsoleApplication1\bin\Release\ConsoleApplication1.exe |
||||||
|
|
||||||
|
.assembly extern mscorlib |
||||||
|
{ |
||||||
|
.publickeytoken = ( |
||||||
|
b7 7a 5c 56 19 34 e0 89 |
||||||
|
) |
||||||
|
.ver 4:0:0:0 |
||||||
|
} |
||||||
|
.assembly extern FSharp.Core |
||||||
|
{ |
||||||
|
.publickeytoken = ( |
||||||
|
b0 3f 5f 7f 11 d5 0a 3a |
||||||
|
) |
||||||
|
.ver 4:4:1:0 |
||||||
|
} |
||||||
|
.assembly ConsoleApplication1 |
||||||
|
{ |
||||||
|
.custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, int32, int32) = ( |
||||||
|
01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 |
||||||
|
) |
||||||
|
.custom instance void [mscorlib]System.Runtime.Versioning.TargetFrameworkAttribute::.ctor(string) = ( |
||||||
|
01 00 1c 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b |
||||||
|
2c 56 65 72 73 69 6f 6e 3d 76 34 2e 36 2e 31 01 |
||||||
|
00 54 0e 14 46 72 61 6d 65 77 6f 72 6b 44 69 73 |
||||||
|
70 6c 61 79 4e 61 6d 65 14 2e 4e 45 54 20 46 72 |
||||||
|
61 6d 65 77 6f 72 6b 20 34 2e 36 2e 31 |
||||||
|
) |
||||||
|
.custom instance void [mscorlib]System.Reflection.AssemblyTitleAttribute::.ctor(string) = ( |
||||||
|
01 00 13 43 6f 6e 73 6f 6c 65 41 70 70 6c 69 63 |
||||||
|
61 74 69 6f 6e 31 00 00 |
||||||
|
) |
||||||
|
.custom instance void [mscorlib]System.Reflection.AssemblyDescriptionAttribute::.ctor(string) = ( |
||||||
|
01 00 00 00 00 |
||||||
|
) |
||||||
|
.custom instance void [mscorlib]System.Reflection.AssemblyConfigurationAttribute::.ctor(string) = ( |
||||||
|
01 00 00 00 00 |
||||||
|
) |
||||||
|
.custom instance void [mscorlib]System.Reflection.AssemblyCompanyAttribute::.ctor(string) = ( |
||||||
|
01 00 00 00 00 |
||||||
|
) |
||||||
|
.custom instance void [mscorlib]System.Reflection.AssemblyProductAttribute::.ctor(string) = ( |
||||||
|
01 00 13 43 6f 6e 73 6f 6c 65 41 70 70 6c 69 63 |
||||||
|
61 74 69 6f 6e 31 00 00 |
||||||
|
) |
||||||
|
.custom instance void [mscorlib]System.Reflection.AssemblyCopyrightAttribute::.ctor(string) = ( |
||||||
|
01 00 12 43 6f 70 79 72 69 67 68 74 20 c2 a9 20 |
||||||
|
20 32 30 31 37 00 00 |
||||||
|
) |
||||||
|
.custom instance void [mscorlib]System.Reflection.AssemblyTrademarkAttribute::.ctor(string) = ( |
||||||
|
01 00 00 00 00 |
||||||
|
) |
||||||
|
.custom instance void [mscorlib]System.Reflection.AssemblyCultureAttribute::.ctor(string) = ( |
||||||
|
01 00 00 00 00 |
||||||
|
) |
||||||
|
.custom instance void [mscorlib]System.Runtime.InteropServices.ComVisibleAttribute::.ctor(bool) = ( |
||||||
|
01 00 00 00 00 |
||||||
|
) |
||||||
|
.custom instance void [mscorlib]System.Runtime.InteropServices.GuidAttribute::.ctor(string) = ( |
||||||
|
01 00 24 65 30 36 37 34 66 66 35 2d 35 65 38 66 |
||||||
|
2d 34 64 34 65 2d 61 38 38 66 2d 65 34 34 37 31 |
||||||
|
39 32 34 35 34 63 37 00 00 |
||||||
|
) |
||||||
|
.custom instance void [mscorlib]System.Reflection.AssemblyVersionAttribute::.ctor(string) = ( |
||||||
|
01 00 07 31 2e 30 2e 30 2e 30 00 00 |
||||||
|
) |
||||||
|
.custom instance void [mscorlib]System.Reflection.AssemblyFileVersionAttribute::.ctor(string) = ( |
||||||
|
01 00 07 31 2e 30 2e 30 2e 30 00 00 |
||||||
|
) |
||||||
|
.custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( |
||||||
|
01 00 00 00 00 00 00 00 |
||||||
|
) |
||||||
|
.hash algorithm 0x00008004 // SHA1 |
||||||
|
.ver 1:0:0:0 |
||||||
|
} |
||||||
|
|
||||||
|
.module ConsoleApplication1.exe |
||||||
|
// MVID: {59F64D28-6A1F-D4CE-A745-0383284DF659} |
||||||
|
.corflags 0x00020003 // ILOnly, Required32Bit, Preferred32Bit |
||||||
|
|
||||||
|
|
||||||
|
.class private auto ansi '<Module>' |
||||||
|
extends [mscorlib]System.Object |
||||||
|
{ |
||||||
|
} // end of class <Module> |
||||||
|
|
||||||
|
.class public auto ansi abstract sealed Program |
||||||
|
extends [mscorlib]System.Object |
||||||
|
{ |
||||||
|
.custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( |
||||||
|
01 00 07 00 00 00 00 00 |
||||||
|
) |
||||||
|
// Nested Types |
||||||
|
.class nested assembly auto auto sealed specialname serializable beforefieldinit disposable@3 |
||||||
|
extends [mscorlib]System.Object |
||||||
|
implements [mscorlib]System.IDisposable |
||||||
|
{ |
||||||
|
.custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( |
||||||
|
01 00 06 00 00 00 00 00 |
||||||
|
) |
||||||
|
// Methods |
||||||
|
.method public specialname rtspecialname |
||||||
|
instance void .ctor () cil managed |
||||||
|
{ |
||||||
|
// Method begins at RVA 0x21bc |
||||||
|
// Code size 9 (0x9) |
||||||
|
.maxstack 8 |
||||||
|
|
||||||
|
IL_0000: ldarg.0 |
||||||
|
IL_0001: callvirt instance void [mscorlib]System.Object::.ctor() |
||||||
|
IL_0006: ldarg.0 |
||||||
|
IL_0007: pop |
||||||
|
IL_0008: ret |
||||||
|
} // end of method disposable@3::.ctor |
||||||
|
|
||||||
|
.method private final hidebysig newslot virtual |
||||||
|
instance void 'System-IDisposable-Dispose' () cil managed |
||||||
|
{ |
||||||
|
.override method instance void [mscorlib]System.IDisposable::Dispose() |
||||||
|
// Method begins at RVA 0x21c8 |
||||||
|
// Code size 1 (0x1) |
||||||
|
.maxstack 8 |
||||||
|
|
||||||
|
IL_0000: ret |
||||||
|
} // end of method disposable@3::'System-IDisposable-Dispose' |
||||||
|
|
||||||
|
} // end of class disposable@3 |
||||||
|
|
||||||
|
.class nested assembly auto auto sealed specialname serializable beforefieldinit getSeq@5 |
||||||
|
extends class [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1<int32> |
||||||
|
{ |
||||||
|
.custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( |
||||||
|
01 00 06 00 00 00 00 00 |
||||||
|
) |
||||||
|
// Fields |
||||||
|
.field public int32 pc |
||||||
|
.custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( |
||||||
|
01 00 00 00 00 00 00 00 |
||||||
|
) |
||||||
|
.custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( |
||||||
|
01 00 00 00 |
||||||
|
) |
||||||
|
.custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( |
||||||
|
01 00 00 00 |
||||||
|
) |
||||||
|
.field public int32 current |
||||||
|
.custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( |
||||||
|
01 00 00 00 00 00 00 00 |
||||||
|
) |
||||||
|
.custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( |
||||||
|
01 00 00 00 |
||||||
|
) |
||||||
|
.custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( |
||||||
|
01 00 00 00 |
||||||
|
) |
||||||
|
|
||||||
|
// Methods |
||||||
|
.method public specialname rtspecialname |
||||||
|
instance void .ctor ( |
||||||
|
int32 pc, |
||||||
|
int32 current |
||||||
|
) cil managed |
||||||
|
{ |
||||||
|
// Method begins at RVA 0x21cc |
||||||
|
// Code size 21 (0x15) |
||||||
|
.maxstack 8 |
||||||
|
|
||||||
|
IL_0000: ldarg.0 |
||||||
|
IL_0001: ldarg.1 |
||||||
|
IL_0002: stfld int32 Program/getSeq@5::pc |
||||||
|
IL_0007: ldarg.0 |
||||||
|
IL_0008: ldarg.2 |
||||||
|
IL_0009: stfld int32 Program/getSeq@5::current |
||||||
|
IL_000e: ldarg.0 |
||||||
|
IL_000f: call instance void class [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1<int32>::.ctor() |
||||||
|
IL_0014: ret |
||||||
|
} // end of method getSeq@5::.ctor |
||||||
|
|
||||||
|
.method public strict virtual |
||||||
|
instance int32 GenerateNext ( |
||||||
|
class [mscorlib]System.Collections.Generic.IEnumerable`1<int32>& next |
||||||
|
) cil managed |
||||||
|
{ |
||||||
|
// Method begins at RVA 0x21e4 |
||||||
|
// Code size 62 (0x3e) |
||||||
|
.maxstack 8 |
||||||
|
|
||||||
|
IL_0000: ldarg.0 |
||||||
|
IL_0001: ldfld int32 Program/getSeq@5::pc |
||||||
|
IL_0006: ldc.i4.1 |
||||||
|
IL_0007: sub |
||||||
|
IL_0008: switch (IL_0018, IL_001b) |
||||||
|
|
||||||
|
IL_0015: nop |
||||||
|
IL_0016: br.s IL_001e |
||||||
|
|
||||||
|
IL_0018: nop |
||||||
|
IL_0019: br.s IL_002e |
||||||
|
|
||||||
|
IL_001b: nop |
||||||
|
IL_001c: br.s IL_0035 |
||||||
|
|
||||||
|
IL_001e: ldarg.0 |
||||||
|
IL_001f: ldc.i4.1 |
||||||
|
IL_0020: stfld int32 Program/getSeq@5::pc |
||||||
|
IL_0025: ldarg.0 |
||||||
|
IL_0026: ldc.i4.1 |
||||||
|
IL_0027: stfld int32 Program/getSeq@5::current |
||||||
|
IL_002c: ldc.i4.1 |
||||||
|
IL_002d: ret |
||||||
|
|
||||||
|
IL_002e: ldarg.0 |
||||||
|
IL_002f: ldc.i4.2 |
||||||
|
IL_0030: stfld int32 Program/getSeq@5::pc |
||||||
|
|
||||||
|
IL_0035: ldarg.0 |
||||||
|
IL_0036: ldc.i4.0 |
||||||
|
IL_0037: stfld int32 Program/getSeq@5::current |
||||||
|
IL_003c: ldc.i4.0 |
||||||
|
IL_003d: ret |
||||||
|
} // end of method getSeq@5::GenerateNext |
||||||
|
|
||||||
|
.method public strict virtual |
||||||
|
instance void Close () cil managed |
||||||
|
{ |
||||||
|
// Method begins at RVA 0x2224 |
||||||
|
// Code size 8 (0x8) |
||||||
|
.maxstack 8 |
||||||
|
|
||||||
|
IL_0000: ldarg.0 |
||||||
|
IL_0001: ldc.i4.2 |
||||||
|
IL_0002: stfld int32 Program/getSeq@5::pc |
||||||
|
IL_0007: ret |
||||||
|
} // end of method getSeq@5::Close |
||||||
|
|
||||||
|
.method public strict virtual |
||||||
|
instance bool get_CheckClose () cil managed |
||||||
|
{ |
||||||
|
// Method begins at RVA 0x2230 |
||||||
|
// Code size 39 (0x27) |
||||||
|
.maxstack 8 |
||||||
|
|
||||||
|
IL_0000: ldarg.0 |
||||||
|
IL_0001: ldfld int32 Program/getSeq@5::pc |
||||||
|
IL_0006: switch (IL_001a, IL_001d, IL_0020) |
||||||
|
|
||||||
|
IL_0017: nop |
||||||
|
IL_0018: br.s IL_0023 |
||||||
|
|
||||||
|
IL_001a: nop |
||||||
|
IL_001b: br.s IL_0025 |
||||||
|
|
||||||
|
IL_001d: nop |
||||||
|
IL_001e: br.s IL_0023 |
||||||
|
|
||||||
|
IL_0020: nop |
||||||
|
IL_0021: br.s IL_0025 |
||||||
|
|
||||||
|
IL_0023: ldc.i4.0 |
||||||
|
IL_0024: ret |
||||||
|
|
||||||
|
IL_0025: ldc.i4.0 |
||||||
|
IL_0026: ret |
||||||
|
} // end of method getSeq@5::get_CheckClose |
||||||
|
|
||||||
|
.method public strict virtual |
||||||
|
instance int32 get_LastGenerated () cil managed |
||||||
|
{ |
||||||
|
.custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( |
||||||
|
01 00 00 00 |
||||||
|
) |
||||||
|
.custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( |
||||||
|
01 00 00 00 |
||||||
|
) |
||||||
|
// Method begins at RVA 0x2258 |
||||||
|
// Code size 7 (0x7) |
||||||
|
.maxstack 8 |
||||||
|
|
||||||
|
IL_0000: ldarg.0 |
||||||
|
IL_0001: ldfld int32 Program/getSeq@5::current |
||||||
|
IL_0006: ret |
||||||
|
} // end of method getSeq@5::get_LastGenerated |
||||||
|
|
||||||
|
.method public strict virtual |
||||||
|
instance class [mscorlib]System.Collections.Generic.IEnumerator`1<int32> GetFreshEnumerator () cil managed |
||||||
|
{ |
||||||
|
.custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( |
||||||
|
01 00 00 00 |
||||||
|
) |
||||||
|
.custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( |
||||||
|
01 00 00 00 |
||||||
|
) |
||||||
|
// Method begins at RVA 0x2260 |
||||||
|
// Code size 8 (0x8) |
||||||
|
.maxstack 8 |
||||||
|
|
||||||
|
IL_0000: ldc.i4.0 |
||||||
|
IL_0001: ldc.i4.0 |
||||||
|
IL_0002: newobj instance void Program/getSeq@5::.ctor(int32, int32) |
||||||
|
IL_0007: ret |
||||||
|
} // end of method getSeq@5::GetFreshEnumerator |
||||||
|
|
||||||
|
} // end of class getSeq@5 |
||||||
|
|
||||||
|
|
||||||
|
// Methods |
||||||
|
.method public static |
||||||
|
class [mscorlib]System.IDisposable disposable () cil managed |
||||||
|
{ |
||||||
|
// Method begins at RVA 0x2050 |
||||||
|
// Code size 6 (0x6) |
||||||
|
.maxstack 8 |
||||||
|
|
||||||
|
IL_0000: newobj instance void Program/disposable@3::.ctor() |
||||||
|
IL_0005: ret |
||||||
|
} // end of method Program::disposable |
||||||
|
|
||||||
|
.method public static |
||||||
|
class [mscorlib]System.Collections.Generic.IEnumerable`1<int32> getSeq () cil managed |
||||||
|
{ |
||||||
|
// Method begins at RVA 0x2058 |
||||||
|
// Code size 8 (0x8) |
||||||
|
.maxstack 8 |
||||||
|
|
||||||
|
IL_0000: ldc.i4.0 |
||||||
|
IL_0001: ldc.i4.0 |
||||||
|
IL_0002: newobj instance void Program/getSeq@5::.ctor(int32, int32) |
||||||
|
IL_0007: ret |
||||||
|
} // end of method Program::getSeq |
||||||
|
|
||||||
|
.method public static |
||||||
|
class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<int32> getList () cil managed |
||||||
|
{ |
||||||
|
// Method begins at RVA 0x2064 |
||||||
|
// Code size 12 (0xc) |
||||||
|
.maxstack 8 |
||||||
|
|
||||||
|
IL_0000: ldc.i4.1 |
||||||
|
IL_0001: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<!0> class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<int32>::get_Empty() |
||||||
|
IL_0006: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<!0> class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<int32>::Cons(!0, class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<!0>) |
||||||
|
IL_000b: ret |
||||||
|
} // end of method Program::getList |
||||||
|
|
||||||
|
.method public static |
||||||
|
int32[] getArray () cil managed |
||||||
|
{ |
||||||
|
// Method begins at RVA 0x2074 |
||||||
|
// Code size 15 (0xf) |
||||||
|
.maxstack 8 |
||||||
|
|
||||||
|
IL_0000: ldc.i4.1 |
||||||
|
IL_0001: newarr [mscorlib]System.Int32 |
||||||
|
IL_0006: dup |
||||||
|
IL_0007: ldc.i4.0 |
||||||
|
IL_0008: ldc.i4.1 |
||||||
|
IL_0009: stelem.any [mscorlib]System.Int32 |
||||||
|
IL_000e: ret |
||||||
|
} // end of method Program::getArray |
||||||
|
|
||||||
|
.method public static |
||||||
|
int32 main ( |
||||||
|
string[] argv |
||||||
|
) cil managed |
||||||
|
{ |
||||||
|
.custom instance void [FSharp.Core]Microsoft.FSharp.Core.EntryPointAttribute::.ctor() = ( |
||||||
|
01 00 00 00 |
||||||
|
) |
||||||
|
// Method begins at RVA 0x2084 |
||||||
|
// Code size 259 (0x103) |
||||||
|
.maxstack 6 |
||||||
|
.entrypoint |
||||||
|
.locals init ( |
||||||
|
[0] class [mscorlib]System.IDisposable, |
||||||
|
[1] class [mscorlib]System.IDisposable, |
||||||
|
[2] class [mscorlib]System.IDisposable, |
||||||
|
[3] class [mscorlib]System.IDisposable, |
||||||
|
[4] int32, |
||||||
|
[5] class [mscorlib]System.Collections.Generic.IEnumerable`1<int32>, |
||||||
|
[6] class [mscorlib]System.Collections.Generic.IEnumerator`1<int32>, |
||||||
|
[7] class [FSharp.Core]Microsoft.FSharp.Core.Unit, |
||||||
|
[8] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<int32>, |
||||||
|
[9] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<int32>, |
||||||
|
[10] int32, |
||||||
|
[11] int32[] |
||||||
|
) |
||||||
|
|
||||||
|
IL_0000: call class [mscorlib]System.IDisposable Program::disposable() |
||||||
|
IL_0005: stloc.1 |
||||||
|
.try |
||||||
|
{ |
||||||
|
IL_0006: ldstr "Hello 1" |
||||||
|
IL_000b: call void [mscorlib]System.Console::WriteLine(string) |
||||||
|
IL_0010: call class [mscorlib]System.IDisposable Program::disposable() |
||||||
|
IL_0015: stloc.2 |
||||||
|
IL_0016: leave.s IL_002e |
||||||
|
} // end .try |
||||||
|
finally |
||||||
|
{ |
||||||
|
IL_0018: ldloc.1 |
||||||
|
IL_0019: isinst [mscorlib]System.IDisposable |
||||||
|
IL_001e: stloc.3 |
||||||
|
IL_001f: ldloc.3 |
||||||
|
IL_0020: brfalse.s IL_002b |
||||||
|
|
||||||
|
IL_0022: ldloc.3 |
||||||
|
IL_0023: callvirt instance void [mscorlib]System.IDisposable::Dispose() |
||||||
|
IL_0028: ldnull |
||||||
|
IL_0029: pop |
||||||
|
IL_002a: endfinally |
||||||
|
|
||||||
|
IL_002b: ldnull |
||||||
|
IL_002c: pop |
||||||
|
IL_002d: endfinally |
||||||
|
} // end handler |
||||||
|
|
||||||
|
IL_002e: ldloc.2 |
||||||
|
IL_002f: stloc.0 |
||||||
|
.try |
||||||
|
{ |
||||||
|
IL_0030: call class [mscorlib]System.Collections.Generic.IEnumerable`1<int32> Program::getSeq() |
||||||
|
IL_0035: stloc.s 5 |
||||||
|
IL_0037: ldloc.s 5 |
||||||
|
IL_0039: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1<!0> class [mscorlib]System.Collections.Generic.IEnumerable`1<int32>::GetEnumerator() |
||||||
|
IL_003e: stloc.s 6 |
||||||
|
.try |
||||||
|
{ |
||||||
|
// loop start (head: IL_0040) |
||||||
|
IL_0040: ldloc.s 6 |
||||||
|
IL_0042: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() |
||||||
|
IL_0047: brfalse.s IL_0058 |
||||||
|
|
||||||
|
IL_0049: ldloc.s 6 |
||||||
|
IL_004b: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1<int32>::get_Current() |
||||||
|
IL_0050: call void [mscorlib]System.Console::WriteLine(int32) |
||||||
|
IL_0055: nop |
||||||
|
IL_0056: br.s IL_0040 |
||||||
|
// end loop |
||||||
|
|
||||||
|
IL_0058: ldnull |
||||||
|
IL_0059: stloc.s 7 |
||||||
|
IL_005b: leave.s IL_0074 |
||||||
|
} // end .try |
||||||
|
finally |
||||||
|
{ |
||||||
|
IL_005d: ldloc.s 6 |
||||||
|
IL_005f: isinst [mscorlib]System.IDisposable |
||||||
|
IL_0064: stloc.1 |
||||||
|
IL_0065: ldloc.1 |
||||||
|
IL_0066: brfalse.s IL_0071 |
||||||
|
|
||||||
|
IL_0068: ldloc.1 |
||||||
|
IL_0069: callvirt instance void [mscorlib]System.IDisposable::Dispose() |
||||||
|
IL_006e: ldnull |
||||||
|
IL_006f: pop |
||||||
|
IL_0070: endfinally |
||||||
|
|
||||||
|
IL_0071: ldnull |
||||||
|
IL_0072: pop |
||||||
|
IL_0073: endfinally |
||||||
|
} // end handler |
||||||
|
|
||||||
|
IL_0074: ldloc.s 7 |
||||||
|
IL_0076: pop |
||||||
|
IL_0077: ldc.i4.1 |
||||||
|
IL_0078: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<!0> class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<int32>::get_Empty() |
||||||
|
IL_007d: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<!0> class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<int32>::Cons(!0, class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<!0>) |
||||||
|
IL_0082: stloc.s 8 |
||||||
|
IL_0084: ldloc.s 8 |
||||||
|
IL_0086: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<!0> class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<int32>::get_TailOrNull() |
||||||
|
IL_008b: stloc.s 9 |
||||||
|
// loop start (head: IL_008d) |
||||||
|
IL_008d: ldloc.s 9 |
||||||
|
IL_008f: ldnull |
||||||
|
IL_0090: cgt.un |
||||||
|
IL_0092: brfalse.s IL_00b4 |
||||||
|
|
||||||
|
IL_0094: ldloc.s 8 |
||||||
|
IL_0096: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<int32>::get_HeadOrDefault() |
||||||
|
IL_009b: stloc.s 10 |
||||||
|
IL_009d: ldloc.s 10 |
||||||
|
IL_009f: call void [mscorlib]System.Console::WriteLine(int32) |
||||||
|
IL_00a4: ldloc.s 9 |
||||||
|
IL_00a6: stloc.s 8 |
||||||
|
IL_00a8: ldloc.s 8 |
||||||
|
IL_00aa: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<!0> class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<int32>::get_TailOrNull() |
||||||
|
IL_00af: stloc.s 9 |
||||||
|
IL_00b1: nop |
||||||
|
IL_00b2: br.s IL_008d |
||||||
|
// end loop |
||||||
|
|
||||||
|
IL_00b4: ldc.i4.1 |
||||||
|
IL_00b5: newarr [mscorlib]System.Int32 |
||||||
|
IL_00ba: dup |
||||||
|
IL_00bb: ldc.i4.0 |
||||||
|
IL_00bc: ldc.i4.1 |
||||||
|
IL_00bd: stelem.any [mscorlib]System.Int32 |
||||||
|
IL_00c2: stloc.s 11 |
||||||
|
IL_00c4: ldc.i4.0 |
||||||
|
IL_00c5: stloc.s 10 |
||||||
|
IL_00c7: br.s IL_00dd |
||||||
|
// loop start (head: IL_00dd) |
||||||
|
IL_00c9: ldloc.s 11 |
||||||
|
IL_00cb: ldloc.s 10 |
||||||
|
IL_00cd: ldelem.any [mscorlib]System.Int32 |
||||||
|
IL_00d2: call void [mscorlib]System.Console::WriteLine(int32) |
||||||
|
IL_00d7: ldloc.s 10 |
||||||
|
IL_00d9: ldc.i4.1 |
||||||
|
IL_00da: add |
||||||
|
IL_00db: stloc.s 10 |
||||||
|
|
||||||
|
IL_00dd: ldloc.s 10 |
||||||
|
IL_00df: ldloc.s 11 |
||||||
|
IL_00e1: ldlen |
||||||
|
IL_00e2: conv.i4 |
||||||
|
IL_00e3: blt.s IL_00c9 |
||||||
|
// end loop |
||||||
|
|
||||||
|
IL_00e5: ldc.i4.0 |
||||||
|
IL_00e6: stloc.s 4 |
||||||
|
IL_00e8: leave.s IL_0100 |
||||||
|
} // end .try |
||||||
|
finally |
||||||
|
{ |
||||||
|
IL_00ea: ldloc.0 |
||||||
|
IL_00eb: isinst [mscorlib]System.IDisposable |
||||||
|
IL_00f0: stloc.1 |
||||||
|
IL_00f1: ldloc.1 |
||||||
|
IL_00f2: brfalse.s IL_00fd |
||||||
|
|
||||||
|
IL_00f4: ldloc.1 |
||||||
|
IL_00f5: callvirt instance void [mscorlib]System.IDisposable::Dispose() |
||||||
|
IL_00fa: ldnull |
||||||
|
IL_00fb: pop |
||||||
|
IL_00fc: endfinally |
||||||
|
|
||||||
|
IL_00fd: ldnull |
||||||
|
IL_00fe: pop |
||||||
|
IL_00ff: endfinally |
||||||
|
} // end handler |
||||||
|
|
||||||
|
IL_0100: ldloc.s 4 |
||||||
|
IL_0102: ret |
||||||
|
} // end of method Program::main |
||||||
|
|
||||||
|
} // end of class Program |
||||||
|
|
||||||
|
.class private auto ansi abstract sealed '<StartupCode$ConsoleApplication1>.$Program' |
||||||
|
extends [mscorlib]System.Object |
||||||
|
{ |
||||||
|
} // end of class <StartupCode$ConsoleApplication1>.$Program |
||||||
|
|
||||||
|
.class private auto ansi abstract sealed '<StartupCode$ConsoleApplication1>.$AssemblyInfo' |
||||||
|
extends [mscorlib]System.Object |
||||||
|
{ |
||||||
|
} // end of class <StartupCode$ConsoleApplication1>.$AssemblyInfo |
||||||
|
|
||||||
|
.class private auto ansi abstract sealed '<StartupCode$ConsoleApplication1>.$.NETFramework,Version=v4.6.1.AssemblyAttributes' |
||||||
|
extends [mscorlib]System.Object |
||||||
|
{ |
||||||
|
} // end of class <StartupCode$ConsoleApplication1>.$.NETFramework,Version=v4.6.1.AssemblyAttributes |
||||||
|
|
||||||
@ -0,0 +1,58 @@ |
|||||||
|
using System; |
||||||
|
using System.IO; |
||||||
|
|
||||||
|
public static class FSharpUsingPatterns |
||||||
|
{ |
||||||
|
public static void sample1() |
||||||
|
{ |
||||||
|
using (FileStream fileStream = File.Create("x.txt")) { |
||||||
|
fileStream.WriteByte((byte)1); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public static void sample2() |
||||||
|
{ |
||||||
|
Console.WriteLine("some text"); |
||||||
|
using (FileStream fileStream = File.Create("x.txt")) { |
||||||
|
fileStream.WriteByte((byte)2); |
||||||
|
Console.WriteLine("some text"); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public static void sample3() |
||||||
|
{ |
||||||
|
Console.WriteLine("some text"); |
||||||
|
using (FileStream fileStream = File.Create("x.txt")) { |
||||||
|
fileStream.WriteByte((byte)3); |
||||||
|
} |
||||||
|
Console.WriteLine("some text"); |
||||||
|
} |
||||||
|
|
||||||
|
public static void sample4() |
||||||
|
{ |
||||||
|
Console.WriteLine("some text"); |
||||||
|
int num = default(int); |
||||||
|
using (FileStream fileStream = File.OpenRead("x.txt")) { |
||||||
|
num = fileStream.ReadByte(); |
||||||
|
} |
||||||
|
int num2 = num; |
||||||
|
Console.WriteLine("read:" + num2.ToString()); |
||||||
|
} |
||||||
|
|
||||||
|
public static void sample5() |
||||||
|
{ |
||||||
|
Console.WriteLine("some text"); |
||||||
|
int num = default(int); |
||||||
|
using (FileStream fileStream = File.OpenRead("x.txt")) { |
||||||
|
num = fileStream.ReadByte(); |
||||||
|
} |
||||||
|
int num2 = num; |
||||||
|
int num3 = default(int); |
||||||
|
using (FileStream fileStream = File.OpenRead("x.txt")) { |
||||||
|
fileStream.ReadByte(); |
||||||
|
num3 = fileStream.ReadByte(); |
||||||
|
} |
||||||
|
int num4 = num3; |
||||||
|
Console.WriteLine("read: {0}, {1}", num2, num4); |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,58 @@ |
|||||||
|
using System; |
||||||
|
using System.IO; |
||||||
|
|
||||||
|
public static class FSharpUsingPatterns |
||||||
|
{ |
||||||
|
public static void sample1() |
||||||
|
{ |
||||||
|
using (FileStream fileStream = File.Create("x.txt")) { |
||||||
|
fileStream.WriteByte(1); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public static void sample2() |
||||||
|
{ |
||||||
|
Console.WriteLine("some text"); |
||||||
|
using (FileStream fileStream = File.Create("x.txt")) { |
||||||
|
fileStream.WriteByte(2); |
||||||
|
Console.WriteLine("some text"); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public static void sample3() |
||||||
|
{ |
||||||
|
Console.WriteLine("some text"); |
||||||
|
using (FileStream fileStream = File.Create("x.txt")) { |
||||||
|
fileStream.WriteByte(3); |
||||||
|
} |
||||||
|
Console.WriteLine("some text"); |
||||||
|
} |
||||||
|
|
||||||
|
public static void sample4() |
||||||
|
{ |
||||||
|
Console.WriteLine("some text"); |
||||||
|
int num = default(int); |
||||||
|
using (FileStream fileStream = File.OpenRead("x.txt")) { |
||||||
|
num = fileStream.ReadByte(); |
||||||
|
} |
||||||
|
int num2 = num; |
||||||
|
Console.WriteLine("read:" + num2.ToString()); |
||||||
|
} |
||||||
|
|
||||||
|
public static void sample5() |
||||||
|
{ |
||||||
|
Console.WriteLine("some text"); |
||||||
|
int num = default(int); |
||||||
|
using (FileStream fileStream = File.OpenRead("x.txt")) { |
||||||
|
num = fileStream.ReadByte(); |
||||||
|
} |
||||||
|
int num2 = num; |
||||||
|
int num3 = default(int); |
||||||
|
using (FileStream fileStream = File.OpenRead("x.txt")) { |
||||||
|
fileStream.ReadByte(); |
||||||
|
num3 = fileStream.ReadByte(); |
||||||
|
} |
||||||
|
num = num3; |
||||||
|
Console.WriteLine("read: {0}, {1}", num2, num); |
||||||
|
} |
||||||
|
} |
||||||
@ -1,3 +1,4 @@ |
|||||||
/*.res |
/*.res |
||||||
/*.dll |
/*.dll |
||||||
/*.exe |
/*.exe |
||||||
|
/*.pdb |
||||||
|
|||||||
@ -0,0 +1,288 @@ |
|||||||
|
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy of this
|
||||||
|
// software and associated documentation files (the "Software"), to deal in the Software
|
||||||
|
// without restriction, including without limitation the rights to use, copy, modify, merge,
|
||||||
|
// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
|
||||||
|
// to whom the Software is furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included in all copies or
|
||||||
|
// substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||||
|
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||||
|
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
|
||||||
|
// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||||
|
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
|
// DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
using System; |
||||||
|
|
||||||
|
namespace ICSharpCode.Decompiler.Tests.TestCases.Pretty |
||||||
|
{ |
||||||
|
public class UnsafeCode |
||||||
|
{ |
||||||
|
public struct SimpleStruct |
||||||
|
{ |
||||||
|
public int X; |
||||||
|
public double Y; |
||||||
|
} |
||||||
|
|
||||||
|
public struct StructWithFixedSizeMembers |
||||||
|
{ |
||||||
|
public unsafe fixed int Integers[100]; |
||||||
|
public int NormalMember; |
||||||
|
public unsafe fixed double Doubles[200]; |
||||||
|
|
||||||
|
[Obsolete("another attribute")] |
||||||
|
public unsafe fixed byte Old[1]; |
||||||
|
} |
||||||
|
|
||||||
|
public unsafe int* NullPointer { |
||||||
|
get { |
||||||
|
return null; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public unsafe int SizeOf() |
||||||
|
{ |
||||||
|
return sizeof(SimpleStruct); |
||||||
|
} |
||||||
|
|
||||||
|
private static void UseBool(bool b) |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
public unsafe void PointerComparison(int* a, double* b) |
||||||
|
{ |
||||||
|
UnsafeCode.UseBool(a == b); |
||||||
|
UnsafeCode.UseBool(a != b); |
||||||
|
UnsafeCode.UseBool(a < b); |
||||||
|
UnsafeCode.UseBool(a > b); |
||||||
|
UnsafeCode.UseBool(a <= b); |
||||||
|
UnsafeCode.UseBool(a >= b); |
||||||
|
} |
||||||
|
|
||||||
|
public unsafe void PointerComparisonWithNull(int* a) |
||||||
|
{ |
||||||
|
UnsafeCode.UseBool(a == null); |
||||||
|
UnsafeCode.UseBool(a != null); |
||||||
|
} |
||||||
|
|
||||||
|
public unsafe int* PointerCast(long* p) |
||||||
|
{ |
||||||
|
return (int*)p; |
||||||
|
} |
||||||
|
|
||||||
|
public unsafe long ConvertDoubleToLong(double d) |
||||||
|
{ |
||||||
|
return *(long*)(&d); |
||||||
|
} |
||||||
|
|
||||||
|
public unsafe double ConvertLongToDouble(long d) |
||||||
|
{ |
||||||
|
return *(double*)(&d); |
||||||
|
} |
||||||
|
|
||||||
|
public unsafe int ConvertFloatToInt(float d) |
||||||
|
{ |
||||||
|
return *(int*)(&d); |
||||||
|
} |
||||||
|
|
||||||
|
public unsafe float ConvertIntToFloat(int d) |
||||||
|
{ |
||||||
|
return *(float*)(&d); |
||||||
|
} |
||||||
|
|
||||||
|
public unsafe int PointerCasts() |
||||||
|
{ |
||||||
|
int result = 0; |
||||||
|
*(float*)(&result) = 0.5f; |
||||||
|
((byte*)(&result))[3] = 3; |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
public unsafe void PassRefParameterAsPointer(ref int p) |
||||||
|
{ |
||||||
|
fixed (int* p2 = &p) { |
||||||
|
this.PassPointerAsRefParameter(p2); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public unsafe void PassPointerAsRefParameter(int* p) |
||||||
|
{ |
||||||
|
this.PassRefParameterAsPointer(ref *p); |
||||||
|
} |
||||||
|
|
||||||
|
public unsafe void AddressInMultiDimensionalArray(double[,] matrix) |
||||||
|
{ |
||||||
|
fixed (double* d = &matrix[1, 2]) { |
||||||
|
this.PointerReferenceExpression(d); |
||||||
|
this.PointerReferenceExpression(d); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public unsafe void FixedStringAccess(string text) |
||||||
|
{ |
||||||
|
fixed (char* ptr = text) { |
||||||
|
char* ptr2 = ptr; |
||||||
|
while (*ptr2 == 'a') { |
||||||
|
*ptr2 = 'A'; |
||||||
|
ptr2++; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public unsafe void PutDoubleIntoLongArray1(long[] array, int index, double val) |
||||||
|
{ |
||||||
|
fixed (long* ptr = array) { |
||||||
|
*(double*)(ptr + index) = val; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public unsafe void PutDoubleIntoLongArray2(long[] array, int index, double val) |
||||||
|
{ |
||||||
|
fixed (long* ptr = &array[index]) { |
||||||
|
*(double*)ptr = val; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public unsafe string PointerReferenceExpression(double* d) |
||||||
|
{ |
||||||
|
return d->ToString(); |
||||||
|
} |
||||||
|
|
||||||
|
public unsafe string PointerReferenceExpression2(long addr) |
||||||
|
{ |
||||||
|
return ((int*)addr)->ToString(); |
||||||
|
} |
||||||
|
|
||||||
|
public unsafe int* PointerArithmetic(int* p) |
||||||
|
{ |
||||||
|
return p + 2; |
||||||
|
} |
||||||
|
|
||||||
|
public unsafe long* PointerArithmetic2(long* p) |
||||||
|
{ |
||||||
|
return 3 + p; |
||||||
|
} |
||||||
|
|
||||||
|
public unsafe long* PointerArithmetic3(long* p) |
||||||
|
{ |
||||||
|
return (long*)((byte*)p + 3); |
||||||
|
} |
||||||
|
|
||||||
|
public unsafe long* PointerArithmetic4(void* p) |
||||||
|
{ |
||||||
|
return (long*)((byte*)p + 3); |
||||||
|
} |
||||||
|
|
||||||
|
public unsafe int PointerArithmetic5(void* p, byte* q, int i) |
||||||
|
{ |
||||||
|
return q[i] + *(byte*)p; |
||||||
|
} |
||||||
|
|
||||||
|
public unsafe int PointerArithmetic6(SimpleStruct* p, int i) |
||||||
|
{ |
||||||
|
return p[i].X; |
||||||
|
} |
||||||
|
|
||||||
|
public unsafe int* PointerArithmeticLong1(int* p, long offset) |
||||||
|
{ |
||||||
|
return p + offset; |
||||||
|
} |
||||||
|
|
||||||
|
public unsafe int* PointerArithmeticLong2(int* p, long offset) |
||||||
|
{ |
||||||
|
return offset + p; |
||||||
|
} |
||||||
|
|
||||||
|
public unsafe int* PointerArithmeticLong3(int* p, long offset) |
||||||
|
{ |
||||||
|
return p - offset; |
||||||
|
} |
||||||
|
|
||||||
|
public unsafe SimpleStruct* PointerArithmeticLong1s(SimpleStruct* p, long offset) |
||||||
|
{ |
||||||
|
return p + offset; |
||||||
|
} |
||||||
|
|
||||||
|
public unsafe SimpleStruct* PointerArithmeticLong2s(SimpleStruct* p, long offset) |
||||||
|
{ |
||||||
|
return offset + p; |
||||||
|
} |
||||||
|
|
||||||
|
public unsafe SimpleStruct* PointerArithmeticLong3s(SimpleStruct* p, long offset) |
||||||
|
{ |
||||||
|
return p - offset; |
||||||
|
} |
||||||
|
|
||||||
|
public unsafe int PointerSubtraction(long* p, long* q) |
||||||
|
{ |
||||||
|
return (int)(p - q); |
||||||
|
} |
||||||
|
|
||||||
|
public unsafe long PointerSubtractionLong(long* p, long* q) |
||||||
|
{ |
||||||
|
return p - q; |
||||||
|
} |
||||||
|
|
||||||
|
public unsafe int PointerSubtraction2(long* p, short* q) |
||||||
|
{ |
||||||
|
return (int)((byte*)p - (byte*)q); |
||||||
|
} |
||||||
|
|
||||||
|
public unsafe int PointerSubtraction3(void* p, void* q) |
||||||
|
{ |
||||||
|
return (int)((byte*)p - (byte*)q); |
||||||
|
} |
||||||
|
|
||||||
|
public unsafe long PointerSubtraction4(sbyte* p, sbyte* q) |
||||||
|
{ |
||||||
|
return p - q; |
||||||
|
} |
||||||
|
|
||||||
|
public unsafe long PointerSubtraction5(SimpleStruct* p, SimpleStruct* q) |
||||||
|
{ |
||||||
|
return p - q; |
||||||
|
} |
||||||
|
|
||||||
|
public unsafe double FixedMemberAccess(StructWithFixedSizeMembers* m, int i) |
||||||
|
{ |
||||||
|
return (double)m->Integers[i] + m->Doubles[i]; |
||||||
|
} |
||||||
|
|
||||||
|
public unsafe double* FixedMemberBasePointer(StructWithFixedSizeMembers* m) |
||||||
|
{ |
||||||
|
return m->Doubles; |
||||||
|
} |
||||||
|
|
||||||
|
public unsafe string UsePointer(double* ptr) |
||||||
|
{ |
||||||
|
return ptr->ToString(); |
||||||
|
} |
||||||
|
|
||||||
|
public unsafe string StackAlloc(int count) |
||||||
|
{ |
||||||
|
char* ptr = stackalloc char[count]; |
||||||
|
char* ptr2 = stackalloc char[100]; |
||||||
|
for (int i = 0; i < count; i++) { |
||||||
|
ptr[i] = (char)i; |
||||||
|
ptr2[i] = '\0'; |
||||||
|
} |
||||||
|
return this.UsePointer((double*)ptr); |
||||||
|
} |
||||||
|
|
||||||
|
public unsafe string StackAllocStruct(int count) |
||||||
|
{ |
||||||
|
SimpleStruct* ptr = stackalloc SimpleStruct[checked(count * 2)]; |
||||||
|
SimpleStruct* _ = stackalloc SimpleStruct[10]; |
||||||
|
return this.UsePointer(&ptr->Y); |
||||||
|
} |
||||||
|
|
||||||
|
unsafe ~UnsafeCode() |
||||||
|
{ |
||||||
|
this.PassPointerAsRefParameter(this.NullPointer); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,904 @@ |
|||||||
|
|
||||||
|
// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 |
||||||
|
// Copyright (c) Microsoft Corporation. All rights reserved. |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Metadata version: v4.0.30319 |
||||||
|
.assembly extern mscorlib |
||||||
|
{ |
||||||
|
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. |
||||||
|
.ver 4:0:0:0 |
||||||
|
} |
||||||
|
.assembly zuwavv1x |
||||||
|
{ |
||||||
|
.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.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. |
||||||
|
.permissionset reqmin |
||||||
|
= {[mscorlib]System.Security.Permissions.SecurityPermissionAttribute = {property bool 'SkipVerification' = bool(true)}} |
||||||
|
.hash algorithm 0x00008004 |
||||||
|
.ver 0:0:0:0 |
||||||
|
} |
||||||
|
.module zuwavv1x.dll |
||||||
|
// MVID: {4CC9FC6C-21CA-408A-ABC9-544A07D1E512} |
||||||
|
.custom instance void [mscorlib]System.Security.UnverifiableCodeAttribute::.ctor() = ( 01 00 00 00 ) |
||||||
|
.imagebase 0x10000000 |
||||||
|
.file alignment 0x00000200 |
||||||
|
.stackreserve 0x00100000 |
||||||
|
.subsystem 0x0003 // WINDOWS_CUI |
||||||
|
.corflags 0x00000001 // ILONLY |
||||||
|
// Image base: 0x01600000 |
||||||
|
|
||||||
|
|
||||||
|
// =============== CLASS MEMBERS DECLARATION =================== |
||||||
|
|
||||||
|
.class public auto ansi beforefieldinit ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode |
||||||
|
extends [mscorlib]System.Object |
||||||
|
{ |
||||||
|
.class sequential ansi sealed nested public beforefieldinit SimpleStruct |
||||||
|
extends [mscorlib]System.ValueType |
||||||
|
{ |
||||||
|
.field public int32 X |
||||||
|
.field public float64 Y |
||||||
|
} // end of class SimpleStruct |
||||||
|
|
||||||
|
.class sequential ansi sealed nested public beforefieldinit StructWithFixedSizeMembers |
||||||
|
extends [mscorlib]System.ValueType |
||||||
|
{ |
||||||
|
.class sequential ansi sealed nested public beforefieldinit '<Integers>e__FixedBuffer0' |
||||||
|
extends [mscorlib]System.ValueType |
||||||
|
{ |
||||||
|
.pack 0 |
||||||
|
.size 400 |
||||||
|
.custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) |
||||||
|
.custom instance void [mscorlib]System.Runtime.CompilerServices.UnsafeValueTypeAttribute::.ctor() = ( 01 00 00 00 ) |
||||||
|
.field public int32 FixedElementField |
||||||
|
} // end of class '<Integers>e__FixedBuffer0' |
||||||
|
|
||||||
|
.class sequential ansi sealed nested public beforefieldinit '<Doubles>e__FixedBuffer1' |
||||||
|
extends [mscorlib]System.ValueType |
||||||
|
{ |
||||||
|
.pack 0 |
||||||
|
.size 1600 |
||||||
|
.custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) |
||||||
|
.custom instance void [mscorlib]System.Runtime.CompilerServices.UnsafeValueTypeAttribute::.ctor() = ( 01 00 00 00 ) |
||||||
|
.field public float64 FixedElementField |
||||||
|
} // end of class '<Doubles>e__FixedBuffer1' |
||||||
|
|
||||||
|
.class sequential ansi sealed nested public beforefieldinit '<Old>e__FixedBuffer2' |
||||||
|
extends [mscorlib]System.ValueType |
||||||
|
{ |
||||||
|
.pack 0 |
||||||
|
.size 1 |
||||||
|
.custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) |
||||||
|
.custom instance void [mscorlib]System.Runtime.CompilerServices.UnsafeValueTypeAttribute::.ctor() = ( 01 00 00 00 ) |
||||||
|
.field public uint8 FixedElementField |
||||||
|
} // end of class '<Old>e__FixedBuffer2' |
||||||
|
|
||||||
|
.field public valuetype ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/StructWithFixedSizeMembers/'<Integers>e__FixedBuffer0' Integers |
||||||
|
.custom instance void [mscorlib]System.Runtime.CompilerServices.FixedBufferAttribute::.ctor(class [mscorlib]System.Type, |
||||||
|
int32) = ( 01 00 59 53 79 73 74 65 6D 2E 49 6E 74 33 32 2C // ..YSystem.Int32, |
||||||
|
20 6D 73 63 6F 72 6C 69 62 2C 20 56 65 72 73 69 // mscorlib, Versi |
||||||
|
6F 6E 3D 34 2E 30 2E 30 2E 30 2C 20 43 75 6C 74 // on=4.0.0.0, Cult |
||||||
|
75 72 65 3D 6E 65 75 74 72 61 6C 2C 20 50 75 62 // ure=neutral, Pub |
||||||
|
6C 69 63 4B 65 79 54 6F 6B 65 6E 3D 62 37 37 61 // licKeyToken=b77a |
||||||
|
35 63 35 36 31 39 33 34 65 30 38 39 64 00 00 00 // 5c561934e089d... |
||||||
|
00 00 ) |
||||||
|
.field public int32 NormalMember |
||||||
|
.field public valuetype ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/StructWithFixedSizeMembers/'<Doubles>e__FixedBuffer1' Doubles |
||||||
|
.custom instance void [mscorlib]System.Runtime.CompilerServices.FixedBufferAttribute::.ctor(class [mscorlib]System.Type, |
||||||
|
int32) = ( 01 00 5A 53 79 73 74 65 6D 2E 44 6F 75 62 6C 65 // ..ZSystem.Double |
||||||
|
2C 20 6D 73 63 6F 72 6C 69 62 2C 20 56 65 72 73 // , mscorlib, Vers |
||||||
|
69 6F 6E 3D 34 2E 30 2E 30 2E 30 2C 20 43 75 6C // ion=4.0.0.0, Cul |
||||||
|
74 75 72 65 3D 6E 65 75 74 72 61 6C 2C 20 50 75 // ture=neutral, Pu |
||||||
|
62 6C 69 63 4B 65 79 54 6F 6B 65 6E 3D 62 37 37 // blicKeyToken=b77 |
||||||
|
61 35 63 35 36 31 39 33 34 65 30 38 39 C8 00 00 // a5c561934e089... |
||||||
|
00 00 00 ) |
||||||
|
.field public valuetype ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/StructWithFixedSizeMembers/'<Old>e__FixedBuffer2' Old |
||||||
|
.custom instance void [mscorlib]System.Runtime.CompilerServices.FixedBufferAttribute::.ctor(class [mscorlib]System.Type, |
||||||
|
int32) = ( 01 00 58 53 79 73 74 65 6D 2E 42 79 74 65 2C 20 // ..XSystem.Byte, |
||||||
|
6D 73 63 6F 72 6C 69 62 2C 20 56 65 72 73 69 6F // mscorlib, Versio |
||||||
|
6E 3D 34 2E 30 2E 30 2E 30 2C 20 43 75 6C 74 75 // n=4.0.0.0, Cultu |
||||||
|
72 65 3D 6E 65 75 74 72 61 6C 2C 20 50 75 62 6C // re=neutral, Publ |
||||||
|
69 63 4B 65 79 54 6F 6B 65 6E 3D 62 37 37 61 35 // icKeyToken=b77a5 |
||||||
|
63 35 36 31 39 33 34 65 30 38 39 01 00 00 00 00 // c561934e089..... |
||||||
|
00 ) |
||||||
|
.custom instance void [mscorlib]System.ObsoleteAttribute::.ctor(string) = ( 01 00 11 61 6E 6F 74 68 65 72 20 61 74 74 72 69 // ...another attri |
||||||
|
62 75 74 65 00 00 ) // bute.. |
||||||
|
} // end of class StructWithFixedSizeMembers |
||||||
|
|
||||||
|
.method public hidebysig specialname instance int32* |
||||||
|
get_NullPointer() cil managed |
||||||
|
{ |
||||||
|
// Code size 3 (0x3) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldc.i4.0 |
||||||
|
IL_0001: conv.u |
||||||
|
IL_0002: ret |
||||||
|
} // end of method UnsafeCode::get_NullPointer |
||||||
|
|
||||||
|
.method public hidebysig instance int32 |
||||||
|
SizeOf() cil managed |
||||||
|
{ |
||||||
|
// Code size 7 (0x7) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: sizeof ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/SimpleStruct |
||||||
|
IL_0006: ret |
||||||
|
} // end of method UnsafeCode::SizeOf |
||||||
|
|
||||||
|
.method private hidebysig static void UseBool(bool b) cil managed |
||||||
|
{ |
||||||
|
// Code size 1 (0x1) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ret |
||||||
|
} // end of method UnsafeCode::UseBool |
||||||
|
|
||||||
|
.method public hidebysig instance void |
||||||
|
PointerComparison(int32* a, |
||||||
|
float64* b) cil managed |
||||||
|
{ |
||||||
|
// Code size 64 (0x40) |
||||||
|
.maxstack 2 |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: ldarg.2 |
||||||
|
IL_0002: ceq |
||||||
|
IL_0004: call void ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode::UseBool(bool) |
||||||
|
IL_0009: ldarg.1 |
||||||
|
IL_000a: ldarg.2 |
||||||
|
IL_000b: ceq |
||||||
|
IL_000d: ldc.i4.0 |
||||||
|
IL_000e: ceq |
||||||
|
IL_0010: call void ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode::UseBool(bool) |
||||||
|
IL_0015: ldarg.1 |
||||||
|
IL_0016: ldarg.2 |
||||||
|
IL_0017: clt.un |
||||||
|
IL_0019: call void ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode::UseBool(bool) |
||||||
|
IL_001e: ldarg.1 |
||||||
|
IL_001f: ldarg.2 |
||||||
|
IL_0020: cgt.un |
||||||
|
IL_0022: call void ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode::UseBool(bool) |
||||||
|
IL_0027: ldarg.1 |
||||||
|
IL_0028: ldarg.2 |
||||||
|
IL_0029: cgt.un |
||||||
|
IL_002b: ldc.i4.0 |
||||||
|
IL_002c: ceq |
||||||
|
IL_002e: call void ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode::UseBool(bool) |
||||||
|
IL_0033: ldarg.1 |
||||||
|
IL_0034: ldarg.2 |
||||||
|
IL_0035: clt.un |
||||||
|
IL_0037: ldc.i4.0 |
||||||
|
IL_0038: ceq |
||||||
|
IL_003a: call void ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode::UseBool(bool) |
||||||
|
IL_003f: ret |
||||||
|
} // end of method UnsafeCode::PointerComparison |
||||||
|
|
||||||
|
.method public hidebysig instance void |
||||||
|
PointerComparisonWithNull(int32* a) cil managed |
||||||
|
{ |
||||||
|
// Code size 24 (0x18) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: ldc.i4.0 |
||||||
|
IL_0002: conv.u |
||||||
|
IL_0003: ceq |
||||||
|
IL_0005: call void ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode::UseBool(bool) |
||||||
|
IL_000a: ldarg.1 |
||||||
|
IL_000b: ldc.i4.0 |
||||||
|
IL_000c: conv.u |
||||||
|
IL_000d: ceq |
||||||
|
IL_000f: ldc.i4.0 |
||||||
|
IL_0010: ceq |
||||||
|
IL_0012: call void ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode::UseBool(bool) |
||||||
|
IL_0017: ret |
||||||
|
} // end of method UnsafeCode::PointerComparisonWithNull |
||||||
|
|
||||||
|
.method public hidebysig instance int32* |
||||||
|
PointerCast(int64* p) cil managed |
||||||
|
{ |
||||||
|
// Code size 2 (0x2) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: ret |
||||||
|
} // end of method UnsafeCode::PointerCast |
||||||
|
|
||||||
|
.method public hidebysig instance int64 |
||||||
|
ConvertDoubleToLong(float64 d) cil managed |
||||||
|
{ |
||||||
|
// Code size 5 (0x5) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarga.s d |
||||||
|
IL_0002: conv.u |
||||||
|
IL_0003: ldind.i8 |
||||||
|
IL_0004: ret |
||||||
|
} // end of method UnsafeCode::ConvertDoubleToLong |
||||||
|
|
||||||
|
.method public hidebysig instance float64 |
||||||
|
ConvertLongToDouble(int64 d) cil managed |
||||||
|
{ |
||||||
|
// Code size 5 (0x5) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarga.s d |
||||||
|
IL_0002: conv.u |
||||||
|
IL_0003: ldind.r8 |
||||||
|
IL_0004: ret |
||||||
|
} // end of method UnsafeCode::ConvertLongToDouble |
||||||
|
|
||||||
|
.method public hidebysig instance int32 |
||||||
|
ConvertFloatToInt(float32 d) cil managed |
||||||
|
{ |
||||||
|
// Code size 5 (0x5) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarga.s d |
||||||
|
IL_0002: conv.u |
||||||
|
IL_0003: ldind.i4 |
||||||
|
IL_0004: ret |
||||||
|
} // end of method UnsafeCode::ConvertFloatToInt |
||||||
|
|
||||||
|
.method public hidebysig instance float32 |
||||||
|
ConvertIntToFloat(int32 d) cil managed |
||||||
|
{ |
||||||
|
// Code size 5 (0x5) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarga.s d |
||||||
|
IL_0002: conv.u |
||||||
|
IL_0003: ldind.r4 |
||||||
|
IL_0004: ret |
||||||
|
} // end of method UnsafeCode::ConvertIntToFloat |
||||||
|
|
||||||
|
.method public hidebysig instance int32 |
||||||
|
PointerCasts() cil managed |
||||||
|
{ |
||||||
|
// Code size 21 (0x15) |
||||||
|
.maxstack 2 |
||||||
|
.locals init (int32 V_0) |
||||||
|
IL_0000: ldc.i4.0 |
||||||
|
IL_0001: stloc.0 |
||||||
|
IL_0002: ldloca.s V_0 |
||||||
|
IL_0004: conv.u |
||||||
|
IL_0005: ldc.r4 0.5 |
||||||
|
IL_000a: stind.r4 |
||||||
|
IL_000b: ldloca.s V_0 |
||||||
|
IL_000d: conv.u |
||||||
|
IL_000e: ldc.i4.3 |
||||||
|
IL_000f: conv.i |
||||||
|
IL_0010: add |
||||||
|
IL_0011: ldc.i4.3 |
||||||
|
IL_0012: stind.i1 |
||||||
|
IL_0013: ldloc.0 |
||||||
|
IL_0014: ret |
||||||
|
} // end of method UnsafeCode::PointerCasts |
||||||
|
|
||||||
|
.method public hidebysig instance void |
||||||
|
PassRefParameterAsPointer(int32& p) cil managed |
||||||
|
{ |
||||||
|
// Code size 14 (0xe) |
||||||
|
.maxstack 2 |
||||||
|
.locals init (int32& pinned V_0) |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: stloc.0 |
||||||
|
IL_0002: ldarg.0 |
||||||
|
IL_0003: ldloc.0 |
||||||
|
IL_0004: conv.i |
||||||
|
IL_0005: call instance void ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode::PassPointerAsRefParameter(int32*) |
||||||
|
IL_000a: ldc.i4.0 |
||||||
|
IL_000b: conv.u |
||||||
|
IL_000c: stloc.0 |
||||||
|
IL_000d: ret |
||||||
|
} // end of method UnsafeCode::PassRefParameterAsPointer |
||||||
|
|
||||||
|
.method public hidebysig instance void |
||||||
|
PassPointerAsRefParameter(int32* p) cil managed |
||||||
|
{ |
||||||
|
// Code size 8 (0x8) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarg.0 |
||||||
|
IL_0001: ldarg.1 |
||||||
|
IL_0002: call instance void ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode::PassRefParameterAsPointer(int32&) |
||||||
|
IL_0007: ret |
||||||
|
} // end of method UnsafeCode::PassPointerAsRefParameter |
||||||
|
|
||||||
|
.method public hidebysig instance void |
||||||
|
AddressInMultiDimensionalArray(float64[0...,0...] matrix) cil managed |
||||||
|
{ |
||||||
|
// Code size 31 (0x1f) |
||||||
|
.maxstack 3 |
||||||
|
.locals init (float64& pinned V_0) |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: ldc.i4.1 |
||||||
|
IL_0002: ldc.i4.2 |
||||||
|
IL_0003: call instance float64& float64[0...,0...]::Address(int32, |
||||||
|
int32) |
||||||
|
IL_0008: stloc.0 |
||||||
|
IL_0009: ldarg.0 |
||||||
|
IL_000a: ldloc.0 |
||||||
|
IL_000b: conv.i |
||||||
|
IL_000c: call instance string ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode::PointerReferenceExpression(float64*) |
||||||
|
IL_0011: pop |
||||||
|
IL_0012: ldarg.0 |
||||||
|
IL_0013: ldloc.0 |
||||||
|
IL_0014: conv.i |
||||||
|
IL_0015: call instance string ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode::PointerReferenceExpression(float64*) |
||||||
|
IL_001a: pop |
||||||
|
IL_001b: ldc.i4.0 |
||||||
|
IL_001c: conv.u |
||||||
|
IL_001d: stloc.0 |
||||||
|
IL_001e: ret |
||||||
|
} // end of method UnsafeCode::AddressInMultiDimensionalArray |
||||||
|
|
||||||
|
.method public hidebysig instance void |
||||||
|
FixedStringAccess(string text) cil managed |
||||||
|
{ |
||||||
|
// Code size 36 (0x24) |
||||||
|
.maxstack 2 |
||||||
|
.locals init (char* V_0, |
||||||
|
char* V_1, |
||||||
|
string pinned V_2) |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: stloc.2 |
||||||
|
IL_0002: ldloc.2 |
||||||
|
IL_0003: conv.i |
||||||
|
IL_0004: dup |
||||||
|
IL_0005: brfalse.s IL_000d |
||||||
|
|
||||||
|
IL_0007: call int32 [mscorlib]System.Runtime.CompilerServices.RuntimeHelpers::get_OffsetToStringData() |
||||||
|
IL_000c: add |
||||||
|
IL_000d: stloc.0 |
||||||
|
IL_000e: ldloc.0 |
||||||
|
IL_000f: stloc.1 |
||||||
|
IL_0010: br.s IL_001b |
||||||
|
|
||||||
|
IL_0012: ldloc.1 |
||||||
|
IL_0013: ldc.i4.s 65 |
||||||
|
IL_0015: stind.i2 |
||||||
|
IL_0016: ldloc.1 |
||||||
|
IL_0017: ldc.i4.2 |
||||||
|
IL_0018: conv.i |
||||||
|
IL_0019: add |
||||||
|
IL_001a: stloc.1 |
||||||
|
IL_001b: ldloc.1 |
||||||
|
IL_001c: ldind.u2 |
||||||
|
IL_001d: ldc.i4.s 97 |
||||||
|
IL_001f: beq.s IL_0012 |
||||||
|
|
||||||
|
IL_0021: ldnull |
||||||
|
IL_0022: stloc.2 |
||||||
|
IL_0023: ret |
||||||
|
} // end of method UnsafeCode::FixedStringAccess |
||||||
|
|
||||||
|
.method public hidebysig instance void |
||||||
|
PutDoubleIntoLongArray1(int64[] 'array', |
||||||
|
int32 index, |
||||||
|
float64 val) cil managed |
||||||
|
{ |
||||||
|
// Code size 36 (0x24) |
||||||
|
.maxstack 3 |
||||||
|
.locals init (int64& pinned V_0, |
||||||
|
int64[] V_1) |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: dup |
||||||
|
IL_0002: stloc.1 |
||||||
|
IL_0003: brfalse.s IL_000a |
||||||
|
|
||||||
|
IL_0005: ldloc.1 |
||||||
|
IL_0006: ldlen |
||||||
|
IL_0007: conv.i4 |
||||||
|
IL_0008: brtrue.s IL_000f |
||||||
|
|
||||||
|
IL_000a: ldc.i4.0 |
||||||
|
IL_000b: conv.u |
||||||
|
IL_000c: stloc.0 |
||||||
|
IL_000d: br.s IL_0017 |
||||||
|
|
||||||
|
IL_000f: ldloc.1 |
||||||
|
IL_0010: ldc.i4.0 |
||||||
|
IL_0011: ldelema [mscorlib]System.Int64 |
||||||
|
IL_0016: stloc.0 |
||||||
|
IL_0017: ldloc.0 |
||||||
|
IL_0018: conv.i |
||||||
|
IL_0019: ldarg.2 |
||||||
|
IL_001a: conv.i |
||||||
|
IL_001b: ldc.i4.8 |
||||||
|
IL_001c: mul |
||||||
|
IL_001d: add |
||||||
|
IL_001e: ldarg.3 |
||||||
|
IL_001f: stind.r8 |
||||||
|
IL_0020: ldc.i4.0 |
||||||
|
IL_0021: conv.u |
||||||
|
IL_0022: stloc.0 |
||||||
|
IL_0023: ret |
||||||
|
} // end of method UnsafeCode::PutDoubleIntoLongArray1 |
||||||
|
|
||||||
|
.method public hidebysig instance void |
||||||
|
PutDoubleIntoLongArray2(int64[] 'array', |
||||||
|
int32 index, |
||||||
|
float64 val) cil managed |
||||||
|
{ |
||||||
|
// Code size 16 (0x10) |
||||||
|
.maxstack 2 |
||||||
|
.locals init (int64& pinned V_0) |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: ldarg.2 |
||||||
|
IL_0002: ldelema [mscorlib]System.Int64 |
||||||
|
IL_0007: stloc.0 |
||||||
|
IL_0008: ldloc.0 |
||||||
|
IL_0009: conv.i |
||||||
|
IL_000a: ldarg.3 |
||||||
|
IL_000b: stind.r8 |
||||||
|
IL_000c: ldc.i4.0 |
||||||
|
IL_000d: conv.u |
||||||
|
IL_000e: stloc.0 |
||||||
|
IL_000f: ret |
||||||
|
} // end of method UnsafeCode::PutDoubleIntoLongArray2 |
||||||
|
|
||||||
|
.method public hidebysig instance string |
||||||
|
PointerReferenceExpression(float64* d) cil managed |
||||||
|
{ |
||||||
|
// Code size 7 (0x7) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: call instance string [mscorlib]System.Double::ToString() |
||||||
|
IL_0006: ret |
||||||
|
} // end of method UnsafeCode::PointerReferenceExpression |
||||||
|
|
||||||
|
.method public hidebysig instance string |
||||||
|
PointerReferenceExpression2(int64 addr) cil managed |
||||||
|
{ |
||||||
|
// Code size 8 (0x8) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: conv.u |
||||||
|
IL_0002: call instance string [mscorlib]System.Int32::ToString() |
||||||
|
IL_0007: ret |
||||||
|
} // end of method UnsafeCode::PointerReferenceExpression2 |
||||||
|
|
||||||
|
.method public hidebysig instance int32* |
||||||
|
PointerArithmetic(int32* p) cil managed |
||||||
|
{ |
||||||
|
// Code size 5 (0x5) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: ldc.i4.8 |
||||||
|
IL_0002: conv.i |
||||||
|
IL_0003: add |
||||||
|
IL_0004: ret |
||||||
|
} // end of method UnsafeCode::PointerArithmetic |
||||||
|
|
||||||
|
.method public hidebysig instance int64* |
||||||
|
PointerArithmetic2(int64* p) cil managed |
||||||
|
{ |
||||||
|
// Code size 6 (0x6) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldc.i4.s 24 |
||||||
|
IL_0002: conv.i |
||||||
|
IL_0003: ldarg.1 |
||||||
|
IL_0004: add |
||||||
|
IL_0005: ret |
||||||
|
} // end of method UnsafeCode::PointerArithmetic2 |
||||||
|
|
||||||
|
.method public hidebysig instance int64* |
||||||
|
PointerArithmetic3(int64* p) cil managed |
||||||
|
{ |
||||||
|
// Code size 5 (0x5) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: ldc.i4.3 |
||||||
|
IL_0002: conv.i |
||||||
|
IL_0003: add |
||||||
|
IL_0004: ret |
||||||
|
} // end of method UnsafeCode::PointerArithmetic3 |
||||||
|
|
||||||
|
.method public hidebysig instance int64* |
||||||
|
PointerArithmetic4(void* p) cil managed |
||||||
|
{ |
||||||
|
// Code size 5 (0x5) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: ldc.i4.3 |
||||||
|
IL_0002: conv.i |
||||||
|
IL_0003: add |
||||||
|
IL_0004: ret |
||||||
|
} // end of method UnsafeCode::PointerArithmetic4 |
||||||
|
|
||||||
|
.method public hidebysig instance int32 |
||||||
|
PointerArithmetic5(void* p, |
||||||
|
uint8* q, |
||||||
|
int32 i) cil managed |
||||||
|
{ |
||||||
|
// Code size 8 (0x8) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarg.2 |
||||||
|
IL_0001: ldarg.3 |
||||||
|
IL_0002: add |
||||||
|
IL_0003: ldind.u1 |
||||||
|
IL_0004: ldarg.1 |
||||||
|
IL_0005: ldind.u1 |
||||||
|
IL_0006: add |
||||||
|
IL_0007: ret |
||||||
|
} // end of method UnsafeCode::PointerArithmetic5 |
||||||
|
|
||||||
|
.method public hidebysig instance int32 |
||||||
|
PointerArithmetic6(valuetype ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/SimpleStruct* p, |
||||||
|
int32 i) cil managed |
||||||
|
{ |
||||||
|
// Code size 17 (0x11) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: ldarg.2 |
||||||
|
IL_0002: conv.i |
||||||
|
IL_0003: sizeof ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/SimpleStruct |
||||||
|
IL_0009: mul |
||||||
|
IL_000a: add |
||||||
|
IL_000b: ldfld int32 ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/SimpleStruct::X |
||||||
|
IL_0010: ret |
||||||
|
} // end of method UnsafeCode::PointerArithmetic6 |
||||||
|
|
||||||
|
.method public hidebysig instance int32* |
||||||
|
PointerArithmeticLong1(int32* p, |
||||||
|
int64 offset) cil managed |
||||||
|
{ |
||||||
|
// Code size 8 (0x8) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: ldarg.2 |
||||||
|
IL_0002: ldc.i4.4 |
||||||
|
IL_0003: conv.i8 |
||||||
|
IL_0004: mul |
||||||
|
IL_0005: conv.i |
||||||
|
IL_0006: add |
||||||
|
IL_0007: ret |
||||||
|
} // end of method UnsafeCode::PointerArithmeticLong1 |
||||||
|
|
||||||
|
.method public hidebysig instance int32* |
||||||
|
PointerArithmeticLong2(int32* p, |
||||||
|
int64 offset) cil managed |
||||||
|
{ |
||||||
|
// Code size 8 (0x8) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarg.2 |
||||||
|
IL_0001: ldc.i4.4 |
||||||
|
IL_0002: conv.i8 |
||||||
|
IL_0003: mul |
||||||
|
IL_0004: conv.i |
||||||
|
IL_0005: ldarg.1 |
||||||
|
IL_0006: add |
||||||
|
IL_0007: ret |
||||||
|
} // end of method UnsafeCode::PointerArithmeticLong2 |
||||||
|
|
||||||
|
.method public hidebysig instance int32* |
||||||
|
PointerArithmeticLong3(int32* p, |
||||||
|
int64 offset) cil managed |
||||||
|
{ |
||||||
|
// Code size 8 (0x8) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: ldarg.2 |
||||||
|
IL_0002: ldc.i4.4 |
||||||
|
IL_0003: conv.i8 |
||||||
|
IL_0004: mul |
||||||
|
IL_0005: conv.i |
||||||
|
IL_0006: sub |
||||||
|
IL_0007: ret |
||||||
|
} // end of method UnsafeCode::PointerArithmeticLong3 |
||||||
|
|
||||||
|
.method public hidebysig instance valuetype ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/SimpleStruct* |
||||||
|
PointerArithmeticLong1s(valuetype ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/SimpleStruct* p, |
||||||
|
int64 offset) cil managed |
||||||
|
{ |
||||||
|
// Code size 13 (0xd) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: ldarg.2 |
||||||
|
IL_0002: sizeof ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/SimpleStruct |
||||||
|
IL_0008: conv.i8 |
||||||
|
IL_0009: mul |
||||||
|
IL_000a: conv.i |
||||||
|
IL_000b: add |
||||||
|
IL_000c: ret |
||||||
|
} // end of method UnsafeCode::PointerArithmeticLong1s |
||||||
|
|
||||||
|
.method public hidebysig instance valuetype ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/SimpleStruct* |
||||||
|
PointerArithmeticLong2s(valuetype ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/SimpleStruct* p, |
||||||
|
int64 offset) cil managed |
||||||
|
{ |
||||||
|
// Code size 13 (0xd) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarg.2 |
||||||
|
IL_0001: sizeof ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/SimpleStruct |
||||||
|
IL_0007: conv.i8 |
||||||
|
IL_0008: mul |
||||||
|
IL_0009: conv.i |
||||||
|
IL_000a: ldarg.1 |
||||||
|
IL_000b: add |
||||||
|
IL_000c: ret |
||||||
|
} // end of method UnsafeCode::PointerArithmeticLong2s |
||||||
|
|
||||||
|
.method public hidebysig instance valuetype ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/SimpleStruct* |
||||||
|
PointerArithmeticLong3s(valuetype ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/SimpleStruct* p, |
||||||
|
int64 offset) cil managed |
||||||
|
{ |
||||||
|
// Code size 13 (0xd) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: ldarg.2 |
||||||
|
IL_0002: sizeof ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/SimpleStruct |
||||||
|
IL_0008: conv.i8 |
||||||
|
IL_0009: mul |
||||||
|
IL_000a: conv.i |
||||||
|
IL_000b: sub |
||||||
|
IL_000c: ret |
||||||
|
} // end of method UnsafeCode::PointerArithmeticLong3s |
||||||
|
|
||||||
|
.method public hidebysig instance int32 |
||||||
|
PointerSubtraction(int64* p, |
||||||
|
int64* q) cil managed |
||||||
|
{ |
||||||
|
// Code size 8 (0x8) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: ldarg.2 |
||||||
|
IL_0002: sub |
||||||
|
IL_0003: ldc.i4.8 |
||||||
|
IL_0004: div |
||||||
|
IL_0005: conv.i8 |
||||||
|
IL_0006: conv.i4 |
||||||
|
IL_0007: ret |
||||||
|
} // end of method UnsafeCode::PointerSubtraction |
||||||
|
|
||||||
|
.method public hidebysig instance int64 |
||||||
|
PointerSubtractionLong(int64* p, |
||||||
|
int64* q) cil managed |
||||||
|
{ |
||||||
|
// Code size 7 (0x7) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: ldarg.2 |
||||||
|
IL_0002: sub |
||||||
|
IL_0003: ldc.i4.8 |
||||||
|
IL_0004: div |
||||||
|
IL_0005: conv.i8 |
||||||
|
IL_0006: ret |
||||||
|
} // end of method UnsafeCode::PointerSubtractionLong |
||||||
|
|
||||||
|
.method public hidebysig instance int32 |
||||||
|
PointerSubtraction2(int64* p, |
||||||
|
int16* q) cil managed |
||||||
|
{ |
||||||
|
// Code size 8 (0x8) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: ldarg.2 |
||||||
|
IL_0002: sub |
||||||
|
IL_0003: ldc.i4.1 |
||||||
|
IL_0004: div |
||||||
|
IL_0005: conv.i8 |
||||||
|
IL_0006: conv.i4 |
||||||
|
IL_0007: ret |
||||||
|
} // end of method UnsafeCode::PointerSubtraction2 |
||||||
|
|
||||||
|
.method public hidebysig instance int32 |
||||||
|
PointerSubtraction3(void* p, |
||||||
|
void* q) cil managed |
||||||
|
{ |
||||||
|
// Code size 8 (0x8) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: ldarg.2 |
||||||
|
IL_0002: sub |
||||||
|
IL_0003: ldc.i4.1 |
||||||
|
IL_0004: div |
||||||
|
IL_0005: conv.i8 |
||||||
|
IL_0006: conv.i4 |
||||||
|
IL_0007: ret |
||||||
|
} // end of method UnsafeCode::PointerSubtraction3 |
||||||
|
|
||||||
|
.method public hidebysig instance int64 |
||||||
|
PointerSubtraction4(int8* p, |
||||||
|
int8* q) cil managed |
||||||
|
{ |
||||||
|
// Code size 7 (0x7) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: ldarg.2 |
||||||
|
IL_0002: sub |
||||||
|
IL_0003: ldc.i4.1 |
||||||
|
IL_0004: div |
||||||
|
IL_0005: conv.i8 |
||||||
|
IL_0006: ret |
||||||
|
} // end of method UnsafeCode::PointerSubtraction4 |
||||||
|
|
||||||
|
.method public hidebysig instance int64 |
||||||
|
PointerSubtraction5(valuetype ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/SimpleStruct* p, |
||||||
|
valuetype ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/SimpleStruct* q) cil managed |
||||||
|
{ |
||||||
|
// Code size 12 (0xc) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: ldarg.2 |
||||||
|
IL_0002: sub |
||||||
|
IL_0003: sizeof ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/SimpleStruct |
||||||
|
IL_0009: div |
||||||
|
IL_000a: conv.i8 |
||||||
|
IL_000b: ret |
||||||
|
} // end of method UnsafeCode::PointerSubtraction5 |
||||||
|
|
||||||
|
.method public hidebysig instance float64 |
||||||
|
FixedMemberAccess(valuetype ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/StructWithFixedSizeMembers* m, |
||||||
|
int32 i) cil managed |
||||||
|
{ |
||||||
|
// Code size 39 (0x27) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: ldflda valuetype ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/StructWithFixedSizeMembers/'<Integers>e__FixedBuffer0' ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/StructWithFixedSizeMembers::Integers |
||||||
|
IL_0006: ldflda int32 ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/StructWithFixedSizeMembers/'<Integers>e__FixedBuffer0'::FixedElementField |
||||||
|
IL_000b: conv.u |
||||||
|
IL_000c: ldarg.2 |
||||||
|
IL_000d: conv.i |
||||||
|
IL_000e: ldc.i4.4 |
||||||
|
IL_000f: mul |
||||||
|
IL_0010: add |
||||||
|
IL_0011: ldind.i4 |
||||||
|
IL_0012: conv.r8 |
||||||
|
IL_0013: ldarg.1 |
||||||
|
IL_0014: ldflda valuetype ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/StructWithFixedSizeMembers/'<Doubles>e__FixedBuffer1' ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/StructWithFixedSizeMembers::Doubles |
||||||
|
IL_0019: ldflda float64 ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/StructWithFixedSizeMembers/'<Doubles>e__FixedBuffer1'::FixedElementField |
||||||
|
IL_001e: conv.u |
||||||
|
IL_001f: ldarg.2 |
||||||
|
IL_0020: conv.i |
||||||
|
IL_0021: ldc.i4.8 |
||||||
|
IL_0022: mul |
||||||
|
IL_0023: add |
||||||
|
IL_0024: ldind.r8 |
||||||
|
IL_0025: add |
||||||
|
IL_0026: ret |
||||||
|
} // end of method UnsafeCode::FixedMemberAccess |
||||||
|
|
||||||
|
.method public hidebysig instance float64* |
||||||
|
FixedMemberBasePointer(valuetype ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/StructWithFixedSizeMembers* m) cil managed |
||||||
|
{ |
||||||
|
// Code size 13 (0xd) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: ldflda valuetype ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/StructWithFixedSizeMembers/'<Doubles>e__FixedBuffer1' ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/StructWithFixedSizeMembers::Doubles |
||||||
|
IL_0006: ldflda float64 ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/StructWithFixedSizeMembers/'<Doubles>e__FixedBuffer1'::FixedElementField |
||||||
|
IL_000b: conv.u |
||||||
|
IL_000c: ret |
||||||
|
} // end of method UnsafeCode::FixedMemberBasePointer |
||||||
|
|
||||||
|
.method public hidebysig instance string |
||||||
|
UsePointer(float64* ptr) cil managed |
||||||
|
{ |
||||||
|
// Code size 7 (0x7) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: call instance string [mscorlib]System.Double::ToString() |
||||||
|
IL_0006: ret |
||||||
|
} // end of method UnsafeCode::UsePointer |
||||||
|
|
||||||
|
.method public hidebysig instance string |
||||||
|
StackAlloc(int32 count) cil managed |
||||||
|
{ |
||||||
|
// Code size 52 (0x34) |
||||||
|
.maxstack 3 |
||||||
|
.locals init (char* V_0, |
||||||
|
char* V_1, |
||||||
|
int32 V_2) |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: conv.u |
||||||
|
IL_0002: ldc.i4.2 |
||||||
|
IL_0003: mul.ovf.un |
||||||
|
IL_0004: localloc |
||||||
|
IL_0006: stloc.0 |
||||||
|
IL_0007: ldc.i4.s 100 |
||||||
|
IL_0009: conv.u |
||||||
|
IL_000a: ldc.i4.2 |
||||||
|
IL_000b: mul.ovf.un |
||||||
|
IL_000c: localloc |
||||||
|
IL_000e: stloc.1 |
||||||
|
IL_000f: ldc.i4.0 |
||||||
|
IL_0010: stloc.2 |
||||||
|
IL_0011: br.s IL_0028 |
||||||
|
|
||||||
|
IL_0013: ldloc.0 |
||||||
|
IL_0014: ldloc.2 |
||||||
|
IL_0015: conv.i |
||||||
|
IL_0016: ldc.i4.2 |
||||||
|
IL_0017: mul |
||||||
|
IL_0018: add |
||||||
|
IL_0019: ldloc.2 |
||||||
|
IL_001a: conv.u2 |
||||||
|
IL_001b: stind.i2 |
||||||
|
IL_001c: ldloc.1 |
||||||
|
IL_001d: ldloc.2 |
||||||
|
IL_001e: conv.i |
||||||
|
IL_001f: ldc.i4.2 |
||||||
|
IL_0020: mul |
||||||
|
IL_0021: add |
||||||
|
IL_0022: ldc.i4.0 |
||||||
|
IL_0023: stind.i2 |
||||||
|
IL_0024: ldloc.2 |
||||||
|
IL_0025: ldc.i4.1 |
||||||
|
IL_0026: add |
||||||
|
IL_0027: stloc.2 |
||||||
|
IL_0028: ldloc.2 |
||||||
|
IL_0029: ldarg.1 |
||||||
|
IL_002a: blt.s IL_0013 |
||||||
|
|
||||||
|
IL_002c: ldarg.0 |
||||||
|
IL_002d: ldloc.0 |
||||||
|
IL_002e: call instance string ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode::UsePointer(float64*) |
||||||
|
IL_0033: ret |
||||||
|
} // end of method UnsafeCode::StackAlloc |
||||||
|
|
||||||
|
.method public hidebysig instance string |
||||||
|
StackAllocStruct(int32 count) cil managed |
||||||
|
{ |
||||||
|
// Code size 41 (0x29) |
||||||
|
.maxstack 2 |
||||||
|
.locals init (valuetype ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/SimpleStruct* V_0) |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: ldc.i4.2 |
||||||
|
IL_0002: mul.ovf |
||||||
|
IL_0003: conv.u |
||||||
|
IL_0004: sizeof ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/SimpleStruct |
||||||
|
IL_000a: mul.ovf.un |
||||||
|
IL_000b: localloc |
||||||
|
IL_000d: stloc.0 |
||||||
|
IL_000e: ldc.i4.s 10 |
||||||
|
IL_0010: conv.u |
||||||
|
IL_0011: sizeof ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/SimpleStruct |
||||||
|
IL_0017: mul.ovf.un |
||||||
|
IL_0018: localloc |
||||||
|
IL_001a: pop |
||||||
|
IL_001b: ldarg.0 |
||||||
|
IL_001c: ldloc.0 |
||||||
|
IL_001d: ldflda float64 ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/SimpleStruct::Y |
||||||
|
IL_0022: conv.u |
||||||
|
IL_0023: call instance string ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode::UsePointer(float64*) |
||||||
|
IL_0028: ret |
||||||
|
} // end of method UnsafeCode::StackAllocStruct |
||||||
|
|
||||||
|
.method family hidebysig virtual instance void |
||||||
|
Finalize() cil managed |
||||||
|
{ |
||||||
|
// Code size 22 (0x16) |
||||||
|
.maxstack 2 |
||||||
|
.try |
||||||
|
{ |
||||||
|
IL_0000: ldarg.0 |
||||||
|
IL_0001: ldarg.0 |
||||||
|
IL_0002: call instance int32* ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode::get_NullPointer() |
||||||
|
IL_0007: call instance void ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode::PassPointerAsRefParameter(int32*) |
||||||
|
IL_000c: leave.s IL_0015 |
||||||
|
|
||||||
|
} // end .try |
||||||
|
finally |
||||||
|
{ |
||||||
|
IL_000e: ldarg.0 |
||||||
|
IL_000f: call instance void [mscorlib]System.Object::Finalize() |
||||||
|
IL_0014: endfinally |
||||||
|
} // end handler |
||||||
|
IL_0015: ret |
||||||
|
} // end of method UnsafeCode::Finalize |
||||||
|
|
||||||
|
.method public hidebysig specialname rtspecialname |
||||||
|
instance void .ctor() cil managed |
||||||
|
{ |
||||||
|
// Code size 7 (0x7) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarg.0 |
||||||
|
IL_0001: call instance void [mscorlib]System.Object::.ctor() |
||||||
|
IL_0006: ret |
||||||
|
} // end of method UnsafeCode::.ctor |
||||||
|
|
||||||
|
.property instance int32* NullPointer() |
||||||
|
{ |
||||||
|
.get instance int32* ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode::get_NullPointer() |
||||||
|
} // end of property UnsafeCode::NullPointer |
||||||
|
} // end of class ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode |
||||||
|
|
||||||
|
|
||||||
|
// ============================================================= |
||||||
|
|
||||||
|
// *********** DISASSEMBLY COMPLETE *********************** |
||||||
|
// WARNING: Created Win32 resource file ../../../TestCases/Pretty\UnsafeCode.opt.res |
||||||
@ -0,0 +1,910 @@ |
|||||||
|
|
||||||
|
// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 |
||||||
|
// Copyright (c) Microsoft Corporation. All rights reserved. |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Metadata version: v4.0.30319 |
||||||
|
.assembly extern mscorlib |
||||||
|
{ |
||||||
|
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. |
||||||
|
.ver 4:0:0:0 |
||||||
|
} |
||||||
|
.assembly UnsafeCode |
||||||
|
{ |
||||||
|
.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.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. |
||||||
|
|
||||||
|
// --- The following custom attribute is added automatically, do not uncomment ------- |
||||||
|
// .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 02 00 00 00 00 00 ) |
||||||
|
|
||||||
|
.permissionset reqmin |
||||||
|
= {[mscorlib]System.Security.Permissions.SecurityPermissionAttribute = {property bool 'SkipVerification' = bool(true)}} |
||||||
|
.hash algorithm 0x00008004 |
||||||
|
.ver 0:0:0:0 |
||||||
|
} |
||||||
|
.module UnsafeCode.dll |
||||||
|
// MVID: {958D637E-F39D-447B-A248-B73AECEC847A} |
||||||
|
.custom instance void [mscorlib]System.Security.UnverifiableCodeAttribute::.ctor() = ( 01 00 00 00 ) |
||||||
|
.imagebase 0x10000000 |
||||||
|
.file alignment 0x00000200 |
||||||
|
.stackreserve 0x00100000 |
||||||
|
.subsystem 0x0003 // WINDOWS_CUI |
||||||
|
.corflags 0x00000001 // ILONLY |
||||||
|
// Image base: 0x007C0000 |
||||||
|
|
||||||
|
|
||||||
|
// =============== CLASS MEMBERS DECLARATION =================== |
||||||
|
|
||||||
|
.class public auto ansi beforefieldinit ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode |
||||||
|
extends [mscorlib]System.Object |
||||||
|
{ |
||||||
|
.class sequential ansi sealed nested public beforefieldinit SimpleStruct |
||||||
|
extends [mscorlib]System.ValueType |
||||||
|
{ |
||||||
|
.field public int32 X |
||||||
|
.field public float64 Y |
||||||
|
} // end of class SimpleStruct |
||||||
|
|
||||||
|
.class sequential ansi sealed nested public beforefieldinit StructWithFixedSizeMembers |
||||||
|
extends [mscorlib]System.ValueType |
||||||
|
{ |
||||||
|
.class sequential ansi sealed nested public beforefieldinit '<Integers>e__FixedBuffer' |
||||||
|
extends [mscorlib]System.ValueType |
||||||
|
{ |
||||||
|
.pack 0 |
||||||
|
.size 400 |
||||||
|
.custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) |
||||||
|
.custom instance void [mscorlib]System.Runtime.CompilerServices.UnsafeValueTypeAttribute::.ctor() = ( 01 00 00 00 ) |
||||||
|
.field public int32 FixedElementField |
||||||
|
} // end of class '<Integers>e__FixedBuffer' |
||||||
|
|
||||||
|
.class sequential ansi sealed nested public beforefieldinit '<Doubles>e__FixedBuffer' |
||||||
|
extends [mscorlib]System.ValueType |
||||||
|
{ |
||||||
|
.pack 0 |
||||||
|
.size 1600 |
||||||
|
.custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) |
||||||
|
.custom instance void [mscorlib]System.Runtime.CompilerServices.UnsafeValueTypeAttribute::.ctor() = ( 01 00 00 00 ) |
||||||
|
.field public float64 FixedElementField |
||||||
|
} // end of class '<Doubles>e__FixedBuffer' |
||||||
|
|
||||||
|
.class sequential ansi sealed nested public beforefieldinit '<Old>e__FixedBuffer' |
||||||
|
extends [mscorlib]System.ValueType |
||||||
|
{ |
||||||
|
.pack 0 |
||||||
|
.size 1 |
||||||
|
.custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) |
||||||
|
.custom instance void [mscorlib]System.Runtime.CompilerServices.UnsafeValueTypeAttribute::.ctor() = ( 01 00 00 00 ) |
||||||
|
.field public uint8 FixedElementField |
||||||
|
} // end of class '<Old>e__FixedBuffer' |
||||||
|
|
||||||
|
.field public valuetype ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/StructWithFixedSizeMembers/'<Integers>e__FixedBuffer' Integers |
||||||
|
.custom instance void [mscorlib]System.Runtime.CompilerServices.FixedBufferAttribute::.ctor(class [mscorlib]System.Type, |
||||||
|
int32) = ( 01 00 59 53 79 73 74 65 6D 2E 49 6E 74 33 32 2C // ..YSystem.Int32, |
||||||
|
20 6D 73 63 6F 72 6C 69 62 2C 20 56 65 72 73 69 // mscorlib, Versi |
||||||
|
6F 6E 3D 34 2E 30 2E 30 2E 30 2C 20 43 75 6C 74 // on=4.0.0.0, Cult |
||||||
|
75 72 65 3D 6E 65 75 74 72 61 6C 2C 20 50 75 62 // ure=neutral, Pub |
||||||
|
6C 69 63 4B 65 79 54 6F 6B 65 6E 3D 62 37 37 61 // licKeyToken=b77a |
||||||
|
35 63 35 36 31 39 33 34 65 30 38 39 64 00 00 00 // 5c561934e089d... |
||||||
|
00 00 ) |
||||||
|
.field public int32 NormalMember |
||||||
|
.field public valuetype ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/StructWithFixedSizeMembers/'<Doubles>e__FixedBuffer' Doubles |
||||||
|
.custom instance void [mscorlib]System.Runtime.CompilerServices.FixedBufferAttribute::.ctor(class [mscorlib]System.Type, |
||||||
|
int32) = ( 01 00 5A 53 79 73 74 65 6D 2E 44 6F 75 62 6C 65 // ..ZSystem.Double |
||||||
|
2C 20 6D 73 63 6F 72 6C 69 62 2C 20 56 65 72 73 // , mscorlib, Vers |
||||||
|
69 6F 6E 3D 34 2E 30 2E 30 2E 30 2C 20 43 75 6C // ion=4.0.0.0, Cul |
||||||
|
74 75 72 65 3D 6E 65 75 74 72 61 6C 2C 20 50 75 // ture=neutral, Pu |
||||||
|
62 6C 69 63 4B 65 79 54 6F 6B 65 6E 3D 62 37 37 // blicKeyToken=b77 |
||||||
|
61 35 63 35 36 31 39 33 34 65 30 38 39 C8 00 00 // a5c561934e089... |
||||||
|
00 00 00 ) |
||||||
|
.field public valuetype ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/StructWithFixedSizeMembers/'<Old>e__FixedBuffer' Old |
||||||
|
.custom instance void [mscorlib]System.Runtime.CompilerServices.FixedBufferAttribute::.ctor(class [mscorlib]System.Type, |
||||||
|
int32) = ( 01 00 58 53 79 73 74 65 6D 2E 42 79 74 65 2C 20 // ..XSystem.Byte, |
||||||
|
6D 73 63 6F 72 6C 69 62 2C 20 56 65 72 73 69 6F // mscorlib, Versio |
||||||
|
6E 3D 34 2E 30 2E 30 2E 30 2C 20 43 75 6C 74 75 // n=4.0.0.0, Cultu |
||||||
|
72 65 3D 6E 65 75 74 72 61 6C 2C 20 50 75 62 6C // re=neutral, Publ |
||||||
|
69 63 4B 65 79 54 6F 6B 65 6E 3D 62 37 37 61 35 // icKeyToken=b77a5 |
||||||
|
63 35 36 31 39 33 34 65 30 38 39 01 00 00 00 00 // c561934e089..... |
||||||
|
00 ) |
||||||
|
.custom instance void [mscorlib]System.ObsoleteAttribute::.ctor(string) = ( 01 00 11 61 6E 6F 74 68 65 72 20 61 74 74 72 69 // ...another attri |
||||||
|
62 75 74 65 00 00 ) // bute.. |
||||||
|
} // end of class StructWithFixedSizeMembers |
||||||
|
|
||||||
|
.method public hidebysig specialname instance int32* |
||||||
|
get_NullPointer() cil managed |
||||||
|
{ |
||||||
|
// Code size 3 (0x3) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldc.i4.0 |
||||||
|
IL_0001: conv.u |
||||||
|
IL_0002: ret |
||||||
|
} // end of method UnsafeCode::get_NullPointer |
||||||
|
|
||||||
|
.method public hidebysig instance int32 |
||||||
|
SizeOf() cil managed |
||||||
|
{ |
||||||
|
// Code size 7 (0x7) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: sizeof ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/SimpleStruct |
||||||
|
IL_0006: ret |
||||||
|
} // end of method UnsafeCode::SizeOf |
||||||
|
|
||||||
|
.method private hidebysig static void UseBool(bool b) cil managed |
||||||
|
{ |
||||||
|
// Code size 1 (0x1) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ret |
||||||
|
} // end of method UnsafeCode::UseBool |
||||||
|
|
||||||
|
.method public hidebysig instance void |
||||||
|
PointerComparison(int32* a, |
||||||
|
float64* b) cil managed |
||||||
|
{ |
||||||
|
// Code size 64 (0x40) |
||||||
|
.maxstack 2 |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: ldarg.2 |
||||||
|
IL_0002: ceq |
||||||
|
IL_0004: call void ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode::UseBool(bool) |
||||||
|
IL_0009: ldarg.1 |
||||||
|
IL_000a: ldarg.2 |
||||||
|
IL_000b: ceq |
||||||
|
IL_000d: ldc.i4.0 |
||||||
|
IL_000e: ceq |
||||||
|
IL_0010: call void ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode::UseBool(bool) |
||||||
|
IL_0015: ldarg.1 |
||||||
|
IL_0016: ldarg.2 |
||||||
|
IL_0017: clt.un |
||||||
|
IL_0019: call void ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode::UseBool(bool) |
||||||
|
IL_001e: ldarg.1 |
||||||
|
IL_001f: ldarg.2 |
||||||
|
IL_0020: cgt.un |
||||||
|
IL_0022: call void ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode::UseBool(bool) |
||||||
|
IL_0027: ldarg.1 |
||||||
|
IL_0028: ldarg.2 |
||||||
|
IL_0029: cgt.un |
||||||
|
IL_002b: ldc.i4.0 |
||||||
|
IL_002c: ceq |
||||||
|
IL_002e: call void ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode::UseBool(bool) |
||||||
|
IL_0033: ldarg.1 |
||||||
|
IL_0034: ldarg.2 |
||||||
|
IL_0035: clt.un |
||||||
|
IL_0037: ldc.i4.0 |
||||||
|
IL_0038: ceq |
||||||
|
IL_003a: call void ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode::UseBool(bool) |
||||||
|
IL_003f: ret |
||||||
|
} // end of method UnsafeCode::PointerComparison |
||||||
|
|
||||||
|
.method public hidebysig instance void |
||||||
|
PointerComparisonWithNull(int32* a) cil managed |
||||||
|
{ |
||||||
|
// Code size 24 (0x18) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: ldc.i4.0 |
||||||
|
IL_0002: conv.u |
||||||
|
IL_0003: ceq |
||||||
|
IL_0005: call void ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode::UseBool(bool) |
||||||
|
IL_000a: ldarg.1 |
||||||
|
IL_000b: ldc.i4.0 |
||||||
|
IL_000c: conv.u |
||||||
|
IL_000d: ceq |
||||||
|
IL_000f: ldc.i4.0 |
||||||
|
IL_0010: ceq |
||||||
|
IL_0012: call void ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode::UseBool(bool) |
||||||
|
IL_0017: ret |
||||||
|
} // end of method UnsafeCode::PointerComparisonWithNull |
||||||
|
|
||||||
|
.method public hidebysig instance int32* |
||||||
|
PointerCast(int64* p) cil managed |
||||||
|
{ |
||||||
|
// Code size 2 (0x2) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: ret |
||||||
|
} // end of method UnsafeCode::PointerCast |
||||||
|
|
||||||
|
.method public hidebysig instance int64 |
||||||
|
ConvertDoubleToLong(float64 d) cil managed |
||||||
|
{ |
||||||
|
// Code size 5 (0x5) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarga.s d |
||||||
|
IL_0002: conv.u |
||||||
|
IL_0003: ldind.i8 |
||||||
|
IL_0004: ret |
||||||
|
} // end of method UnsafeCode::ConvertDoubleToLong |
||||||
|
|
||||||
|
.method public hidebysig instance float64 |
||||||
|
ConvertLongToDouble(int64 d) cil managed |
||||||
|
{ |
||||||
|
// Code size 5 (0x5) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarga.s d |
||||||
|
IL_0002: conv.u |
||||||
|
IL_0003: ldind.r8 |
||||||
|
IL_0004: ret |
||||||
|
} // end of method UnsafeCode::ConvertLongToDouble |
||||||
|
|
||||||
|
.method public hidebysig instance int32 |
||||||
|
ConvertFloatToInt(float32 d) cil managed |
||||||
|
{ |
||||||
|
// Code size 5 (0x5) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarga.s d |
||||||
|
IL_0002: conv.u |
||||||
|
IL_0003: ldind.i4 |
||||||
|
IL_0004: ret |
||||||
|
} // end of method UnsafeCode::ConvertFloatToInt |
||||||
|
|
||||||
|
.method public hidebysig instance float32 |
||||||
|
ConvertIntToFloat(int32 d) cil managed |
||||||
|
{ |
||||||
|
// Code size 5 (0x5) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarga.s d |
||||||
|
IL_0002: conv.u |
||||||
|
IL_0003: ldind.r4 |
||||||
|
IL_0004: ret |
||||||
|
} // end of method UnsafeCode::ConvertIntToFloat |
||||||
|
|
||||||
|
.method public hidebysig instance int32 |
||||||
|
PointerCasts() cil managed |
||||||
|
{ |
||||||
|
// Code size 20 (0x14) |
||||||
|
.maxstack 2 |
||||||
|
.locals init (int32 V_0) |
||||||
|
IL_0000: ldc.i4.0 |
||||||
|
IL_0001: stloc.0 |
||||||
|
IL_0002: ldloca.s V_0 |
||||||
|
IL_0004: conv.u |
||||||
|
IL_0005: ldc.r4 0.5 |
||||||
|
IL_000a: stind.r4 |
||||||
|
IL_000b: ldloca.s V_0 |
||||||
|
IL_000d: conv.u |
||||||
|
IL_000e: ldc.i4.3 |
||||||
|
IL_000f: add |
||||||
|
IL_0010: ldc.i4.3 |
||||||
|
IL_0011: stind.i1 |
||||||
|
IL_0012: ldloc.0 |
||||||
|
IL_0013: ret |
||||||
|
} // end of method UnsafeCode::PointerCasts |
||||||
|
|
||||||
|
.method public hidebysig instance void |
||||||
|
PassRefParameterAsPointer(int32& p) cil managed |
||||||
|
{ |
||||||
|
// Code size 14 (0xe) |
||||||
|
.maxstack 2 |
||||||
|
.locals init (int32& pinned V_0) |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: stloc.0 |
||||||
|
IL_0002: ldarg.0 |
||||||
|
IL_0003: ldloc.0 |
||||||
|
IL_0004: conv.i |
||||||
|
IL_0005: call instance void ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode::PassPointerAsRefParameter(int32*) |
||||||
|
IL_000a: ldc.i4.0 |
||||||
|
IL_000b: conv.u |
||||||
|
IL_000c: stloc.0 |
||||||
|
IL_000d: ret |
||||||
|
} // end of method UnsafeCode::PassRefParameterAsPointer |
||||||
|
|
||||||
|
.method public hidebysig instance void |
||||||
|
PassPointerAsRefParameter(int32* p) cil managed |
||||||
|
{ |
||||||
|
// Code size 8 (0x8) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarg.0 |
||||||
|
IL_0001: ldarg.1 |
||||||
|
IL_0002: call instance void ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode::PassRefParameterAsPointer(int32&) |
||||||
|
IL_0007: ret |
||||||
|
} // end of method UnsafeCode::PassPointerAsRefParameter |
||||||
|
|
||||||
|
.method public hidebysig instance void |
||||||
|
AddressInMultiDimensionalArray(float64[0...,0...] matrix) cil managed |
||||||
|
{ |
||||||
|
// Code size 31 (0x1f) |
||||||
|
.maxstack 3 |
||||||
|
.locals init (float64& pinned V_0) |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: ldc.i4.1 |
||||||
|
IL_0002: ldc.i4.2 |
||||||
|
IL_0003: call instance float64& float64[0...,0...]::Address(int32, |
||||||
|
int32) |
||||||
|
IL_0008: stloc.0 |
||||||
|
IL_0009: ldarg.0 |
||||||
|
IL_000a: ldloc.0 |
||||||
|
IL_000b: conv.i |
||||||
|
IL_000c: call instance string ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode::PointerReferenceExpression(float64*) |
||||||
|
IL_0011: pop |
||||||
|
IL_0012: ldarg.0 |
||||||
|
IL_0013: ldloc.0 |
||||||
|
IL_0014: conv.i |
||||||
|
IL_0015: call instance string ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode::PointerReferenceExpression(float64*) |
||||||
|
IL_001a: pop |
||||||
|
IL_001b: ldc.i4.0 |
||||||
|
IL_001c: conv.u |
||||||
|
IL_001d: stloc.0 |
||||||
|
IL_001e: ret |
||||||
|
} // end of method UnsafeCode::AddressInMultiDimensionalArray |
||||||
|
|
||||||
|
.method public hidebysig instance void |
||||||
|
FixedStringAccess(string text) cil managed |
||||||
|
{ |
||||||
|
// Code size 37 (0x25) |
||||||
|
.maxstack 2 |
||||||
|
.locals init (char* V_0, |
||||||
|
string pinned V_1, |
||||||
|
char* V_2) |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: stloc.1 |
||||||
|
IL_0002: ldloc.1 |
||||||
|
IL_0003: conv.i |
||||||
|
IL_0004: stloc.0 |
||||||
|
IL_0005: ldloc.0 |
||||||
|
IL_0006: brfalse.s IL_0010 |
||||||
|
|
||||||
|
IL_0008: ldloc.0 |
||||||
|
IL_0009: call int32 [mscorlib]System.Runtime.CompilerServices.RuntimeHelpers::get_OffsetToStringData() |
||||||
|
IL_000e: add |
||||||
|
IL_000f: stloc.0 |
||||||
|
IL_0010: ldloc.0 |
||||||
|
IL_0011: stloc.2 |
||||||
|
IL_0012: br.s IL_001c |
||||||
|
|
||||||
|
IL_0014: ldloc.2 |
||||||
|
IL_0015: ldc.i4.s 65 |
||||||
|
IL_0017: stind.i2 |
||||||
|
IL_0018: ldloc.2 |
||||||
|
IL_0019: ldc.i4.2 |
||||||
|
IL_001a: add |
||||||
|
IL_001b: stloc.2 |
||||||
|
IL_001c: ldloc.2 |
||||||
|
IL_001d: ldind.u2 |
||||||
|
IL_001e: ldc.i4.s 97 |
||||||
|
IL_0020: beq.s IL_0014 |
||||||
|
|
||||||
|
IL_0022: ldnull |
||||||
|
IL_0023: stloc.1 |
||||||
|
IL_0024: ret |
||||||
|
} // end of method UnsafeCode::FixedStringAccess |
||||||
|
|
||||||
|
.method public hidebysig instance void |
||||||
|
PutDoubleIntoLongArray1(int64[] 'array', |
||||||
|
int32 index, |
||||||
|
float64 val) cil managed |
||||||
|
{ |
||||||
|
// Code size 36 (0x24) |
||||||
|
.maxstack 3 |
||||||
|
.locals init (int64& pinned V_0, |
||||||
|
int64[] V_1) |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: dup |
||||||
|
IL_0002: stloc.1 |
||||||
|
IL_0003: brfalse.s IL_000a |
||||||
|
|
||||||
|
IL_0005: ldloc.1 |
||||||
|
IL_0006: ldlen |
||||||
|
IL_0007: conv.i4 |
||||||
|
IL_0008: brtrue.s IL_000f |
||||||
|
|
||||||
|
IL_000a: ldc.i4.0 |
||||||
|
IL_000b: conv.u |
||||||
|
IL_000c: stloc.0 |
||||||
|
IL_000d: br.s IL_0017 |
||||||
|
|
||||||
|
IL_000f: ldloc.1 |
||||||
|
IL_0010: ldc.i4.0 |
||||||
|
IL_0011: ldelema [mscorlib]System.Int64 |
||||||
|
IL_0016: stloc.0 |
||||||
|
IL_0017: ldloc.0 |
||||||
|
IL_0018: conv.i |
||||||
|
IL_0019: ldarg.2 |
||||||
|
IL_001a: conv.i |
||||||
|
IL_001b: ldc.i4.8 |
||||||
|
IL_001c: mul |
||||||
|
IL_001d: add |
||||||
|
IL_001e: ldarg.3 |
||||||
|
IL_001f: stind.r8 |
||||||
|
IL_0020: ldc.i4.0 |
||||||
|
IL_0021: conv.u |
||||||
|
IL_0022: stloc.0 |
||||||
|
IL_0023: ret |
||||||
|
} // end of method UnsafeCode::PutDoubleIntoLongArray1 |
||||||
|
|
||||||
|
.method public hidebysig instance void |
||||||
|
PutDoubleIntoLongArray2(int64[] 'array', |
||||||
|
int32 index, |
||||||
|
float64 val) cil managed |
||||||
|
{ |
||||||
|
// Code size 16 (0x10) |
||||||
|
.maxstack 2 |
||||||
|
.locals init (int64& pinned V_0) |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: ldarg.2 |
||||||
|
IL_0002: ldelema [mscorlib]System.Int64 |
||||||
|
IL_0007: stloc.0 |
||||||
|
IL_0008: ldloc.0 |
||||||
|
IL_0009: conv.i |
||||||
|
IL_000a: ldarg.3 |
||||||
|
IL_000b: stind.r8 |
||||||
|
IL_000c: ldc.i4.0 |
||||||
|
IL_000d: conv.u |
||||||
|
IL_000e: stloc.0 |
||||||
|
IL_000f: ret |
||||||
|
} // end of method UnsafeCode::PutDoubleIntoLongArray2 |
||||||
|
|
||||||
|
.method public hidebysig instance string |
||||||
|
PointerReferenceExpression(float64* d) cil managed |
||||||
|
{ |
||||||
|
// Code size 7 (0x7) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: call instance string [mscorlib]System.Double::ToString() |
||||||
|
IL_0006: ret |
||||||
|
} // end of method UnsafeCode::PointerReferenceExpression |
||||||
|
|
||||||
|
.method public hidebysig instance string |
||||||
|
PointerReferenceExpression2(int64 addr) cil managed |
||||||
|
{ |
||||||
|
// Code size 8 (0x8) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: conv.u |
||||||
|
IL_0002: call instance string [mscorlib]System.Int32::ToString() |
||||||
|
IL_0007: ret |
||||||
|
} // end of method UnsafeCode::PointerReferenceExpression2 |
||||||
|
|
||||||
|
.method public hidebysig instance int32* |
||||||
|
PointerArithmetic(int32* p) cil managed |
||||||
|
{ |
||||||
|
// Code size 7 (0x7) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: ldc.i4.2 |
||||||
|
IL_0002: conv.i |
||||||
|
IL_0003: ldc.i4.4 |
||||||
|
IL_0004: mul |
||||||
|
IL_0005: add |
||||||
|
IL_0006: ret |
||||||
|
} // end of method UnsafeCode::PointerArithmetic |
||||||
|
|
||||||
|
.method public hidebysig instance int64* |
||||||
|
PointerArithmetic2(int64* p) cil managed |
||||||
|
{ |
||||||
|
// Code size 7 (0x7) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldc.i4.3 |
||||||
|
IL_0001: conv.i |
||||||
|
IL_0002: ldc.i4.8 |
||||||
|
IL_0003: mul |
||||||
|
IL_0004: ldarg.1 |
||||||
|
IL_0005: add |
||||||
|
IL_0006: ret |
||||||
|
} // end of method UnsafeCode::PointerArithmetic2 |
||||||
|
|
||||||
|
.method public hidebysig instance int64* |
||||||
|
PointerArithmetic3(int64* p) cil managed |
||||||
|
{ |
||||||
|
// Code size 4 (0x4) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: ldc.i4.3 |
||||||
|
IL_0002: add |
||||||
|
IL_0003: ret |
||||||
|
} // end of method UnsafeCode::PointerArithmetic3 |
||||||
|
|
||||||
|
.method public hidebysig instance int64* |
||||||
|
PointerArithmetic4(void* p) cil managed |
||||||
|
{ |
||||||
|
// Code size 4 (0x4) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: ldc.i4.3 |
||||||
|
IL_0002: add |
||||||
|
IL_0003: ret |
||||||
|
} // end of method UnsafeCode::PointerArithmetic4 |
||||||
|
|
||||||
|
.method public hidebysig instance int32 |
||||||
|
PointerArithmetic5(void* p, |
||||||
|
uint8* q, |
||||||
|
int32 i) cil managed |
||||||
|
{ |
||||||
|
// Code size 8 (0x8) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarg.2 |
||||||
|
IL_0001: ldarg.3 |
||||||
|
IL_0002: add |
||||||
|
IL_0003: ldind.u1 |
||||||
|
IL_0004: ldarg.1 |
||||||
|
IL_0005: ldind.u1 |
||||||
|
IL_0006: add |
||||||
|
IL_0007: ret |
||||||
|
} // end of method UnsafeCode::PointerArithmetic5 |
||||||
|
|
||||||
|
.method public hidebysig instance int32 |
||||||
|
PointerArithmetic6(valuetype ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/SimpleStruct* p, |
||||||
|
int32 i) cil managed |
||||||
|
{ |
||||||
|
// Code size 17 (0x11) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: ldarg.2 |
||||||
|
IL_0002: conv.i |
||||||
|
IL_0003: sizeof ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/SimpleStruct |
||||||
|
IL_0009: mul |
||||||
|
IL_000a: add |
||||||
|
IL_000b: ldfld int32 ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/SimpleStruct::X |
||||||
|
IL_0010: ret |
||||||
|
} // end of method UnsafeCode::PointerArithmetic6 |
||||||
|
|
||||||
|
.method public hidebysig instance int32* |
||||||
|
PointerArithmeticLong1(int32* p, |
||||||
|
int64 offset) cil managed |
||||||
|
{ |
||||||
|
// Code size 8 (0x8) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: ldarg.2 |
||||||
|
IL_0002: ldc.i4.4 |
||||||
|
IL_0003: conv.i8 |
||||||
|
IL_0004: mul |
||||||
|
IL_0005: conv.i |
||||||
|
IL_0006: add |
||||||
|
IL_0007: ret |
||||||
|
} // end of method UnsafeCode::PointerArithmeticLong1 |
||||||
|
|
||||||
|
.method public hidebysig instance int32* |
||||||
|
PointerArithmeticLong2(int32* p, |
||||||
|
int64 offset) cil managed |
||||||
|
{ |
||||||
|
// Code size 8 (0x8) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarg.2 |
||||||
|
IL_0001: ldc.i4.4 |
||||||
|
IL_0002: conv.i8 |
||||||
|
IL_0003: mul |
||||||
|
IL_0004: conv.i |
||||||
|
IL_0005: ldarg.1 |
||||||
|
IL_0006: add |
||||||
|
IL_0007: ret |
||||||
|
} // end of method UnsafeCode::PointerArithmeticLong2 |
||||||
|
|
||||||
|
.method public hidebysig instance int32* |
||||||
|
PointerArithmeticLong3(int32* p, |
||||||
|
int64 offset) cil managed |
||||||
|
{ |
||||||
|
// Code size 8 (0x8) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: ldarg.2 |
||||||
|
IL_0002: ldc.i4.4 |
||||||
|
IL_0003: conv.i8 |
||||||
|
IL_0004: mul |
||||||
|
IL_0005: conv.i |
||||||
|
IL_0006: sub |
||||||
|
IL_0007: ret |
||||||
|
} // end of method UnsafeCode::PointerArithmeticLong3 |
||||||
|
|
||||||
|
.method public hidebysig instance valuetype ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/SimpleStruct* |
||||||
|
PointerArithmeticLong1s(valuetype ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/SimpleStruct* p, |
||||||
|
int64 offset) cil managed |
||||||
|
{ |
||||||
|
// Code size 13 (0xd) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: ldarg.2 |
||||||
|
IL_0002: sizeof ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/SimpleStruct |
||||||
|
IL_0008: conv.i8 |
||||||
|
IL_0009: mul |
||||||
|
IL_000a: conv.i |
||||||
|
IL_000b: add |
||||||
|
IL_000c: ret |
||||||
|
} // end of method UnsafeCode::PointerArithmeticLong1s |
||||||
|
|
||||||
|
.method public hidebysig instance valuetype ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/SimpleStruct* |
||||||
|
PointerArithmeticLong2s(valuetype ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/SimpleStruct* p, |
||||||
|
int64 offset) cil managed |
||||||
|
{ |
||||||
|
// Code size 13 (0xd) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarg.2 |
||||||
|
IL_0001: sizeof ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/SimpleStruct |
||||||
|
IL_0007: conv.i8 |
||||||
|
IL_0008: mul |
||||||
|
IL_0009: conv.i |
||||||
|
IL_000a: ldarg.1 |
||||||
|
IL_000b: add |
||||||
|
IL_000c: ret |
||||||
|
} // end of method UnsafeCode::PointerArithmeticLong2s |
||||||
|
|
||||||
|
.method public hidebysig instance valuetype ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/SimpleStruct* |
||||||
|
PointerArithmeticLong3s(valuetype ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/SimpleStruct* p, |
||||||
|
int64 offset) cil managed |
||||||
|
{ |
||||||
|
// Code size 13 (0xd) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: ldarg.2 |
||||||
|
IL_0002: sizeof ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/SimpleStruct |
||||||
|
IL_0008: conv.i8 |
||||||
|
IL_0009: mul |
||||||
|
IL_000a: conv.i |
||||||
|
IL_000b: sub |
||||||
|
IL_000c: ret |
||||||
|
} // end of method UnsafeCode::PointerArithmeticLong3s |
||||||
|
|
||||||
|
.method public hidebysig instance int32 |
||||||
|
PointerSubtraction(int64* p, |
||||||
|
int64* q) cil managed |
||||||
|
{ |
||||||
|
// Code size 8 (0x8) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: ldarg.2 |
||||||
|
IL_0002: sub |
||||||
|
IL_0003: ldc.i4.8 |
||||||
|
IL_0004: div |
||||||
|
IL_0005: conv.i8 |
||||||
|
IL_0006: conv.i4 |
||||||
|
IL_0007: ret |
||||||
|
} // end of method UnsafeCode::PointerSubtraction |
||||||
|
|
||||||
|
.method public hidebysig instance int64 |
||||||
|
PointerSubtractionLong(int64* p, |
||||||
|
int64* q) cil managed |
||||||
|
{ |
||||||
|
// Code size 7 (0x7) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: ldarg.2 |
||||||
|
IL_0002: sub |
||||||
|
IL_0003: ldc.i4.8 |
||||||
|
IL_0004: div |
||||||
|
IL_0005: conv.i8 |
||||||
|
IL_0006: ret |
||||||
|
} // end of method UnsafeCode::PointerSubtractionLong |
||||||
|
|
||||||
|
.method public hidebysig instance int32 |
||||||
|
PointerSubtraction2(int64* p, |
||||||
|
int16* q) cil managed |
||||||
|
{ |
||||||
|
// Code size 8 (0x8) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: ldarg.2 |
||||||
|
IL_0002: sub |
||||||
|
IL_0003: ldc.i4.1 |
||||||
|
IL_0004: div |
||||||
|
IL_0005: conv.i8 |
||||||
|
IL_0006: conv.i4 |
||||||
|
IL_0007: ret |
||||||
|
} // end of method UnsafeCode::PointerSubtraction2 |
||||||
|
|
||||||
|
.method public hidebysig instance int32 |
||||||
|
PointerSubtraction3(void* p, |
||||||
|
void* q) cil managed |
||||||
|
{ |
||||||
|
// Code size 8 (0x8) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: ldarg.2 |
||||||
|
IL_0002: sub |
||||||
|
IL_0003: ldc.i4.1 |
||||||
|
IL_0004: div |
||||||
|
IL_0005: conv.i8 |
||||||
|
IL_0006: conv.i4 |
||||||
|
IL_0007: ret |
||||||
|
} // end of method UnsafeCode::PointerSubtraction3 |
||||||
|
|
||||||
|
.method public hidebysig instance int64 |
||||||
|
PointerSubtraction4(int8* p, |
||||||
|
int8* q) cil managed |
||||||
|
{ |
||||||
|
// Code size 7 (0x7) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: ldarg.2 |
||||||
|
IL_0002: sub |
||||||
|
IL_0003: ldc.i4.1 |
||||||
|
IL_0004: div |
||||||
|
IL_0005: conv.i8 |
||||||
|
IL_0006: ret |
||||||
|
} // end of method UnsafeCode::PointerSubtraction4 |
||||||
|
|
||||||
|
.method public hidebysig instance int64 |
||||||
|
PointerSubtraction5(valuetype ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/SimpleStruct* p, |
||||||
|
valuetype ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/SimpleStruct* q) cil managed |
||||||
|
{ |
||||||
|
// Code size 12 (0xc) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: ldarg.2 |
||||||
|
IL_0002: sub |
||||||
|
IL_0003: sizeof ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/SimpleStruct |
||||||
|
IL_0009: div |
||||||
|
IL_000a: conv.i8 |
||||||
|
IL_000b: ret |
||||||
|
} // end of method UnsafeCode::PointerSubtraction5 |
||||||
|
|
||||||
|
.method public hidebysig instance float64 |
||||||
|
FixedMemberAccess(valuetype ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/StructWithFixedSizeMembers* m, |
||||||
|
int32 i) cil managed |
||||||
|
{ |
||||||
|
// Code size 39 (0x27) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: ldflda valuetype ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/StructWithFixedSizeMembers/'<Integers>e__FixedBuffer' ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/StructWithFixedSizeMembers::Integers |
||||||
|
IL_0006: ldflda int32 ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/StructWithFixedSizeMembers/'<Integers>e__FixedBuffer'::FixedElementField |
||||||
|
IL_000b: conv.u |
||||||
|
IL_000c: ldarg.2 |
||||||
|
IL_000d: conv.i |
||||||
|
IL_000e: ldc.i4.4 |
||||||
|
IL_000f: mul |
||||||
|
IL_0010: add |
||||||
|
IL_0011: ldind.i4 |
||||||
|
IL_0012: conv.r8 |
||||||
|
IL_0013: ldarg.1 |
||||||
|
IL_0014: ldflda valuetype ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/StructWithFixedSizeMembers/'<Doubles>e__FixedBuffer' ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/StructWithFixedSizeMembers::Doubles |
||||||
|
IL_0019: ldflda float64 ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/StructWithFixedSizeMembers/'<Doubles>e__FixedBuffer'::FixedElementField |
||||||
|
IL_001e: conv.u |
||||||
|
IL_001f: ldarg.2 |
||||||
|
IL_0020: conv.i |
||||||
|
IL_0021: ldc.i4.8 |
||||||
|
IL_0022: mul |
||||||
|
IL_0023: add |
||||||
|
IL_0024: ldind.r8 |
||||||
|
IL_0025: add |
||||||
|
IL_0026: ret |
||||||
|
} // end of method UnsafeCode::FixedMemberAccess |
||||||
|
|
||||||
|
.method public hidebysig instance float64* |
||||||
|
FixedMemberBasePointer(valuetype ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/StructWithFixedSizeMembers* m) cil managed |
||||||
|
{ |
||||||
|
// Code size 13 (0xd) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: ldflda valuetype ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/StructWithFixedSizeMembers/'<Doubles>e__FixedBuffer' ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/StructWithFixedSizeMembers::Doubles |
||||||
|
IL_0006: ldflda float64 ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/StructWithFixedSizeMembers/'<Doubles>e__FixedBuffer'::FixedElementField |
||||||
|
IL_000b: conv.u |
||||||
|
IL_000c: ret |
||||||
|
} // end of method UnsafeCode::FixedMemberBasePointer |
||||||
|
|
||||||
|
.method public hidebysig instance string |
||||||
|
UsePointer(float64* ptr) cil managed |
||||||
|
{ |
||||||
|
// Code size 7 (0x7) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: call instance string [mscorlib]System.Double::ToString() |
||||||
|
IL_0006: ret |
||||||
|
} // end of method UnsafeCode::UsePointer |
||||||
|
|
||||||
|
.method public hidebysig instance string |
||||||
|
StackAlloc(int32 count) cil managed |
||||||
|
{ |
||||||
|
// Code size 52 (0x34) |
||||||
|
.maxstack 3 |
||||||
|
.locals init (char* V_0, |
||||||
|
char* V_1, |
||||||
|
int32 V_2) |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: conv.u |
||||||
|
IL_0002: ldc.i4.2 |
||||||
|
IL_0003: mul.ovf.un |
||||||
|
IL_0004: localloc |
||||||
|
IL_0006: stloc.0 |
||||||
|
IL_0007: ldc.i4.s 100 |
||||||
|
IL_0009: conv.u |
||||||
|
IL_000a: ldc.i4.2 |
||||||
|
IL_000b: mul.ovf.un |
||||||
|
IL_000c: localloc |
||||||
|
IL_000e: stloc.1 |
||||||
|
IL_000f: ldc.i4.0 |
||||||
|
IL_0010: stloc.2 |
||||||
|
IL_0011: br.s IL_0028 |
||||||
|
|
||||||
|
IL_0013: ldloc.0 |
||||||
|
IL_0014: ldloc.2 |
||||||
|
IL_0015: conv.i |
||||||
|
IL_0016: ldc.i4.2 |
||||||
|
IL_0017: mul |
||||||
|
IL_0018: add |
||||||
|
IL_0019: ldloc.2 |
||||||
|
IL_001a: conv.u2 |
||||||
|
IL_001b: stind.i2 |
||||||
|
IL_001c: ldloc.1 |
||||||
|
IL_001d: ldloc.2 |
||||||
|
IL_001e: conv.i |
||||||
|
IL_001f: ldc.i4.2 |
||||||
|
IL_0020: mul |
||||||
|
IL_0021: add |
||||||
|
IL_0022: ldc.i4.0 |
||||||
|
IL_0023: stind.i2 |
||||||
|
IL_0024: ldloc.2 |
||||||
|
IL_0025: ldc.i4.1 |
||||||
|
IL_0026: add |
||||||
|
IL_0027: stloc.2 |
||||||
|
IL_0028: ldloc.2 |
||||||
|
IL_0029: ldarg.1 |
||||||
|
IL_002a: blt.s IL_0013 |
||||||
|
|
||||||
|
IL_002c: ldarg.0 |
||||||
|
IL_002d: ldloc.0 |
||||||
|
IL_002e: call instance string ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode::UsePointer(float64*) |
||||||
|
IL_0033: ret |
||||||
|
} // end of method UnsafeCode::StackAlloc |
||||||
|
|
||||||
|
.method public hidebysig instance string |
||||||
|
StackAllocStruct(int32 count) cil managed |
||||||
|
{ |
||||||
|
// Code size 41 (0x29) |
||||||
|
.maxstack 2 |
||||||
|
.locals init (valuetype ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/SimpleStruct* V_0) |
||||||
|
IL_0000: ldarg.1 |
||||||
|
IL_0001: ldc.i4.2 |
||||||
|
IL_0002: mul.ovf |
||||||
|
IL_0003: conv.u |
||||||
|
IL_0004: sizeof ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/SimpleStruct |
||||||
|
IL_000a: mul.ovf.un |
||||||
|
IL_000b: localloc |
||||||
|
IL_000d: stloc.0 |
||||||
|
IL_000e: ldc.i4.s 10 |
||||||
|
IL_0010: conv.u |
||||||
|
IL_0011: sizeof ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/SimpleStruct |
||||||
|
IL_0017: mul.ovf.un |
||||||
|
IL_0018: localloc |
||||||
|
IL_001a: pop |
||||||
|
IL_001b: ldarg.0 |
||||||
|
IL_001c: ldloc.0 |
||||||
|
IL_001d: ldflda float64 ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode/SimpleStruct::Y |
||||||
|
IL_0022: conv.u |
||||||
|
IL_0023: call instance string ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode::UsePointer(float64*) |
||||||
|
IL_0028: ret |
||||||
|
} // end of method UnsafeCode::StackAllocStruct |
||||||
|
|
||||||
|
.method family hidebysig virtual instance void |
||||||
|
Finalize() cil managed |
||||||
|
{ |
||||||
|
.override [mscorlib]System.Object::Finalize |
||||||
|
// Code size 22 (0x16) |
||||||
|
.maxstack 2 |
||||||
|
.try |
||||||
|
{ |
||||||
|
IL_0000: ldarg.0 |
||||||
|
IL_0001: ldarg.0 |
||||||
|
IL_0002: call instance int32* ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode::get_NullPointer() |
||||||
|
IL_0007: call instance void ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode::PassPointerAsRefParameter(int32*) |
||||||
|
IL_000c: leave.s IL_0015 |
||||||
|
|
||||||
|
} // end .try |
||||||
|
finally |
||||||
|
{ |
||||||
|
IL_000e: ldarg.0 |
||||||
|
IL_000f: call instance void [mscorlib]System.Object::Finalize() |
||||||
|
IL_0014: endfinally |
||||||
|
} // end handler |
||||||
|
IL_0015: ret |
||||||
|
} // end of method UnsafeCode::Finalize |
||||||
|
|
||||||
|
.method public hidebysig specialname rtspecialname |
||||||
|
instance void .ctor() cil managed |
||||||
|
{ |
||||||
|
// Code size 7 (0x7) |
||||||
|
.maxstack 8 |
||||||
|
IL_0000: ldarg.0 |
||||||
|
IL_0001: call instance void [mscorlib]System.Object::.ctor() |
||||||
|
IL_0006: ret |
||||||
|
} // end of method UnsafeCode::.ctor |
||||||
|
|
||||||
|
.property instance int32* NullPointer() |
||||||
|
{ |
||||||
|
.get instance int32* ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode::get_NullPointer() |
||||||
|
} // end of property UnsafeCode::NullPointer |
||||||
|
} // end of class ICSharpCode.Decompiler.Tests.TestCases.Pretty.UnsafeCode |
||||||
|
|
||||||
|
|
||||||
|
// ============================================================= |
||||||
|
|
||||||
|
// *********** DISASSEMBLY COMPLETE *********************** |
||||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,352 @@ |
|||||||
|
using System; |
||||||
|
using System.Collections.Generic; |
||||||
|
using System.IO; |
||||||
|
using System.Text; |
||||||
|
using ICSharpCode.Decompiler.Util; |
||||||
|
using Mono.Cecil; |
||||||
|
|
||||||
|
namespace ICSharpCode.Decompiler |
||||||
|
{ |
||||||
|
public class UniversalAssemblyResolver : IAssemblyResolver |
||||||
|
{ |
||||||
|
DotNetCorePathFinder dotNetCorePathFinder; |
||||||
|
readonly bool throwOnError; |
||||||
|
readonly string mainAssemblyFileName; |
||||||
|
readonly string baseDirectory; |
||||||
|
readonly Dictionary<string, UnresolvedAssemblyNameReference> loadedAssemblyReferences; |
||||||
|
readonly List<string> directories; |
||||||
|
readonly List<string> gac_paths = GetGacPaths(); |
||||||
|
|
||||||
|
public static readonly bool OnMono = Type.GetType("Mono.Runtime") != null; |
||||||
|
|
||||||
|
public event AssemblyResolveEventHandler ResolveFailed; |
||||||
|
|
||||||
|
public void AddSearchDirectory(string directory) |
||||||
|
{ |
||||||
|
directories.Add(directory); |
||||||
|
} |
||||||
|
|
||||||
|
public void RemoveSearchDirectory(string directory) |
||||||
|
{ |
||||||
|
directories.Remove(directory); |
||||||
|
} |
||||||
|
|
||||||
|
public string[] GetSearchDirectories() |
||||||
|
{ |
||||||
|
return directories.ToArray(); |
||||||
|
} |
||||||
|
|
||||||
|
public string TargetFramework { get; set; } |
||||||
|
|
||||||
|
private UniversalAssemblyResolver(string mainAssemblyFileName, bool throwOnError) |
||||||
|
{ |
||||||
|
this.mainAssemblyFileName = mainAssemblyFileName; |
||||||
|
this.baseDirectory = Path.GetDirectoryName(mainAssemblyFileName); |
||||||
|
this.throwOnError = throwOnError; |
||||||
|
if (string.IsNullOrWhiteSpace(this.baseDirectory)) |
||||||
|
this.baseDirectory = Environment.CurrentDirectory; |
||||||
|
AddSearchDirectory(baseDirectory); |
||||||
|
} |
||||||
|
|
||||||
|
public static ModuleDefinition LoadMainModule(string mainAssemblyFileName, bool throwOnError = true, bool inMemory = false) |
||||||
|
{ |
||||||
|
var resolver = new UniversalAssemblyResolver(mainAssemblyFileName, throwOnError); |
||||||
|
|
||||||
|
var module = ModuleDefinition.ReadModule(mainAssemblyFileName, new ReaderParameters { |
||||||
|
AssemblyResolver = resolver, |
||||||
|
InMemory = inMemory |
||||||
|
}); |
||||||
|
|
||||||
|
resolver.TargetFramework = module.Assembly.DetectTargetFrameworkId(); |
||||||
|
|
||||||
|
return module; |
||||||
|
} |
||||||
|
|
||||||
|
public AssemblyDefinition Resolve(AssemblyNameReference name) |
||||||
|
{ |
||||||
|
return Resolve(name, new ReaderParameters()); |
||||||
|
} |
||||||
|
|
||||||
|
public AssemblyDefinition Resolve(AssemblyNameReference name, ReaderParameters parameters) |
||||||
|
{ |
||||||
|
var targetFramework = TargetFramework.Split(new[] { ",Version=v" }, StringSplitOptions.None); |
||||||
|
string file = null; |
||||||
|
switch (targetFramework[0]) { |
||||||
|
case ".NETCoreApp": |
||||||
|
case ".NETStandard": |
||||||
|
if (targetFramework.Length != 2) goto default; |
||||||
|
if (dotNetCorePathFinder == null) { |
||||||
|
var version = targetFramework[1].Length == 3 ? targetFramework[1] + ".0" : targetFramework[1]; |
||||||
|
dotNetCorePathFinder = new DotNetCorePathFinder(mainAssemblyFileName, TargetFramework, version, this.loadedAssemblyReferences); |
||||||
|
} |
||||||
|
file = dotNetCorePathFinder.TryResolveDotNetCore(name); |
||||||
|
if (file == null) |
||||||
|
goto default; |
||||||
|
else { |
||||||
|
var asm = ModuleDefinition.ReadModule(file, parameters).Assembly; |
||||||
|
if (throwOnError && asm == null) |
||||||
|
throw new AssemblyResolutionException(name); |
||||||
|
return asm; |
||||||
|
} |
||||||
|
default: |
||||||
|
return ResolveInternal(name, parameters); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
AssemblyDefinition ResolveInternal(AssemblyNameReference name, ReaderParameters parameters) |
||||||
|
{ |
||||||
|
if (name == null) |
||||||
|
throw new ArgumentNullException(nameof(name)); |
||||||
|
|
||||||
|
if (parameters == null) |
||||||
|
throw new ArgumentNullException(nameof(parameters)); |
||||||
|
|
||||||
|
var assembly = SearchDirectory(name, directories, parameters); |
||||||
|
if (assembly != null) |
||||||
|
return assembly; |
||||||
|
|
||||||
|
if (name.IsRetargetable) { |
||||||
|
// if the reference is retargetable, zero it
|
||||||
|
name = new AssemblyNameReference(name.Name, ZeroVersion) { |
||||||
|
PublicKeyToken = Empty<byte>.Array, |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
var framework_dir = Path.GetDirectoryName(typeof(object).Module.FullyQualifiedName); |
||||||
|
var framework_dirs = OnMono |
||||||
|
? new[] { framework_dir, Path.Combine(framework_dir, "Facades") } |
||||||
|
: new[] { framework_dir }; |
||||||
|
|
||||||
|
if (IsZero(name.Version)) { |
||||||
|
assembly = SearchDirectory(name, framework_dirs, parameters); |
||||||
|
if (assembly != null) |
||||||
|
return assembly; |
||||||
|
} |
||||||
|
|
||||||
|
if (name.Name == "mscorlib") { |
||||||
|
assembly = GetCorlib(name, parameters); |
||||||
|
if (assembly != null) |
||||||
|
return assembly; |
||||||
|
} |
||||||
|
|
||||||
|
assembly = GetAssemblyInGac(name, parameters); |
||||||
|
if (assembly != null) |
||||||
|
return assembly; |
||||||
|
|
||||||
|
assembly = SearchDirectory(name, framework_dirs, parameters); |
||||||
|
if (assembly != null) |
||||||
|
return assembly; |
||||||
|
|
||||||
|
if (ResolveFailed != null) { |
||||||
|
assembly = ResolveFailed(this, name); |
||||||
|
if (assembly != null) |
||||||
|
return assembly; |
||||||
|
} |
||||||
|
|
||||||
|
if (throwOnError) |
||||||
|
throw new AssemblyResolutionException(name); |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
#region .NET / mono GAC handling
|
||||||
|
AssemblyDefinition SearchDirectory(AssemblyNameReference name, IEnumerable<string> directories, ReaderParameters parameters) |
||||||
|
{ |
||||||
|
var extensions = name.IsWindowsRuntime ? new[] { ".winmd", ".dll" } : new[] { ".exe", ".dll" }; |
||||||
|
foreach (var directory in directories) { |
||||||
|
foreach (var extension in extensions) { |
||||||
|
string file = Path.Combine(directory, name.Name + extension); |
||||||
|
if (!File.Exists(file)) |
||||||
|
continue; |
||||||
|
try { |
||||||
|
return GetAssembly(file, parameters); |
||||||
|
} catch (System.BadImageFormatException) { |
||||||
|
continue; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
static bool IsZero(Version version) |
||||||
|
{ |
||||||
|
return version.Major == 0 && version.Minor == 0 && version.Build == 0 && version.Revision == 0; |
||||||
|
} |
||||||
|
|
||||||
|
static Version ZeroVersion = new Version(0, 0, 0, 0); |
||||||
|
|
||||||
|
AssemblyDefinition GetCorlib(AssemblyNameReference reference, ReaderParameters parameters) |
||||||
|
{ |
||||||
|
var version = reference.Version; |
||||||
|
var corlib = typeof(object).Assembly.GetName(); |
||||||
|
|
||||||
|
if (corlib.Version == version || IsZero(version)) |
||||||
|
return GetAssembly(typeof(object).Module.FullyQualifiedName, parameters); |
||||||
|
|
||||||
|
var path = Directory.GetParent( |
||||||
|
Directory.GetParent( |
||||||
|
typeof(object).Module.FullyQualifiedName).FullName |
||||||
|
).FullName; |
||||||
|
|
||||||
|
if (OnMono) { |
||||||
|
if (version.Major == 1) |
||||||
|
path = Path.Combine(path, "1.0"); |
||||||
|
else if (version.Major == 2) { |
||||||
|
if (version.MajorRevision == 5) |
||||||
|
path = Path.Combine(path, "2.1"); |
||||||
|
else |
||||||
|
path = Path.Combine(path, "2.0"); |
||||||
|
} else if (version.Major == 4) |
||||||
|
path = Path.Combine(path, "4.0"); |
||||||
|
else |
||||||
|
throw new NotSupportedException("Version not supported: " + version); |
||||||
|
} else { |
||||||
|
switch (version.Major) { |
||||||
|
case 1: |
||||||
|
if (version.MajorRevision == 3300) |
||||||
|
path = Path.Combine(path, "v1.0.3705"); |
||||||
|
else |
||||||
|
path = Path.Combine(path, "v1.0.5000.0"); |
||||||
|
break; |
||||||
|
case 2: |
||||||
|
path = Path.Combine(path, "v2.0.50727"); |
||||||
|
break; |
||||||
|
case 4: |
||||||
|
path = Path.Combine(path, "v4.0.30319"); |
||||||
|
break; |
||||||
|
default: |
||||||
|
throw new NotSupportedException("Version not supported: " + version); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
var file = Path.Combine(path, "mscorlib.dll"); |
||||||
|
if (File.Exists(file)) |
||||||
|
return GetAssembly(file, parameters); |
||||||
|
|
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
static List<string> GetGacPaths() |
||||||
|
{ |
||||||
|
if (OnMono) |
||||||
|
return GetDefaultMonoGacPaths(); |
||||||
|
|
||||||
|
var paths = new List<string>(2); |
||||||
|
var windir = Environment.GetEnvironmentVariable("WINDIR"); |
||||||
|
if (windir == null) |
||||||
|
return paths; |
||||||
|
|
||||||
|
paths.Add(Path.Combine(windir, "assembly")); |
||||||
|
paths.Add(Path.Combine(windir, Path.Combine("Microsoft.NET", "assembly"))); |
||||||
|
return paths; |
||||||
|
} |
||||||
|
|
||||||
|
static List<string> GetDefaultMonoGacPaths() |
||||||
|
{ |
||||||
|
var paths = new List<string>(1); |
||||||
|
var gac = GetCurrentMonoGac(); |
||||||
|
if (gac != null) |
||||||
|
paths.Add(gac); |
||||||
|
|
||||||
|
var gac_paths_env = Environment.GetEnvironmentVariable("MONO_GAC_PREFIX"); |
||||||
|
if (string.IsNullOrEmpty(gac_paths_env)) |
||||||
|
return paths; |
||||||
|
|
||||||
|
var prefixes = gac_paths_env.Split(Path.PathSeparator); |
||||||
|
foreach (var prefix in prefixes) { |
||||||
|
if (string.IsNullOrEmpty(prefix)) |
||||||
|
continue; |
||||||
|
|
||||||
|
var gac_path = Path.Combine(Path.Combine(Path.Combine(prefix, "lib"), "mono"), "gac"); |
||||||
|
if (Directory.Exists(gac_path) && !paths.Contains(gac)) |
||||||
|
paths.Add(gac_path); |
||||||
|
} |
||||||
|
|
||||||
|
return paths; |
||||||
|
} |
||||||
|
|
||||||
|
static string GetCurrentMonoGac() |
||||||
|
{ |
||||||
|
return Path.Combine( |
||||||
|
Directory.GetParent( |
||||||
|
Path.GetDirectoryName(typeof(object).Module.FullyQualifiedName)).FullName, |
||||||
|
"gac"); |
||||||
|
} |
||||||
|
|
||||||
|
AssemblyDefinition GetAssembly(string file, ReaderParameters parameters) |
||||||
|
{ |
||||||
|
if (parameters.AssemblyResolver == null) |
||||||
|
parameters.AssemblyResolver = this; |
||||||
|
|
||||||
|
return ModuleDefinition.ReadModule(file, parameters).Assembly; |
||||||
|
} |
||||||
|
|
||||||
|
AssemblyDefinition GetAssemblyInGac(AssemblyNameReference reference, ReaderParameters parameters) |
||||||
|
{ |
||||||
|
if (reference.PublicKeyToken == null || reference.PublicKeyToken.Length == 0) |
||||||
|
return null; |
||||||
|
|
||||||
|
if (OnMono) |
||||||
|
return GetAssemblyInMonoGac(reference, parameters); |
||||||
|
|
||||||
|
return GetAssemblyInNetGac(reference, parameters); |
||||||
|
} |
||||||
|
|
||||||
|
AssemblyDefinition GetAssemblyInMonoGac(AssemblyNameReference reference, ReaderParameters parameters) |
||||||
|
{ |
||||||
|
for (int i = 0; i < gac_paths.Count; i++) { |
||||||
|
var gac_path = gac_paths[i]; |
||||||
|
var file = GetAssemblyFile(reference, string.Empty, gac_path); |
||||||
|
if (File.Exists(file)) |
||||||
|
return GetAssembly(file, parameters); |
||||||
|
} |
||||||
|
|
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
AssemblyDefinition GetAssemblyInNetGac(AssemblyNameReference reference, ReaderParameters parameters) |
||||||
|
{ |
||||||
|
var gacs = new[] { "GAC_MSIL", "GAC_32", "GAC_64", "GAC" }; |
||||||
|
var prefixes = new[] { string.Empty, "v4.0_" }; |
||||||
|
|
||||||
|
for (int i = 0; i < 2; i++) { |
||||||
|
for (int j = 0; j < gacs.Length; j++) { |
||||||
|
var gac = Path.Combine(gac_paths[i], gacs[j]); |
||||||
|
var file = GetAssemblyFile(reference, prefixes[i], gac); |
||||||
|
if (Directory.Exists(gac) && File.Exists(file)) |
||||||
|
return GetAssembly(file, parameters); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
static string GetAssemblyFile(AssemblyNameReference reference, string prefix, string gac) |
||||||
|
{ |
||||||
|
var gac_folder = new StringBuilder() |
||||||
|
.Append(prefix) |
||||||
|
.Append(reference.Version) |
||||||
|
.Append("__"); |
||||||
|
|
||||||
|
for (int i = 0; i < reference.PublicKeyToken.Length; i++) |
||||||
|
gac_folder.Append(reference.PublicKeyToken[i].ToString("x2")); |
||||||
|
|
||||||
|
return Path.Combine( |
||||||
|
Path.Combine( |
||||||
|
Path.Combine(gac, reference.Name), gac_folder.ToString()), |
||||||
|
reference.Name + ".dll"); |
||||||
|
} |
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
public void Dispose() |
||||||
|
{ |
||||||
|
Dispose(true); |
||||||
|
GC.SuppressFinalize(this); |
||||||
|
} |
||||||
|
|
||||||
|
protected virtual void Dispose(bool disposing) |
||||||
|
{ |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
After Width: | Height: | Size: 436 B |
Loading…
Reference in new issue