未验证 提交 596f3d73 编写于 作者: M MoFtZ 提交者: GitHub

Compiler can generate delegate with direct pointer when referencing static members (#9017)

* Added unit tests for delegates on static members

* Changed expectations for static member invocation

- Use static members directly

* Compiler can generate delegate with direct pointer when referencing static members

* Updated existing baseline files
上级 2cdf31c0
...@@ -4396,7 +4396,15 @@ and GenClosureTypeDefs cenv (tref: ILTypeRef, ilGenParams, attrs, ilCloAllFreeVa ...@@ -4396,7 +4396,15 @@ and GenClosureTypeDefs cenv (tref: ILTypeRef, ilGenParams, attrs, ilCloAllFreeVa
let tdefs = EraseClosures.convIlxClosureDef g.ilxPubCloEnv tref.Enclosing tdef cloInfo let tdefs = EraseClosures.convIlxClosureDef g.ilxPubCloEnv tref.Enclosing tdef cloInfo
tdefs tdefs
and GenStaticClosureTypeDefs cenv (tref: ILTypeRef, ilGenParams, attrs, ilCloAllFreeVars, ilCloLambdas, ilCtorBody, mdefs, mimpls, ext, ilIntfTys) =
let tdefs = GenClosureTypeDefs cenv (tref, ilGenParams, attrs, ilCloAllFreeVars, ilCloLambdas, ilCtorBody, mdefs, mimpls, ext, ilIntfTys)
// Apply the abstract attribute, turning the sealed class into abstract sealed (i.e. static class).
// Remove the redundant constructor.
tdefs |> List.map (fun td -> td.WithAbstract(true)
.With(methods= mkILMethodsFromArray (td.Methods.AsArray |> Array.filter (fun m -> not m.IsConstructor))))
and GenGenericParams cenv eenv tps = and GenGenericParams cenv eenv tps =
tps |> DropErasedTypars |> List.map (GenGenericParam cenv eenv) tps |> DropErasedTypars |> List.map (GenGenericParam cenv eenv)
...@@ -4781,7 +4789,7 @@ and GenDelegateExpr cenv cgbuf eenvouter expr (TObjExprMethod((TSlotSig(_, deleg ...@@ -4781,7 +4789,7 @@ and GenDelegateExpr cenv cgbuf eenvouter expr (TObjExprMethod((TSlotSig(_, deleg
false false
with _ -> with _ ->
false false
// Work out the free type variables for the morphing thunk // Work out the free type variables for the morphing thunk
let takenNames = List.map nameOfVal tmvs let takenNames = List.map nameOfVal tmvs
let (cloAttribs, _, _, cloFreeTyvars, cloFreeVars, ilDelegeeTypeRef, ilCloFreeVars, eenvinner) = let (cloAttribs, _, _, cloFreeTyvars, cloFreeVars, ilDelegeeTypeRef, ilCloFreeVars, eenvinner) =
...@@ -4789,46 +4797,64 @@ and GenDelegateExpr cenv cgbuf eenvouter expr (TObjExprMethod((TSlotSig(_, deleg ...@@ -4789,46 +4797,64 @@ and GenDelegateExpr cenv cgbuf eenvouter expr (TObjExprMethod((TSlotSig(_, deleg
let ilDelegeeGenericParams = GenGenericParams cenv eenvinner cloFreeTyvars let ilDelegeeGenericParams = GenGenericParams cenv eenvinner cloFreeTyvars
let ilDelegeeGenericActualsInner = mkILFormalGenericArgs 0 ilDelegeeGenericParams let ilDelegeeGenericActualsInner = mkILFormalGenericArgs 0 ilDelegeeGenericParams
// When creating a delegate that does not capture any variables, we can instead create a static closure and directly reference the method.
let useStaticClosure = cloFreeVars.IsEmpty
// Create a new closure class with a single "delegee" method that implements the delegate. // Create a new closure class with a single "delegee" method that implements the delegate.
let delegeeMethName = "Invoke" let delegeeMethName = "Invoke"
let ilDelegeeTyInner = mkILBoxedTy ilDelegeeTypeRef ilDelegeeGenericActualsInner let ilDelegeeTyInner = mkILBoxedTy ilDelegeeTypeRef ilDelegeeGenericActualsInner
let envForDelegeeUnderTypars = AddTyparsToEnv methTyparsOfOverridingMethod eenvinner let envForDelegeeUnderTypars = AddTyparsToEnv methTyparsOfOverridingMethod eenvinner
let numthis = 1 let numthis = if useStaticClosure then 0 else 1
let tmvs, body = BindUnitVars g (tmvs, List.replicate (List.concat slotsig.FormalParams).Length ValReprInfo.unnamedTopArg1, body) let tmvs, body = BindUnitVars g (tmvs, List.replicate (List.concat slotsig.FormalParams).Length ValReprInfo.unnamedTopArg1, body)
// The slot sig contains a formal instantiation. When creating delegates we're only // The slot sig contains a formal instantiation. When creating delegates we're only
// interested in the actual instantiation since we don't have to emit a method impl. // interested in the actual instantiation since we don't have to emit a method impl.
let ilDelegeeParams, ilDelegeeRet = GenActualSlotsig m cenv envForDelegeeUnderTypars slotsig methTyparsOfOverridingMethod tmvs let ilDelegeeParams, ilDelegeeRet = GenActualSlotsig m cenv envForDelegeeUnderTypars slotsig methTyparsOfOverridingMethod tmvs
let envForDelegeeMeth = AddStorageForLocalVals g (List.mapi (fun i v -> (v, Arg (i+numthis))) tmvs) envForDelegeeUnderTypars let envForDelegeeMeth = AddStorageForLocalVals g (List.mapi (fun i v -> (v, Arg (i+numthis))) tmvs) envForDelegeeUnderTypars
let ilMethodBody = CodeGenMethodForExpr cenv cgbuf.mgbuf (SPAlways, [], delegeeMethName, envForDelegeeMeth, 1, body, (if slotSigHasVoidReturnTy slotsig then discardAndReturnVoid else Return)) let ilMethodBody = CodeGenMethodForExpr cenv cgbuf.mgbuf (SPAlways, [], delegeeMethName, envForDelegeeMeth, 1, body, (if slotSigHasVoidReturnTy slotsig then discardAndReturnVoid else Return))
let delegeeInvokeMeth = let delegeeInvokeMeth =
mkILNonGenericInstanceMethod (if useStaticClosure then mkILNonGenericStaticMethod else mkILNonGenericInstanceMethod)
(delegeeMethName, ILMemberAccess.Assembly, (delegeeMethName,
ILMemberAccess.Assembly,
ilDelegeeParams, ilDelegeeParams,
ilDelegeeRet, ilDelegeeRet,
MethodBody.IL ilMethodBody) MethodBody.IL ilMethodBody)
let delegeeCtorMeth = mkILSimpleStorageCtor(None, Some g.ilg.typ_Object.TypeSpec, ilDelegeeTyInner, [], [], ILMemberAccess.Assembly) let delegeeCtorMeth = mkILSimpleStorageCtor(None, Some g.ilg.typ_Object.TypeSpec, ilDelegeeTyInner, [], [], ILMemberAccess.Assembly)
let ilCtorBody = delegeeCtorMeth.MethodBody let ilCtorBody = delegeeCtorMeth.MethodBody
let ilCloLambdas = Lambdas_return ilCtxtDelTy let ilCloLambdas = Lambdas_return ilCtxtDelTy
let ilAttribs = GenAttrs cenv eenvinner cloAttribs let ilAttribs = GenAttrs cenv eenvinner cloAttribs
let cloTypeDefs = GenClosureTypeDefs cenv (ilDelegeeTypeRef, ilDelegeeGenericParams, ilAttribs, ilCloFreeVars, ilCloLambdas, ilCtorBody, [delegeeInvokeMeth], [], g.ilg.typ_Object, []) let cloTypeDefs =
(if useStaticClosure then GenStaticClosureTypeDefs else GenClosureTypeDefs)
cenv (ilDelegeeTypeRef, ilDelegeeGenericParams, ilAttribs, ilCloFreeVars, ilCloLambdas, ilCtorBody, [delegeeInvokeMeth], [], g.ilg.typ_Object, [])
for cloTypeDef in cloTypeDefs do for cloTypeDef in cloTypeDefs do
cgbuf.mgbuf.AddTypeDef(ilDelegeeTypeRef, cloTypeDef, false, false, None) cgbuf.mgbuf.AddTypeDef(ilDelegeeTypeRef, cloTypeDef, false, false, None)
CountClosure() CountClosure()
// Push the constructor for the delegee
let ctxtGenericArgsForDelegee = GenGenericArgs m eenvouter.tyenv cloFreeTyvars let ctxtGenericArgsForDelegee = GenGenericArgs m eenvouter.tyenv cloFreeTyvars
let ilxCloSpec = IlxClosureSpec.Create(IlxClosureRef(ilDelegeeTypeRef, ilCloLambdas, ilCloFreeVars), ctxtGenericArgsForDelegee) if useStaticClosure then
GenGetLocalVals cenv cgbuf eenvouter m cloFreeVars GenUnit cenv eenvouter m cgbuf
CG.EmitInstr cgbuf (pop ilCloFreeVars.Length) (Push [EraseClosures.mkTyOfLambdas g.ilxPubCloEnv ilCloLambdas]) (I_newobj (ilxCloSpec.Constructor, None)) else
let ilxCloSpec = IlxClosureSpec.Create(IlxClosureRef(ilDelegeeTypeRef, ilCloLambdas, ilCloFreeVars), ctxtGenericArgsForDelegee)
GenGetLocalVals cenv cgbuf eenvouter m cloFreeVars
CG.EmitInstr cgbuf (pop ilCloFreeVars.Length) (Push [EraseClosures.mkTyOfLambdas g.ilxPubCloEnv ilCloLambdas]) (I_newobj (ilxCloSpec.Constructor, None))
// Push the function pointer to the Invoke method of the delegee
let ilDelegeeTyOuter = mkILBoxedTy ilDelegeeTypeRef ctxtGenericArgsForDelegee let ilDelegeeTyOuter = mkILBoxedTy ilDelegeeTypeRef ctxtGenericArgsForDelegee
let ilDelegeeInvokeMethOuter = mkILNonGenericInstanceMethSpecInTy (ilDelegeeTyOuter, "Invoke", typesOfILParams ilDelegeeParams, ilDelegeeRet.Type) let ilDelegeeInvokeMethOuter =
let ilDelegeeCtorMethOuter = mkCtorMethSpecForDelegate g.ilg (ilCtxtDelTy, useUIntPtrForDelegateCtor) (if useStaticClosure then mkILNonGenericStaticMethSpecInTy else mkILNonGenericInstanceMethSpecInTy)
(ilDelegeeTyOuter,
"Invoke",
typesOfILParams ilDelegeeParams,
ilDelegeeRet.Type)
CG.EmitInstr cgbuf (pop 0) (Push [g.ilg.typ_IntPtr]) (I_ldftn ilDelegeeInvokeMethOuter) CG.EmitInstr cgbuf (pop 0) (Push [g.ilg.typ_IntPtr]) (I_ldftn ilDelegeeInvokeMethOuter)
// Instantiate the delegate
let ilDelegeeCtorMethOuter = mkCtorMethSpecForDelegate g.ilg (ilCtxtDelTy, useUIntPtrForDelegateCtor)
CG.EmitInstr cgbuf (pop 2) (Push [ilCtxtDelTy]) (I_newobj(ilDelegeeCtorMethOuter, None)) CG.EmitInstr cgbuf (pop 2) (Push [ilCtxtDelTy]) (I_newobj(ilDelegeeCtorMethOuter, None))
GenSequel cenv eenvouter.cloc cgbuf sequel GenSequel cenv eenvouter.cloc cgbuf sequel
......
// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information.
namespace FSharp.Compiler.UnitTests.CodeGen.EmittedIL
open FSharp.Compiler.UnitTests
open NUnit.Framework
[<TestFixture>]
module ``Static Member`` =
[<Test>]
let ``Action on Static Member``() =
CompilerAssert.CompileLibraryAndVerifyIL
"""
module StaticMember01
open System
type C =
static member M() = ()
static member CreateAction() =
new Action(C.M)
"""
(fun verifier -> verifier.VerifyIL [
"""
.method public static class [runtime]System.Action
CreateAction() cil managed
{
.maxstack 8
IL_0000: ldnull
IL_0001: ldftn void StaticMember01/CreateAction@8::Invoke()
IL_0007: newobj instance void [runtime]System.Action::.ctor(object,
native int)
IL_000c: ret
}
"""
"""
.class abstract auto autochar serializable sealed nested assembly beforefieldinit specialname CreateAction@8
extends [runtime]System.Object
"""
])
[<Test>]
let ``Action on Static Member with lambda``() =
CompilerAssert.CompileLibraryAndVerifyIL
"""
module StaticMember02
open System
type C =
static member M(x : int32) = ()
static member CreateAction() =
new Action<int32>(fun x -> C.M x)
"""
(fun verifier -> verifier.VerifyIL [
"""
.method public static class [runtime]System.Action`1<int32>
CreateAction() cil managed
{
.maxstack 8
IL_0000: ldnull
IL_0001: ldftn void StaticMember02/CreateAction@8::Invoke(int32)
IL_0007: newobj instance void class [runtime]System.Action`1<int32>::.ctor(object,
native int)
IL_000c: ret
}
"""
"""
.class abstract auto autochar serializable sealed nested assembly beforefieldinit specialname CreateAction@8
extends [runtime]System.Object
"""
])
[<Test>]
let ``Action on Static Member with closure``() =
CompilerAssert.CompileLibraryAndVerifyIL
"""
module StaticMember03
open System
type C =
static member M(x: int32) = ()
type MyClass(x: int32) =
member this.X = x
[<EntryPoint>]
let main _ =
let input = new MyClass(7)
let func = new Action<int32>(fun x -> C.M input.X)
0
"""
(fun verifier -> verifier.VerifyIL [
"""
.method public static int32 main(string[] _arg1) cil managed
{
.custom instance void [FSharp.Core]Microsoft.FSharp.Core.EntryPointAttribute::.ctor() = ( 01 00 00 00 )
.maxstack 4
.locals init (class StaticMember03/MyClass V_0,
class [runtime]System.Action`1<int32> V_1)
IL_0000: ldc.i4.7
IL_0001: newobj instance void StaticMember03/MyClass::.ctor(int32)
IL_0006: stloc.0
IL_0007: ldnull
IL_0008: ldftn void StaticMember03/func@15::Invoke(int32)
IL_000e: newobj instance void class [runtime]System.Action`1<int32>::.ctor(object,
native int)
IL_0013: stloc.1
IL_0014: ldc.i4.0
IL_0015: ret
}
"""
"""
.class abstract auto autochar serializable sealed nested assembly beforefieldinit specialname func@15
extends [runtime]System.Object
"""
])
[<Test>]
let ``Func on Static Member``() =
CompilerAssert.CompileLibraryAndVerifyIL
"""
module StaticMember04
open System
type C =
static member M(x: int32) =
x + 1
static member CreateFunc() =
new Func<int32, int32>(C.M)
"""
(fun verifier -> verifier.VerifyIL [
"""
.method public static class [runtime]System.Func`2<int32,int32>
CreateFunc() cil managed
{
.maxstack 8
IL_0000: ldnull
IL_0001: ldftn int32 StaticMember04/CreateFunc@9::Invoke(int32)
IL_0007: newobj instance void class [runtime]System.Func`2<int32,int32>::.ctor(object,
native int)
IL_000c: ret
}
"""
"""
.class abstract auto autochar serializable sealed nested assembly beforefieldinit specialname CreateFunc@9
extends [runtime]System.Object
"""
])
[<Test>]
let ``Func on Static Member with lambda``() =
CompilerAssert.CompileLibraryAndVerifyIL
"""
module StaticMember05
open System
type C =
static member M(x: int32) =
x + 43
static member CreateFunc() =
new Func<int32, int32>(fun x -> C.M x)
"""
(fun verifier -> verifier.VerifyIL [
"""
.method public static class [runtime]System.Func`2<int32,int32>
CreateFunc() cil managed
{
.maxstack 8
IL_0000: ldnull
IL_0001: ldftn int32 StaticMember05/CreateFunc@9::Invoke(int32)
IL_0007: newobj instance void class [runtime]System.Func`2<int32,int32>::.ctor(object,
native int)
IL_000c: ret
}
"""
"""
.class abstract auto autochar serializable sealed nested assembly beforefieldinit specialname CreateFunc@9
extends [runtime]System.Object
"""
])
[<Test>]
let ``Func on Static Member with closure``() =
CompilerAssert.CompileLibraryAndVerifyIL
"""
module StaticMember06
open System
type C =
static member M(x: int32) =
x + 43
type MyClass(x: int32) =
member this.X = x
[<EntryPoint>]
let main _ =
let input = new MyClass(7)
let func = new Func<int32, int32>(fun x -> C.M input.X)
0
"""
(fun verifier -> verifier.VerifyIL [
"""
.method public static int32 main(string[] _arg1) cil managed
{
.custom instance void [FSharp.Core]Microsoft.FSharp.Core.EntryPointAttribute::.ctor() = ( 01 00 00 00 )
.maxstack 4
.locals init (class StaticMember06/MyClass V_0,
class [runtime]System.Func`2<int32,int32> V_1)
IL_0000: ldc.i4.7
IL_0001: newobj instance void StaticMember06/MyClass::.ctor(int32)
IL_0006: stloc.0
IL_0007: ldloc.0
IL_0008: newobj instance void StaticMember06/func@16::.ctor(class StaticMember06/MyClass)
IL_000d: ldftn instance int32 StaticMember06/func@16::Invoke(int32)
IL_0013: newobj instance void class [runtime]System.Func`2<int32,int32>::.ctor(object,
native int)
IL_0018: stloc.1
IL_0019: ldc.i4.0
IL_001a: ret
}
"""
"""
.class auto autochar serializable sealed nested assembly beforefieldinit specialname func@16
extends [runtime]System.Object
"""
])
#if !FX_NO_WINFORMS
[<Test>]
let ``EventHandler from Regression/83``() =
CompilerAssert.CompileLibraryAndVerifyIL
"""
module StaticMember07
// #Regression
let failures = ref false
let report_failure () =
System.Console.Error.WriteLine " NO"; failures := true
open System
open System.Windows.Forms
let form = new Form()
let lblHello = new Label()
let btnSay = new Button()
let btnSay_Click(sender, e) =
lblHello.Text <- "Hello"
let form_Load(sender, e) =
btnSay.add_Click(new EventHandler(fun sender e -> btnSay_Click(sender, e)))
let _ = lblHello.Location <- new System.Drawing.Point(16, 16)
let _ = lblHello.Name <- "lblHello"
let _ = lblHello.Size <- new System.Drawing.Size(72, 23)
let _ = lblHello.TabIndex <- 0
let _ = btnSay.Location <- new System.Drawing.Point(216, 16)
let _ = btnSay.Name <- "btnApply"
let _ = btnSay.TabIndex <- 1
let _ = btnSay.Text <- "Apply"
let _ = form.Text <- "1st F# App"
let _ = form.add_Load(new EventHandler(fun sender e -> form_Load(sender, e)))
let _ = form.Controls.AddRange(Array.ofList [(upcast (lblHello) : Control);
(upcast (btnSay) : Control);
])
(* let _ = Application.Run(form) *)
let _ =
if !failures then (System.Console.Out.WriteLine "Test Failed"; exit 1)
do (System.Console.Out.WriteLine "Test Passed";
System.IO.File.WriteAllText("test.ok", "ok");
exit 0)
"""
(fun verifier -> verifier.VerifyIL [
"""
IL_00bc: ldnull
IL_00bd: ldftn void StaticMember07/clo@36::Invoke(object,
class [runtime]System.EventArgs)
IL_00c3: newobj instance void [runtime]System.EventHandler::.ctor(object,
native int)
IL_00c8: callvirt instance void [System.Windows.Forms]System.Windows.Forms.Form::add_Load(class [runtime]System.EventHandler)
"""
"""
.class abstract auto autochar serializable sealed nested assembly beforefieldinit specialname clo@36
extends [runtime]System.Object
"""
])
#endif
\ No newline at end of file
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
<Compile Include="Compiler\ILChecker.fs" /> <Compile Include="Compiler\ILChecker.fs" />
<Compile Include="Compiler\Utilities.fs" /> <Compile Include="Compiler\Utilities.fs" />
<Compile Include="Compiler\CompilerAssert.fs" /> <Compile Include="Compiler\CompilerAssert.fs" />
<Compile Include="Compiler\CodeGen\EmittedIL\StaticMember.fs" />
<Compile Include="Compiler\CodeGen\EmittedIL\StaticLinkTests.fs" /> <Compile Include="Compiler\CodeGen\EmittedIL\StaticLinkTests.fs" />
<Compile Include="Compiler\CodeGen\EmittedIL\LiteralValue.fs" /> <Compile Include="Compiler\CodeGen\EmittedIL\LiteralValue.fs" />
<Compile Include="Compiler\CodeGen\EmittedIL\Mutation.fs" /> <Compile Include="Compiler\CodeGen\EmittedIL\Mutation.fs" />
......
// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 // Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0
// Copyright (c) Microsoft Corporation. All rights reserved. // Copyright (c) Microsoft Corporation. All rights reserved.
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
.assembly extern FSharp.Core .assembly extern FSharp.Core
{ {
.publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....:
.ver 4:4:1:0 .ver 4:7:0:0
} }
.assembly DoNotBoxStruct_ArrayOfArray_FSInterface_NoExtMeth .assembly DoNotBoxStruct_ArrayOfArray_FSInterface_NoExtMeth
{ {
...@@ -29,20 +29,20 @@ ...@@ -29,20 +29,20 @@
} }
.mresource public FSharpSignatureData.DoNotBoxStruct_ArrayOfArray_FSInterface_NoExtMeth .mresource public FSharpSignatureData.DoNotBoxStruct_ArrayOfArray_FSInterface_NoExtMeth
{ {
// Offset: 0x00000000 Length: 0x00000291 // Offset: 0x00000000 Length: 0x0000027A
} }
.mresource public FSharpOptimizationData.DoNotBoxStruct_ArrayOfArray_FSInterface_NoExtMeth .mresource public FSharpOptimizationData.DoNotBoxStruct_ArrayOfArray_FSInterface_NoExtMeth
{ {
// Offset: 0x00000298 Length: 0x000000BA // Offset: 0x00000280 Length: 0x000000BA
} }
.module DoNotBoxStruct_ArrayOfArray_FSInterface_NoExtMeth.exe .module DoNotBoxStruct_ArrayOfArray_FSInterface_NoExtMeth.exe
// MVID: {59B1920A-1475-D984-A745-03830A92B159} // MVID: {5EAD3E33-1475-D984-A745-0383333EAD5E}
.imagebase 0x00400000 .imagebase 0x00400000
.file alignment 0x00000200 .file alignment 0x00000200
.stackreserve 0x00100000 .stackreserve 0x00100000
.subsystem 0x0003 // WINDOWS_CUI .subsystem 0x0003 // WINDOWS_CUI
.corflags 0x00000001 // ILONLY .corflags 0x00000001 // ILONLY
// Image base: 0x015B0000 // Image base: 0x00B10000
// =============== CLASS MEMBERS DECLARATION =================== // =============== CLASS MEMBERS DECLARATION ===================
...@@ -51,30 +51,19 @@ ...@@ -51,30 +51,19 @@
extends [mscorlib]System.Object 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 ) .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 )
.class auto autochar serializable sealed nested assembly beforefieldinit specialname F@6 .class abstract auto autochar serializable sealed nested assembly beforefieldinit specialname F@6
extends [mscorlib]System.Object extends [mscorlib]System.Object
{ {
.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 ) .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 )
.method public specialname rtspecialname .method assembly static void Invoke(object x,
instance void .ctor() cil managed int32 _arg1) 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 F@6::.ctor
.method assembly hidebysig instance void
Invoke(object x,
int32 _arg1) cil managed
{ {
// Code size 3 (0x3) // Code size 3 (0x3)
.maxstack 5 .maxstack 5
.locals init ([0] int32 V_0) .locals init ([0] int32 V_0)
.language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}'
.line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\DoNotBoxStruct\\DoNotBoxStruct_ArrayOfArray_FSInterface_NoExtMeth.fs' .line 100001,100001 : 0,0 'C:\\dev\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\DoNotBoxStruct\\DoNotBoxStruct_ArrayOfArray_FSInterface_NoExtMeth.fs'
IL_0000: ldarg.2 IL_0000: ldarg.1
IL_0001: stloc.0 IL_0001: stloc.0
.line 6,6 : 80,82 '' .line 6,6 : 80,82 ''
IL_0002: ret IL_0002: ret
...@@ -84,7 +73,7 @@ ...@@ -84,7 +73,7 @@
.method public static void F<(class [FSharp.Core]Microsoft.FSharp.Control.IEvent`2<class [FSharp.Core]Microsoft.FSharp.Control.FSharpHandler`1<int32>,int32>) T>(!!T[][] x) cil managed .method public static void F<(class [FSharp.Core]Microsoft.FSharp.Control.IEvent`2<class [FSharp.Core]Microsoft.FSharp.Control.FSharpHandler`1<int32>,int32>) T>(!!T[][] x) cil managed
{ {
// Code size 44 (0x2c) // Code size 40 (0x28)
.maxstack 8 .maxstack 8
.line 6,6 : 48,83 '' .line 6,6 : 48,83 ''
IL_0000: ldarg.0 IL_0000: ldarg.0
...@@ -93,15 +82,15 @@ ...@@ -93,15 +82,15 @@
IL_0007: ldc.i4.0 IL_0007: ldc.i4.0
IL_0008: readonly. IL_0008: readonly.
IL_000a: ldelema !!T IL_000a: ldelema !!T
IL_000f: newobj instance void DoNotBoxStruct_ArrayOfArray_FSInterface_NoExtMeth/F@6::.ctor() IL_000f: ldnull
IL_0014: ldftn instance void DoNotBoxStruct_ArrayOfArray_FSInterface_NoExtMeth/F@6::Invoke(object, IL_0010: ldftn void DoNotBoxStruct_ArrayOfArray_FSInterface_NoExtMeth/F@6::Invoke(object,
int32) int32)
IL_001a: newobj instance void class [FSharp.Core]Microsoft.FSharp.Control.FSharpHandler`1<int32>::.ctor(object, IL_0016: newobj instance void class [FSharp.Core]Microsoft.FSharp.Control.FSharpHandler`1<int32>::.ctor(object,
native int) native int)
IL_001f: constrained. !!T IL_001b: constrained. !!T
IL_0025: callvirt instance void class [FSharp.Core]Microsoft.FSharp.Control.IDelegateEvent`1<class [FSharp.Core]Microsoft.FSharp.Control.FSharpHandler`1<int32>>::AddHandler(!0) IL_0021: callvirt instance void class [FSharp.Core]Microsoft.FSharp.Control.IDelegateEvent`1<class [FSharp.Core]Microsoft.FSharp.Control.FSharpHandler`1<int32>>::AddHandler(!0)
IL_002a: nop IL_0026: nop
IL_002b: ret IL_0027: ret
} // end of method DoNotBoxStruct_ArrayOfArray_FSInterface_NoExtMeth::F } // end of method DoNotBoxStruct_ArrayOfArray_FSInterface_NoExtMeth::F
} // end of class DoNotBoxStruct_ArrayOfArray_FSInterface_NoExtMeth } // end of class DoNotBoxStruct_ArrayOfArray_FSInterface_NoExtMeth
......
// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 // Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0
// Copyright (c) Microsoft Corporation. All rights reserved. // Copyright (c) Microsoft Corporation. All rights reserved.
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
.assembly extern FSharp.Core .assembly extern FSharp.Core
{ {
.publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....:
.ver 4:4:1:0 .ver 4:7:0:0
} }
.assembly DoNotBoxStruct_Array_FSInterface_NoExtMeth .assembly DoNotBoxStruct_Array_FSInterface_NoExtMeth
{ {
...@@ -29,20 +29,20 @@ ...@@ -29,20 +29,20 @@
} }
.mresource public FSharpSignatureData.DoNotBoxStruct_Array_FSInterface_NoExtMeth .mresource public FSharpSignatureData.DoNotBoxStruct_Array_FSInterface_NoExtMeth
{ {
// Offset: 0x00000000 Length: 0x00000278 // Offset: 0x00000000 Length: 0x00000261
} }
.mresource public FSharpOptimizationData.DoNotBoxStruct_Array_FSInterface_NoExtMeth .mresource public FSharpOptimizationData.DoNotBoxStruct_Array_FSInterface_NoExtMeth
{ {
// Offset: 0x00000280 Length: 0x000000AC // Offset: 0x00000268 Length: 0x000000AC
} }
.module DoNotBoxStruct_Array_FSInterface_NoExtMeth.exe .module DoNotBoxStruct_Array_FSInterface_NoExtMeth.exe
// MVID: {59B1920A-8127-3EE3-A745-03830A92B159} // MVID: {5EAD3E33-8127-3EE3-A745-0383333EAD5E}
.imagebase 0x00400000 .imagebase 0x00400000
.file alignment 0x00000200 .file alignment 0x00000200
.stackreserve 0x00100000 .stackreserve 0x00100000
.subsystem 0x0003 // WINDOWS_CUI .subsystem 0x0003 // WINDOWS_CUI
.corflags 0x00000001 // ILONLY .corflags 0x00000001 // ILONLY
// Image base: 0x00740000 // Image base: 0x00AF0000
// =============== CLASS MEMBERS DECLARATION =================== // =============== CLASS MEMBERS DECLARATION ===================
...@@ -51,55 +51,44 @@ ...@@ -51,55 +51,44 @@
extends [mscorlib]System.Object 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 ) .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 )
.class auto autochar serializable sealed nested assembly beforefieldinit specialname 'F@6-1' .class abstract auto autochar serializable sealed nested assembly beforefieldinit specialname F@6
extends [mscorlib]System.Object extends [mscorlib]System.Object
{ {
.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 ) .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 )
.method public specialname rtspecialname .method assembly static void Invoke(object x,
instance void .ctor() cil managed int32 _arg1) 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 'F@6-1'::.ctor
.method assembly hidebysig instance void
Invoke(object x,
int32 _arg1) cil managed
{ {
// Code size 3 (0x3) // Code size 3 (0x3)
.maxstack 5 .maxstack 5
.locals init ([0] int32 V_0) .locals init ([0] int32 V_0)
.language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}'
.line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\DoNotBoxStruct\\DoNotBoxStruct_Array_FSInterface_NoExtMeth.fs' .line 100001,100001 : 0,0 'C:\\dev\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\DoNotBoxStruct\\DoNotBoxStruct_Array_FSInterface_NoExtMeth.fs'
IL_0000: ldarg.2 IL_0000: ldarg.1
IL_0001: stloc.0 IL_0001: stloc.0
.line 6,6 : 74,76 '' .line 6,6 : 74,76 ''
IL_0002: ret IL_0002: ret
} // end of method 'F@6-1'::Invoke } // end of method F@6::Invoke
} // end of class 'F@6-1' } // end of class F@6
.method public static void F<(class [FSharp.Core]Microsoft.FSharp.Control.IEvent`2<class [FSharp.Core]Microsoft.FSharp.Control.FSharpHandler`1<int32>,int32>) T>(!!T[] x) cil managed .method public static void F<(class [FSharp.Core]Microsoft.FSharp.Control.IEvent`2<class [FSharp.Core]Microsoft.FSharp.Control.FSharpHandler`1<int32>,int32>) T>(!!T[] x) cil managed
{ {
// Code size 38 (0x26) // Code size 34 (0x22)
.maxstack 8 .maxstack 8
.line 6,6 : 46,77 '' .line 6,6 : 46,77 ''
IL_0000: ldarg.0 IL_0000: ldarg.0
IL_0001: ldc.i4.0 IL_0001: ldc.i4.0
IL_0002: readonly. IL_0002: readonly.
IL_0004: ldelema !!T IL_0004: ldelema !!T
IL_0009: newobj instance void DoNotBoxStruct_Array_FSInterface_NoExtMeth/'F@6-1'::.ctor() IL_0009: ldnull
IL_000e: ldftn instance void DoNotBoxStruct_Array_FSInterface_NoExtMeth/'F@6-1'::Invoke(object, IL_000a: ldftn void DoNotBoxStruct_Array_FSInterface_NoExtMeth/F@6::Invoke(object,
int32) int32)
IL_0014: newobj instance void class [FSharp.Core]Microsoft.FSharp.Control.FSharpHandler`1<int32>::.ctor(object, IL_0010: newobj instance void class [FSharp.Core]Microsoft.FSharp.Control.FSharpHandler`1<int32>::.ctor(object,
native int) native int)
IL_0019: constrained. !!T IL_0015: constrained. !!T
IL_001f: callvirt instance void class [FSharp.Core]Microsoft.FSharp.Control.IDelegateEvent`1<class [FSharp.Core]Microsoft.FSharp.Control.FSharpHandler`1<int32>>::AddHandler(!0) IL_001b: callvirt instance void class [FSharp.Core]Microsoft.FSharp.Control.IDelegateEvent`1<class [FSharp.Core]Microsoft.FSharp.Control.FSharpHandler`1<int32>>::AddHandler(!0)
IL_0024: nop IL_0020: nop
IL_0025: ret IL_0021: ret
} // end of method DoNotBoxStruct_Array_FSInterface_NoExtMeth::F } // end of method DoNotBoxStruct_Array_FSInterface_NoExtMeth::F
} // end of class DoNotBoxStruct_Array_FSInterface_NoExtMeth } // end of class DoNotBoxStruct_Array_FSInterface_NoExtMeth
......
// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 // Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0
// Copyright (c) Microsoft Corporation. All rights reserved. // Copyright (c) Microsoft Corporation. All rights reserved.
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
.assembly extern FSharp.Core .assembly extern FSharp.Core
{ {
.publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....:
.ver 4:4:1:0 .ver 4:7:0:0
} }
.assembly DoNotBoxStruct_MDArray_FSInterface_NoExtMeth .assembly DoNotBoxStruct_MDArray_FSInterface_NoExtMeth
{ {
...@@ -29,20 +29,20 @@ ...@@ -29,20 +29,20 @@
} }
.mresource public FSharpSignatureData.DoNotBoxStruct_MDArray_FSInterface_NoExtMeth .mresource public FSharpSignatureData.DoNotBoxStruct_MDArray_FSInterface_NoExtMeth
{ {
// Offset: 0x00000000 Length: 0x0000027F // Offset: 0x00000000 Length: 0x00000268
} }
.mresource public FSharpOptimizationData.DoNotBoxStruct_MDArray_FSInterface_NoExtMeth .mresource public FSharpOptimizationData.DoNotBoxStruct_MDArray_FSInterface_NoExtMeth
{ {
// Offset: 0x00000288 Length: 0x000000B0 // Offset: 0x00000270 Length: 0x000000B0
} }
.module DoNotBoxStruct_MDArray_FSInterface_NoExtMeth.exe .module DoNotBoxStruct_MDArray_FSInterface_NoExtMeth.exe
// MVID: {59B1920A-A67D-867A-A745-03830A92B159} // MVID: {5EAD3E33-A67D-867A-A745-0383333EAD5E}
.imagebase 0x00400000 .imagebase 0x00400000
.file alignment 0x00000200 .file alignment 0x00000200
.stackreserve 0x00100000 .stackreserve 0x00100000
.subsystem 0x0003 // WINDOWS_CUI .subsystem 0x0003 // WINDOWS_CUI
.corflags 0x00000001 // ILONLY .corflags 0x00000001 // ILONLY
// Image base: 0x010C0000 // Image base: 0x06A00000
// =============== CLASS MEMBERS DECLARATION =================== // =============== CLASS MEMBERS DECLARATION ===================
...@@ -51,40 +51,29 @@ ...@@ -51,40 +51,29 @@
extends [mscorlib]System.Object 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 ) .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 )
.class auto autochar serializable sealed nested assembly beforefieldinit specialname 'F@6-2' .class abstract auto autochar serializable sealed nested assembly beforefieldinit specialname F@6
extends [mscorlib]System.Object extends [mscorlib]System.Object
{ {
.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 ) .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 )
.method public specialname rtspecialname .method assembly static void Invoke(object x,
instance void .ctor() cil managed int32 _arg1) 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 'F@6-2'::.ctor
.method assembly hidebysig instance void
Invoke(object x,
int32 _arg1) cil managed
{ {
// Code size 3 (0x3) // Code size 3 (0x3)
.maxstack 5 .maxstack 5
.locals init ([0] int32 V_0) .locals init ([0] int32 V_0)
.language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}'
.line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\DoNotBoxStruct\\DoNotBoxStruct_MDArray_FSInterface_NoExtMeth.fs' .line 100001,100001 : 0,0 'C:\\dev\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\DoNotBoxStruct\\DoNotBoxStruct_MDArray_FSInterface_NoExtMeth.fs'
IL_0000: ldarg.2 IL_0000: ldarg.1
IL_0001: stloc.0 IL_0001: stloc.0
.line 6,6 : 77,79 '' .line 6,6 : 77,79 ''
IL_0002: ret IL_0002: ret
} // end of method 'F@6-2'::Invoke } // end of method F@6::Invoke
} // end of class 'F@6-2' } // end of class F@6
.method public static void F<(class [FSharp.Core]Microsoft.FSharp.Control.IEvent`2<class [FSharp.Core]Microsoft.FSharp.Control.FSharpHandler`1<int32>,int32>) T>(!!T[0...,0...] x) cil managed .method public static void F<(class [FSharp.Core]Microsoft.FSharp.Control.IEvent`2<class [FSharp.Core]Microsoft.FSharp.Control.FSharpHandler`1<int32>,int32>) T>(!!T[0...,0...] x) cil managed
{ {
// Code size 39 (0x27) // Code size 35 (0x23)
.maxstack 8 .maxstack 8
.line 6,6 : 47,80 '' .line 6,6 : 47,80 ''
IL_0000: ldarg.0 IL_0000: ldarg.0
...@@ -93,15 +82,15 @@ ...@@ -93,15 +82,15 @@
IL_0003: readonly. IL_0003: readonly.
IL_0005: call instance !!T& !!T[0...,0...]::Address(int32, IL_0005: call instance !!T& !!T[0...,0...]::Address(int32,
int32) int32)
IL_000a: newobj instance void DoNotBoxStruct_MDArray_FSInterface_NoExtMeth/'F@6-2'::.ctor() IL_000a: ldnull
IL_000f: ldftn instance void DoNotBoxStruct_MDArray_FSInterface_NoExtMeth/'F@6-2'::Invoke(object, IL_000b: ldftn void DoNotBoxStruct_MDArray_FSInterface_NoExtMeth/F@6::Invoke(object,
int32) int32)
IL_0015: newobj instance void class [FSharp.Core]Microsoft.FSharp.Control.FSharpHandler`1<int32>::.ctor(object, IL_0011: newobj instance void class [FSharp.Core]Microsoft.FSharp.Control.FSharpHandler`1<int32>::.ctor(object,
native int) native int)
IL_001a: constrained. !!T IL_0016: constrained. !!T
IL_0020: callvirt instance void class [FSharp.Core]Microsoft.FSharp.Control.IDelegateEvent`1<class [FSharp.Core]Microsoft.FSharp.Control.FSharpHandler`1<int32>>::AddHandler(!0) IL_001c: callvirt instance void class [FSharp.Core]Microsoft.FSharp.Control.IDelegateEvent`1<class [FSharp.Core]Microsoft.FSharp.Control.FSharpHandler`1<int32>>::AddHandler(!0)
IL_0025: nop IL_0021: nop
IL_0026: ret IL_0022: ret
} // end of method DoNotBoxStruct_MDArray_FSInterface_NoExtMeth::F } // end of method DoNotBoxStruct_MDArray_FSInterface_NoExtMeth::F
} // end of class DoNotBoxStruct_MDArray_FSInterface_NoExtMeth } // end of class DoNotBoxStruct_MDArray_FSInterface_NoExtMeth
......
// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 // Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0
// Copyright (c) Microsoft Corporation. All rights reserved. // Copyright (c) Microsoft Corporation. All rights reserved.
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
.assembly extern FSharp.Core .assembly extern FSharp.Core
{ {
.publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....:
.ver 4:4:1:0 .ver 4:7:0:0
} }
.assembly DoNotBoxStruct_NoArray_FSInterface_NoExtMeth .assembly DoNotBoxStruct_NoArray_FSInterface_NoExtMeth
{ {
...@@ -29,20 +29,20 @@ ...@@ -29,20 +29,20 @@
} }
.mresource public FSharpSignatureData.DoNotBoxStruct_NoArray_FSInterface_NoExtMeth .mresource public FSharpSignatureData.DoNotBoxStruct_NoArray_FSInterface_NoExtMeth
{ {
// Offset: 0x00000000 Length: 0x0000026F // Offset: 0x00000000 Length: 0x00000258
} }
.mresource public FSharpOptimizationData.DoNotBoxStruct_NoArray_FSInterface_NoExtMeth .mresource public FSharpOptimizationData.DoNotBoxStruct_NoArray_FSInterface_NoExtMeth
{ {
// Offset: 0x00000278 Length: 0x000000B0 // Offset: 0x00000260 Length: 0x000000B0
} }
.module DoNotBoxStruct_NoArray_FSInterface_NoExtMeth.exe .module DoNotBoxStruct_NoArray_FSInterface_NoExtMeth.exe
// MVID: {59B1920A-CD0A-F713-A745-03830A92B159} // MVID: {5EAD3E33-CD0A-F713-A745-0383333EAD5E}
.imagebase 0x00400000 .imagebase 0x00400000
.file alignment 0x00000200 .file alignment 0x00000200
.stackreserve 0x00100000 .stackreserve 0x00100000
.subsystem 0x0003 // WINDOWS_CUI .subsystem 0x0003 // WINDOWS_CUI
.corflags 0x00000001 // ILONLY .corflags 0x00000001 // ILONLY
// Image base: 0x00720000 // Image base: 0x05780000
// =============== CLASS MEMBERS DECLARATION =================== // =============== CLASS MEMBERS DECLARATION ===================
...@@ -51,55 +51,44 @@ ...@@ -51,55 +51,44 @@
extends [mscorlib]System.Object 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 ) .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 )
.class auto autochar serializable sealed nested assembly beforefieldinit specialname 'F@6-3' .class abstract auto autochar serializable sealed nested assembly beforefieldinit specialname F@6
extends [mscorlib]System.Object extends [mscorlib]System.Object
{ {
.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 ) .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 )
.method public specialname rtspecialname .method assembly static void Invoke(object x,
instance void .ctor() cil managed int32 _arg1) 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 'F@6-3'::.ctor
.method assembly hidebysig instance void
Invoke(object x,
int32 _arg1) cil managed
{ {
// Code size 3 (0x3) // Code size 3 (0x3)
.maxstack 5 .maxstack 5
.locals init ([0] int32 V_0) .locals init ([0] int32 V_0)
.language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}'
.line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\DoNotBoxStruct\\DoNotBoxStruct_NoArray_FSInterface_NoExtMeth.fs' .line 100001,100001 : 0,0 'C:\\dev\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\DoNotBoxStruct\\DoNotBoxStruct_NoArray_FSInterface_NoExtMeth.fs'
IL_0000: ldarg.2 IL_0000: ldarg.1
IL_0001: stloc.0 IL_0001: stloc.0
.line 6,6 : 68,70 '' .line 6,6 : 68,70 ''
IL_0002: ret IL_0002: ret
} // end of method 'F@6-3'::Invoke } // end of method F@6::Invoke
} // end of class 'F@6-3' } // end of class F@6
.method public static void F<(class [FSharp.Core]Microsoft.FSharp.Control.IEvent`2<class [FSharp.Core]Microsoft.FSharp.Control.FSharpHandler`1<int32>,int32>) T>(!!T x) cil managed .method public static void F<(class [FSharp.Core]Microsoft.FSharp.Control.IEvent`2<class [FSharp.Core]Microsoft.FSharp.Control.FSharpHandler`1<int32>,int32>) T>(!!T x) cil managed
{ {
// Code size 33 (0x21) // Code size 29 (0x1d)
.maxstack 5 .maxstack 5
.locals init ([0] !!T V_0) .locals init ([0] !!T V_0)
.line 6,6 : 44,71 '' .line 6,6 : 44,71 ''
IL_0000: ldarg.0 IL_0000: ldarg.0
IL_0001: stloc.0 IL_0001: stloc.0
IL_0002: ldloca.s V_0 IL_0002: ldloca.s V_0
IL_0004: newobj instance void DoNotBoxStruct_NoArray_FSInterface_NoExtMeth/'F@6-3'::.ctor() IL_0004: ldnull
IL_0009: ldftn instance void DoNotBoxStruct_NoArray_FSInterface_NoExtMeth/'F@6-3'::Invoke(object, IL_0005: ldftn void DoNotBoxStruct_NoArray_FSInterface_NoExtMeth/F@6::Invoke(object,
int32) int32)
IL_000f: newobj instance void class [FSharp.Core]Microsoft.FSharp.Control.FSharpHandler`1<int32>::.ctor(object, IL_000b: newobj instance void class [FSharp.Core]Microsoft.FSharp.Control.FSharpHandler`1<int32>::.ctor(object,
native int) native int)
IL_0014: constrained. !!T IL_0010: constrained. !!T
IL_001a: callvirt instance void class [FSharp.Core]Microsoft.FSharp.Control.IDelegateEvent`1<class [FSharp.Core]Microsoft.FSharp.Control.FSharpHandler`1<int32>>::AddHandler(!0) IL_0016: callvirt instance void class [FSharp.Core]Microsoft.FSharp.Control.IDelegateEvent`1<class [FSharp.Core]Microsoft.FSharp.Control.FSharpHandler`1<int32>>::AddHandler(!0)
IL_001f: nop IL_001b: nop
IL_0020: ret IL_001c: ret
} // end of method DoNotBoxStruct_NoArray_FSInterface_NoExtMeth::F } // end of method DoNotBoxStruct_NoArray_FSInterface_NoExtMeth::F
} // end of class DoNotBoxStruct_NoArray_FSInterface_NoExtMeth } // end of class DoNotBoxStruct_NoArray_FSInterface_NoExtMeth
......
// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 // Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0
// Copyright (c) Microsoft Corporation. All rights reserved. // Copyright (c) Microsoft Corporation. All rights reserved.
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
.assembly extern FSharp.Core .assembly extern FSharp.Core
{ {
.publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....:
.ver 4:5:0:0 .ver 4:7:0:0
} }
.assembly extern Utils .assembly extern Utils
{ {
...@@ -38,20 +38,20 @@ ...@@ -38,20 +38,20 @@
} }
.mresource public FSharpSignatureData.Linq101Aggregates01 .mresource public FSharpSignatureData.Linq101Aggregates01
{ {
// Offset: 0x00000000 Length: 0x00000614 // Offset: 0x00000000 Length: 0x000005F6
} }
.mresource public FSharpOptimizationData.Linq101Aggregates01 .mresource public FSharpOptimizationData.Linq101Aggregates01
{ {
// Offset: 0x00000618 Length: 0x00000211 // Offset: 0x00000600 Length: 0x00000211
} }
.module Linq101Aggregates01.exe .module Linq101Aggregates01.exe
// MVID: {5B9A632A-D281-4783-A745-03832A639A5B} // MVID: {5EAD3E37-D281-4783-A745-0383373EAD5E}
.imagebase 0x00400000 .imagebase 0x00400000
.file alignment 0x00000200 .file alignment 0x00000200
.stackreserve 0x00100000 .stackreserve 0x00100000
.subsystem 0x0003 // WINDOWS_CUI .subsystem 0x0003 // WINDOWS_CUI
.corflags 0x00000001 // ILONLY .corflags 0x00000001 // ILONLY
// Image base: 0x026B0000 // Image base: 0x04D10000
// =============== CLASS MEMBERS DECLARATION =================== // =============== CLASS MEMBERS DECLARATION ===================
...@@ -105,7 +105,7 @@ ...@@ -105,7 +105,7 @@
.locals init ([0] int32 V_0, .locals init ([0] int32 V_0,
[1] int32 n) [1] int32 n)
.language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}'
.line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\QueryExpressionStepping\\Linq101Aggregates01.fs' .line 100001,100001 : 0,0 'C:\\dev\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\QueryExpressionStepping\\Linq101Aggregates01.fs'
IL_0000: ldarg.0 IL_0000: ldarg.0
IL_0001: ldfld int32 Linq101Aggregates01/uniqueFactors@12::pc IL_0001: ldfld int32 Linq101Aggregates01/uniqueFactors@12::pc
IL_0006: ldc.i4.1 IL_0006: ldc.i4.1
...@@ -3119,27 +3119,17 @@ ...@@ -3119,27 +3119,17 @@
} // end of class 'categories3@67-2' } // end of class 'categories3@67-2'
.class auto autochar serializable sealed nested assembly beforefieldinit specialname 'min@68-2' .class abstract auto autochar serializable sealed nested assembly beforefieldinit specialname 'min@68-2'
extends [mscorlib]System.Object extends [mscorlib]System.Object
{ {
.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 ) .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 )
.method public specialname rtspecialname .method assembly static valuetype [mscorlib]System.Decimal
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 'min@68-2'::.ctor
.method assembly hidebysig instance valuetype [mscorlib]System.Decimal
Invoke(class [Utils]Utils/Product p) cil managed Invoke(class [Utils]Utils/Product p) cil managed
{ {
// Code size 9 (0x9) // Code size 9 (0x9)
.maxstack 8 .maxstack 8
.line 68,68 : 46,57 '' .line 68,68 : 46,57 ''
IL_0000: ldarg.1 IL_0000: ldarg.0
IL_0001: tail. IL_0001: tail.
IL_0003: callvirt instance valuetype [mscorlib]System.Decimal [Utils]Utils/Product::get_UnitPrice() IL_0003: callvirt instance valuetype [mscorlib]System.Decimal [Utils]Utils/Product::get_UnitPrice()
IL_0008: ret IL_0008: ret
...@@ -3547,7 +3537,7 @@ ...@@ -3547,7 +3537,7 @@
.method public strict virtual instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2<class [mscorlib]System.Tuple`3<class [System.Core]System.Linq.IGrouping`2<string,class [Utils]Utils/Product>,valuetype [mscorlib]System.Decimal,class [mscorlib]System.Collections.Generic.IEnumerable`1<class [Utils]Utils/Product>>,object> .method public strict virtual instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2<class [mscorlib]System.Tuple`3<class [System.Core]System.Linq.IGrouping`2<string,class [Utils]Utils/Product>,valuetype [mscorlib]System.Decimal,class [mscorlib]System.Collections.Generic.IEnumerable`1<class [Utils]Utils/Product>>,object>
Invoke(class [System.Core]System.Linq.IGrouping`2<string,class [Utils]Utils/Product> _arg2) cil managed Invoke(class [System.Core]System.Linq.IGrouping`2<string,class [Utils]Utils/Product> _arg2) cil managed
{ {
// Code size 85 (0x55) // Code size 81 (0x51)
.maxstack 9 .maxstack 9
.locals init ([0] class [System.Core]System.Linq.IGrouping`2<string,class [Utils]Utils/Product> g, .locals init ([0] class [System.Core]System.Linq.IGrouping`2<string,class [Utils]Utils/Product> g,
[1] valuetype [mscorlib]System.Decimal min, [1] valuetype [mscorlib]System.Decimal min,
...@@ -3558,44 +3548,44 @@ ...@@ -3558,44 +3548,44 @@
IL_0001: stloc.0 IL_0001: stloc.0
.line 68,68 : 9,58 '' .line 68,68 : 9,58 ''
IL_0002: ldloc.0 IL_0002: ldloc.0
IL_0003: newobj instance void Linq101Aggregates01/'min@68-2'::.ctor() IL_0003: ldnull
IL_0008: ldftn instance valuetype [mscorlib]System.Decimal Linq101Aggregates01/'min@68-2'::Invoke(class [Utils]Utils/Product) IL_0004: ldftn valuetype [mscorlib]System.Decimal Linq101Aggregates01/'min@68-2'::Invoke(class [Utils]Utils/Product)
IL_000e: newobj instance void class [mscorlib]System.Func`2<class [Utils]Utils/Product,valuetype [mscorlib]System.Decimal>::.ctor(object, IL_000a: newobj instance void class [mscorlib]System.Func`2<class [Utils]Utils/Product,valuetype [mscorlib]System.Decimal>::.ctor(object,
native int) native int)
IL_0013: call valuetype [mscorlib]System.Decimal [System.Core]System.Linq.Enumerable::Min<class [Utils]Utils/Product>(class [mscorlib]System.Collections.Generic.IEnumerable`1<!!0>, IL_000f: call valuetype [mscorlib]System.Decimal [System.Core]System.Linq.Enumerable::Min<class [Utils]Utils/Product>(class [mscorlib]System.Collections.Generic.IEnumerable`1<!!0>,
class [mscorlib]System.Func`2<!!0,valuetype [mscorlib]System.Decimal>) class [mscorlib]System.Func`2<!!0,valuetype [mscorlib]System.Decimal>)
IL_0018: stloc.1 IL_0014: stloc.1
.line 70,70 : 9,41 '' .line 70,70 : 9,41 ''
IL_0019: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() IL_0015: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query()
IL_001e: stloc.3 IL_001a: stloc.3
IL_001f: ldloc.3 IL_001b: ldloc.3
IL_0020: ldloc.0 IL_001c: ldloc.0
IL_0021: ldnull IL_001d: ldnull
IL_0022: ldc.i4.0 IL_001e: ldc.i4.0
IL_0023: ldnull IL_001f: ldnull
IL_0024: newobj instance void Linq101Aggregates01/cheapestProducts@69::.ctor(class [System.Core]System.Linq.IGrouping`2<string,class [Utils]Utils/Product>, IL_0020: newobj instance void Linq101Aggregates01/cheapestProducts@69::.ctor(class [System.Core]System.Linq.IGrouping`2<string,class [Utils]Utils/Product>,
class [mscorlib]System.Collections.Generic.IEnumerator`1<class [Utils]Utils/Product>, class [mscorlib]System.Collections.Generic.IEnumerator`1<class [Utils]Utils/Product>,
int32, int32,
class [Utils]Utils/Product) class [Utils]Utils/Product)
IL_0029: newobj instance void class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2<class [Utils]Utils/Product,class [mscorlib]System.Collections.IEnumerable>::.ctor(class [mscorlib]System.Collections.Generic.IEnumerable`1<!0>) IL_0025: newobj instance void class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2<class [Utils]Utils/Product,class [mscorlib]System.Collections.IEnumerable>::.ctor(class [mscorlib]System.Collections.Generic.IEnumerable`1<!0>)
IL_002e: ldloc.1 IL_002a: ldloc.1
IL_002f: newobj instance void Linq101Aggregates01/'cheapestProducts@69-1'::.ctor(valuetype [mscorlib]System.Decimal) IL_002b: newobj instance void Linq101Aggregates01/'cheapestProducts@69-1'::.ctor(valuetype [mscorlib]System.Decimal)
IL_0034: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2<!!0,!!1> [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Where<class [Utils]Utils/Product,class [mscorlib]System.Collections.IEnumerable>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2<!!0,!!1>, IL_0030: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2<!!0,!!1> [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Where<class [Utils]Utils/Product,class [mscorlib]System.Collections.IEnumerable>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2<!!0,!!1>,
class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2<!!0,bool>) class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2<!!0,bool>)
IL_0039: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerable`1<!0> class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2<class [Utils]Utils/Product,class [mscorlib]System.Collections.IEnumerable>::get_Source() IL_0035: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerable`1<!0> class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2<class [Utils]Utils/Product,class [mscorlib]System.Collections.IEnumerable>::get_Source()
IL_003e: stloc.2 IL_003a: stloc.2
.line 70,70 : 9,41 '' .line 70,70 : 9,41 ''
IL_003f: ldarg.0 IL_003b: ldarg.0
IL_0040: ldfld class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder Linq101Aggregates01/'categories3@67-3'::builder@ IL_003c: ldfld class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder Linq101Aggregates01/'categories3@67-3'::builder@
IL_0045: ldloc.0 IL_0041: ldloc.0
IL_0046: ldloc.1 IL_0042: ldloc.1
IL_0047: ldloc.2 IL_0043: ldloc.2
IL_0048: newobj instance void class [mscorlib]System.Tuple`3<class [System.Core]System.Linq.IGrouping`2<string,class [Utils]Utils/Product>,valuetype [mscorlib]System.Decimal,class [mscorlib]System.Collections.Generic.IEnumerable`1<class [Utils]Utils/Product>>::.ctor(!0, IL_0044: newobj instance void class [mscorlib]System.Tuple`3<class [System.Core]System.Linq.IGrouping`2<string,class [Utils]Utils/Product>,valuetype [mscorlib]System.Decimal,class [mscorlib]System.Collections.Generic.IEnumerable`1<class [Utils]Utils/Product>>::.ctor(!0,
!1, !1,
!2) !2)
IL_004d: tail. IL_0049: tail.
IL_004f: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2<!!0,!!1> [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Yield<class [mscorlib]System.Tuple`3<class [System.Core]System.Linq.IGrouping`2<string,class [Utils]Utils/Product>,valuetype [mscorlib]System.Decimal,class [mscorlib]System.Collections.Generic.IEnumerable`1<class [Utils]Utils/Product>>,object>(!!0) IL_004b: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2<!!0,!!1> [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Yield<class [mscorlib]System.Tuple`3<class [System.Core]System.Linq.IGrouping`2<string,class [Utils]Utils/Product>,valuetype [mscorlib]System.Decimal,class [mscorlib]System.Collections.Generic.IEnumerable`1<class [Utils]Utils/Product>>,object>(!!0)
IL_0054: ret IL_0050: ret
} // end of method 'categories3@67-3'::Invoke } // end of method 'categories3@67-3'::Invoke
} // end of class 'categories3@67-3' } // end of class 'categories3@67-3'
......
// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 // Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0
// Copyright (c) Microsoft Corporation. All rights reserved. // Copyright (c) Microsoft Corporation. All rights reserved.
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
.assembly extern FSharp.Core .assembly extern FSharp.Core
{ {
.publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....:
.ver 4:5:0:0 .ver 4:7:0:0
} }
.assembly extern Utils .assembly extern Utils
{ {
...@@ -38,20 +38,20 @@ ...@@ -38,20 +38,20 @@
} }
.mresource public FSharpSignatureData.Linq101Quantifiers01 .mresource public FSharpSignatureData.Linq101Quantifiers01
{ {
// Offset: 0x00000000 Length: 0x0000039F // Offset: 0x00000000 Length: 0x00000381
} }
.mresource public FSharpOptimizationData.Linq101Quantifiers01 .mresource public FSharpOptimizationData.Linq101Quantifiers01
{ {
// Offset: 0x000003A8 Length: 0x000000FF // Offset: 0x00000388 Length: 0x000000FF
} }
.module Linq101Quantifiers01.exe .module Linq101Quantifiers01.exe
// MVID: {5B9A632A-76DD-E373-A745-03832A639A5B} // MVID: {5EAD3E37-76DD-E373-A745-0383373EAD5E}
.imagebase 0x00400000 .imagebase 0x00400000
.file alignment 0x00000200 .file alignment 0x00000200
.stackreserve 0x00100000 .stackreserve 0x00100000
.subsystem 0x0003 // WINDOWS_CUI .subsystem 0x0003 // WINDOWS_CUI
.corflags 0x00000001 // ILONLY .corflags 0x00000001 // ILONLY
// Image base: 0x025D0000 // Image base: 0x05120000
// =============== CLASS MEMBERS DECLARATION =================== // =============== CLASS MEMBERS DECLARATION ===================
...@@ -105,7 +105,7 @@ ...@@ -105,7 +105,7 @@
.locals init ([0] string V_0, .locals init ([0] string V_0,
[1] string w) [1] string w)
.language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}'
.line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\QueryExpressionStepping\\Linq101Quantifiers01.fs' .line 100001,100001 : 0,0 'C:\\dev\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\QueryExpressionStepping\\Linq101Quantifiers01.fs'
IL_0000: ldarg.0 IL_0000: ldarg.0
IL_0001: ldfld int32 Linq101Quantifiers01/iAfterE@12::pc IL_0001: ldfld int32 Linq101Quantifiers01/iAfterE@12::pc
IL_0006: ldc.i4.1 IL_0006: ldc.i4.1
...@@ -559,27 +559,16 @@ ...@@ -559,27 +559,16 @@
} // end of class 'productGroups@22-3' } // end of class 'productGroups@22-3'
.class auto autochar serializable sealed nested assembly beforefieldinit specialname 'productGroups@23-5' .class abstract auto autochar serializable sealed nested assembly beforefieldinit specialname 'productGroups@23-5'
extends [mscorlib]System.Object extends [mscorlib]System.Object
{ {
.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 ) .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 )
.method public specialname rtspecialname .method assembly static bool Invoke(class [Utils]Utils/Product x) cil managed
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 'productGroups@23-5'::.ctor
.method assembly hidebysig instance bool
Invoke(class [Utils]Utils/Product x) cil managed
{ {
// Code size 10 (0xa) // Code size 10 (0xa)
.maxstack 8 .maxstack 8
.line 23,23 : 31,49 '' .line 23,23 : 31,49 ''
IL_0000: ldarg.1 IL_0000: ldarg.0
IL_0001: callvirt instance int32 [Utils]Utils/Product::get_UnitsInStock() IL_0001: callvirt instance int32 [Utils]Utils/Product::get_UnitsInStock()
IL_0006: ldc.i4.0 IL_0006: ldc.i4.0
IL_0007: ceq IL_0007: ceq
...@@ -606,17 +595,17 @@ ...@@ -606,17 +595,17 @@
.method public strict virtual instance bool .method public strict virtual instance bool
Invoke(class [System.Core]System.Linq.IGrouping`2<string,class [Utils]Utils/Product> g) cil managed Invoke(class [System.Core]System.Linq.IGrouping`2<string,class [Utils]Utils/Product> g) cil managed
{ {
// Code size 23 (0x17) // Code size 19 (0x13)
.maxstack 8 .maxstack 8
.line 23,23 : 16,50 '' .line 23,23 : 16,50 ''
IL_0000: ldarg.1 IL_0000: ldarg.1
IL_0001: newobj instance void Linq101Quantifiers01/'productGroups@23-5'::.ctor() IL_0001: ldnull
IL_0006: ldftn instance bool Linq101Quantifiers01/'productGroups@23-5'::Invoke(class [Utils]Utils/Product) IL_0002: ldftn bool Linq101Quantifiers01/'productGroups@23-5'::Invoke(class [Utils]Utils/Product)
IL_000c: newobj instance void class [mscorlib]System.Func`2<class [Utils]Utils/Product,bool>::.ctor(object, IL_0008: newobj instance void class [mscorlib]System.Func`2<class [Utils]Utils/Product,bool>::.ctor(object,
native int) native int)
IL_0011: call bool [System.Core]System.Linq.Enumerable::Any<class [Utils]Utils/Product>(class [mscorlib]System.Collections.Generic.IEnumerable`1<!!0>, IL_000d: call bool [System.Core]System.Linq.Enumerable::Any<class [Utils]Utils/Product>(class [mscorlib]System.Collections.Generic.IEnumerable`1<!!0>,
class [mscorlib]System.Func`2<!!0,bool>) class [mscorlib]System.Func`2<!!0,bool>)
IL_0016: ret IL_0012: ret
} // end of method 'productGroups@23-4'::Invoke } // end of method 'productGroups@23-4'::Invoke
} // end of class 'productGroups@23-4' } // end of class 'productGroups@23-4'
...@@ -1152,27 +1141,16 @@ ...@@ -1152,27 +1141,16 @@
} // end of class 'productGroups2@40-3' } // end of class 'productGroups2@40-3'
.class auto autochar serializable sealed nested assembly beforefieldinit specialname 'productGroups2@41-5' .class abstract auto autochar serializable sealed nested assembly beforefieldinit specialname 'productGroups2@41-5'
extends [mscorlib]System.Object extends [mscorlib]System.Object
{ {
.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 ) .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 )
.method public specialname rtspecialname .method assembly static bool Invoke(class [Utils]Utils/Product x) cil managed
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 'productGroups2@41-5'::.ctor
.method assembly hidebysig instance bool
Invoke(class [Utils]Utils/Product x) cil managed
{ {
// Code size 10 (0xa) // Code size 10 (0xa)
.maxstack 8 .maxstack 8
.line 41,41 : 31,49 '' .line 41,41 : 31,49 ''
IL_0000: ldarg.1 IL_0000: ldarg.0
IL_0001: callvirt instance int32 [Utils]Utils/Product::get_UnitsInStock() IL_0001: callvirt instance int32 [Utils]Utils/Product::get_UnitsInStock()
IL_0006: ldc.i4.0 IL_0006: ldc.i4.0
IL_0007: cgt IL_0007: cgt
...@@ -1199,17 +1177,17 @@ ...@@ -1199,17 +1177,17 @@
.method public strict virtual instance bool .method public strict virtual instance bool
Invoke(class [System.Core]System.Linq.IGrouping`2<string,class [Utils]Utils/Product> g) cil managed Invoke(class [System.Core]System.Linq.IGrouping`2<string,class [Utils]Utils/Product> g) cil managed
{ {
// Code size 23 (0x17) // Code size 19 (0x13)
.maxstack 8 .maxstack 8
.line 41,41 : 16,50 '' .line 41,41 : 16,50 ''
IL_0000: ldarg.1 IL_0000: ldarg.1
IL_0001: newobj instance void Linq101Quantifiers01/'productGroups2@41-5'::.ctor() IL_0001: ldnull
IL_0006: ldftn instance bool Linq101Quantifiers01/'productGroups2@41-5'::Invoke(class [Utils]Utils/Product) IL_0002: ldftn bool Linq101Quantifiers01/'productGroups2@41-5'::Invoke(class [Utils]Utils/Product)
IL_000c: newobj instance void class [mscorlib]System.Func`2<class [Utils]Utils/Product,bool>::.ctor(object, IL_0008: newobj instance void class [mscorlib]System.Func`2<class [Utils]Utils/Product,bool>::.ctor(object,
native int) native int)
IL_0011: call bool [System.Core]System.Linq.Enumerable::All<class [Utils]Utils/Product>(class [mscorlib]System.Collections.Generic.IEnumerable`1<!!0>, IL_000d: call bool [System.Core]System.Linq.Enumerable::All<class [Utils]Utils/Product>(class [mscorlib]System.Collections.Generic.IEnumerable`1<!!0>,
class [mscorlib]System.Func`2<!!0,bool>) class [mscorlib]System.Func`2<!!0,bool>)
IL_0016: ret IL_0012: ret
} // end of method 'productGroups2@41-4'::Invoke } // end of method 'productGroups2@41-4'::Invoke
} // end of class 'productGroups2@41-4' } // end of class 'productGroups2@41-4'
...@@ -1250,7 +1228,7 @@ ...@@ -1250,7 +1228,7 @@
{ {
// Code size 6 (0x6) // Code size 6 (0x6)
.maxstack 8 .maxstack 8
IL_0000: ldsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<string> '<StartupCode$Linq101Quantifiers01>'.$Linq101Quantifiers01::'words@8-6' IL_0000: ldsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<string> '<StartupCode$Linq101Quantifiers01>'.$Linq101Quantifiers01::words@8
IL_0005: ret IL_0005: ret
} // end of method Linq101Quantifiers01::get_words } // end of method Linq101Quantifiers01::get_words
...@@ -1268,7 +1246,7 @@ ...@@ -1268,7 +1246,7 @@
{ {
// Code size 6 (0x6) // Code size 6 (0x6)
.maxstack 8 .maxstack 8
IL_0000: ldsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<class [Utils]Utils/Product> '<StartupCode$Linq101Quantifiers01>'.$Linq101Quantifiers01::'products@17-10' IL_0000: ldsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<class [Utils]Utils/Product> '<StartupCode$Linq101Quantifiers01>'.$Linq101Quantifiers01::products@17
IL_0005: ret IL_0005: ret
} // end of method Linq101Quantifiers01::get_products } // end of method Linq101Quantifiers01::get_products
...@@ -1286,7 +1264,7 @@ ...@@ -1286,7 +1264,7 @@
{ {
// Code size 6 (0x6) // Code size 6 (0x6)
.maxstack 8 .maxstack 8
IL_0000: ldsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<int32> '<StartupCode$Linq101Quantifiers01>'.$Linq101Quantifiers01::'numbers@28-7' IL_0000: ldsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<int32> '<StartupCode$Linq101Quantifiers01>'.$Linq101Quantifiers01::numbers@28
IL_0005: ret IL_0005: ret
} // end of method Linq101Quantifiers01::get_numbers } // end of method Linq101Quantifiers01::get_numbers
...@@ -1353,15 +1331,15 @@ ...@@ -1353,15 +1331,15 @@
.class private abstract auto ansi sealed '<StartupCode$Linq101Quantifiers01>'.$Linq101Quantifiers01 .class private abstract auto ansi sealed '<StartupCode$Linq101Quantifiers01>'.$Linq101Quantifiers01
extends [mscorlib]System.Object extends [mscorlib]System.Object
{ {
.field static assembly class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<string> 'words@8-6' .field static assembly class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<string> words@8
.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.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 )
.field static assembly bool iAfterE@10 .field static assembly bool iAfterE@10
.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.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 )
.field static assembly class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<class [Utils]Utils/Product> 'products@17-10' .field static assembly class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<class [Utils]Utils/Product> products@17
.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.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 )
.field static assembly class [mscorlib]System.Tuple`2<string,class [System.Core]System.Linq.IGrouping`2<string,class [Utils]Utils/Product>>[] productGroups@19 .field static assembly class [mscorlib]System.Tuple`2<string,class [System.Core]System.Linq.IGrouping`2<string,class [Utils]Utils/Product>>[] productGroups@19
.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.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 )
.field static assembly class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<int32> 'numbers@28-7' .field static assembly class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<int32> numbers@28
.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.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 )
.field static assembly bool onlyOdd@30 .field static assembly bool onlyOdd@30
.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.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 )
...@@ -1400,7 +1378,7 @@ ...@@ -1400,7 +1378,7 @@
IL_0028: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<!0> class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<string>::Cons(!0, IL_0028: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<!0> class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<string>::Cons(!0,
class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<!0>) class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<!0>)
IL_002d: dup IL_002d: dup
IL_002e: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<string> '<StartupCode$Linq101Quantifiers01>'.$Linq101Quantifiers01::'words@8-6' IL_002e: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<string> '<StartupCode$Linq101Quantifiers01>'.$Linq101Quantifiers01::words@8
IL_0033: stloc.0 IL_0033: stloc.0
IL_0034: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() IL_0034: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query()
IL_0039: ldnull IL_0039: ldnull
...@@ -1419,7 +1397,7 @@ ...@@ -1419,7 +1397,7 @@
.line 17,17 : 1,32 '' .line 17,17 : 1,32 ''
IL_0057: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<class [Utils]Utils/Product> [Utils]Utils::getProductList() IL_0057: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<class [Utils]Utils/Product> [Utils]Utils::getProductList()
IL_005c: dup IL_005c: dup
IL_005d: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<class [Utils]Utils/Product> '<StartupCode$Linq101Quantifiers01>'.$Linq101Quantifiers01::'products@17-10' IL_005d: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<class [Utils]Utils/Product> '<StartupCode$Linq101Quantifiers01>'.$Linq101Quantifiers01::products@17
IL_0062: stloc.2 IL_0062: stloc.2
.line 19,25 : 1,21 '' .line 19,25 : 1,21 ''
IL_0063: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() IL_0063: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query()
...@@ -1480,7 +1458,7 @@ ...@@ -1480,7 +1458,7 @@
IL_00fb: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<!0> class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<int32>::Cons(!0, IL_00fb: 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>) class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<!0>)
IL_0100: dup IL_0100: dup
IL_0101: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<int32> '<StartupCode$Linq101Quantifiers01>'.$Linq101Quantifiers01::'numbers@28-7' IL_0101: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1<int32> '<StartupCode$Linq101Quantifiers01>'.$Linq101Quantifiers01::numbers@28
IL_0106: stloc.s numbers IL_0106: stloc.s numbers
IL_0108: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() IL_0108: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query()
IL_010d: ldnull IL_010d: ldnull
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册