diff --git a/src/Compiler/Optimize/LowerStateMachines.fs b/src/Compiler/Optimize/LowerStateMachines.fs index 2c5dea5ff0..9f8e9684a6 100644 --- a/src/Compiler/Optimize/LowerStateMachines.fs +++ b/src/Compiler/Optimize/LowerStateMachines.fs @@ -102,15 +102,7 @@ let RepresentBindingAsStateVar g (bind: Binding) (resBody: StateMachineConversio let isExpandVar g (v: Val) = isReturnsResumableCodeTy g v.TauType -// We allow a prefix of bindings prior to the state machine, e.g. -// task { .. } -// becomes -// let builder@ = task -// .... -let isStateMachineBindingVar g (v: Val) = - isExpandVar g v || - (let nm = v.LogicalName - (nm.StartsWithOrdinal("builder@") || v.IsMemberThisVal)) +let isStateMachineBindingVar g (v: Val) = isExpandVar g v type env = { @@ -361,7 +353,6 @@ type LowerStateMachine(g: TcGlobals, outerResumableCodeDefns: ValMap) = TryReduceExpr env f (args2 @ args) (fun f2 -> remake (Expr.App (f2, _fty, _tyargs, args2, _m))) | _ -> - //let (env, expr) = BindResumableCodeDefinitions env expr match TryReduceApp env expr args with | Some expandedExpr -> if sm_verbose then printfn "reduction = %A, args = %A --> %A..." expr args expandedExpr @@ -408,7 +399,6 @@ type LowerStateMachine(g: TcGlobals, outerResumableCodeDefns: ValMap) = // Detect a state machine with a single method override [] let (|ExpandedStateMachineInContext|_|) inputExpr = - // All expanded resumable code state machines e.g. 'task { .. }' begin with a bind of @builder or 'defn' // Seed the env with any expand-var definitions from outer scopes (e.g. across lambda boundaries) let initialEnv = { env.Empty with ResumableCodeDefns = outerResumableCodeDefns } let env, expr = BindResumableCodeDefinitions initialEnv inputExpr diff --git a/tests/fsharp/Compiler/CodeGen/EmittedIL/TaskGeneratedCode.fs b/tests/fsharp/Compiler/CodeGen/EmittedIL/TaskGeneratedCode.fs index 04c97034db..8fa8777aeb 100644 --- a/tests/fsharp/Compiler/CodeGen/EmittedIL/TaskGeneratedCode.fs +++ b/tests/fsharp/Compiler/CodeGen/EmittedIL/TaskGeneratedCode.fs @@ -38,67 +38,75 @@ let testTask() = task { return 1 } (fun verifier -> verifier.VerifyIL [ """ .method public strict virtual instance void MoveNext() cil managed -{ - .override [runtime]System.Runtime.CompilerServices.IAsyncStateMachine::MoveNext - - .maxstack 4 - .locals init (int32 V_0, - class [runtime]System.Exception V_1, - bool V_2, - int32 V_3, - class [runtime]System.Exception V_4, - class [runtime]System.Exception V_5) - IL_0000: ldarg.0 - IL_0001: ldfld int32 Test/testTask@4::ResumptionPoint - IL_0006: stloc.0 - .try - { - IL_0007: ldc.i4.1 - IL_0008: stloc.3 - IL_0009: ldarg.0 - IL_000a: ldflda valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 Test/testTask@4::Data - IL_000f: ldloc.3 - IL_0010: stfld !0 valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1::Result - IL_0015: ldc.i4.1 - IL_0016: stloc.2 - IL_0017: ldloc.2 - IL_0018: brfalse.s IL_0037 - - IL_001a: ldarg.0 - IL_001b: ldflda valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 Test/testTask@4::Data - IL_0020: ldflda valuetype [runtime]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1 valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1::MethodBuilder - IL_0025: ldarg.0 - IL_0026: ldflda valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 Test/testTask@4::Data - IL_002b: ldfld !0 valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1::Result - IL_0030: call instance void valuetype [netstandard]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1::SetResult(!0) - IL_0035: leave.s IL_0045 - - IL_0037: leave.s IL_0045 - - } - catch [runtime]System.Object { - IL_0039: castclass [runtime]System.Exception - IL_003e: stloc.s V_4 - IL_0040: ldloc.s V_4 - IL_0042: stloc.1 - IL_0043: leave.s IL_0045 - - } - IL_0045: ldloc.1 - IL_0046: stloc.s V_5 - IL_0048: ldloc.s V_5 - IL_004a: brtrue.s IL_004d - - IL_004c: ret - - IL_004d: ldarg.0 - IL_004e: ldflda valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 Test/testTask@4::Data - IL_0053: ldflda valuetype [runtime]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1 valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1::MethodBuilder - IL_0058: ldloc.s V_5 - IL_005a: call instance void valuetype [netstandard]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1::SetException(class [netstandard]System.Exception) - IL_005f: ret -} + .override [runtime]System.Runtime.CompilerServices.IAsyncStateMachine::MoveNext + + .maxstack 4 + .locals init (int32 V_0, + class [runtime]System.Exception V_1, + bool V_2, + class [FSharp.Core]Microsoft.FSharp.Control.TaskBuilderBase V_3, + class [FSharp.Core]Microsoft.FSharp.Control.TaskBuilderBase V_4, + int32 V_5, + class [runtime]System.Exception V_6, + class [runtime]System.Exception V_7) + IL_0000: ldarg.0 + IL_0001: ldfld int32 Test/testTask@4::ResumptionPoint + IL_0006: stloc.0 + .try + { + IL_0007: ldarg.0 + IL_0008: ldfld class [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder Test/testTask@4::builder@ + IL_000d: stloc.3 + IL_000e: ldarg.0 + IL_000f: ldfld class [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder Test/testTask@4::builder@ + IL_0014: stloc.s V_4 + IL_0016: ldc.i4.1 + IL_0017: stloc.s V_5 + IL_0019: ldarg.0 + IL_001a: ldflda valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 Test/testTask@4::Data + IL_001f: ldloc.s V_5 + IL_0021: stfld !0 valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1::Result + IL_0026: ldc.i4.1 + IL_0027: stloc.2 + IL_0028: ldloc.2 + IL_0029: brfalse.s IL_0048 + + IL_002b: ldarg.0 + IL_002c: ldflda valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 Test/testTask@4::Data + IL_0031: ldflda valuetype [runtime]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1 valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1::MethodBuilder + IL_0036: ldarg.0 + IL_0037: ldflda valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 Test/testTask@4::Data + IL_003c: ldfld !0 valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1::Result + IL_0041: call instance void valuetype [netstandard]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1::SetResult(!0) + IL_0046: leave.s IL_0056 + + IL_0048: leave.s IL_0056 + + } + catch [runtime]System.Object + { + IL_004a: castclass [runtime]System.Exception + IL_004f: stloc.s V_6 + IL_0051: ldloc.s V_6 + IL_0053: stloc.1 + IL_0054: leave.s IL_0056 + + } + IL_0056: ldloc.1 + IL_0057: stloc.s V_7 + IL_0059: ldloc.s V_7 + IL_005b: brtrue.s IL_005e + + IL_005d: ret + + IL_005e: ldarg.0 + IL_005f: ldflda valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 Test/testTask@4::Data + IL_0064: ldflda valuetype [runtime]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1 valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1::MethodBuilder + IL_0069: ldloc.s V_7 + IL_006b: call instance void valuetype [netstandard]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1::SetException(class [netstandard]System.Exception) + IL_0070: ret + } """ ])) @@ -202,21 +210,24 @@ let testTask(t: Task) = task { let! res = t in return res+1 } MoveNext() cil managed { .override [runtime]System.Runtime.CompilerServices.IAsyncStateMachine::MoveNext - + .maxstack 5 .locals init (int32 V_0, class [runtime]System.Exception V_1, bool V_2, - class [runtime]System.Threading.Tasks.Task`1 V_3, - bool V_4, - bool V_5, - int32 V_6, - int32 V_7, + class [FSharp.Core]Microsoft.FSharp.Control.TaskBuilderBase V_3, + class [FSharp.Core]Microsoft.FSharp.Control.TaskBuilderBase V_4, + class [runtime]System.Threading.Tasks.Task`1 V_5, + bool V_6, + bool V_7, int32 V_8, int32 V_9, - valuetype [runtime]System.Runtime.CompilerServices.TaskAwaiter`1 V_10, - class [runtime]System.Exception V_11, - class [runtime]System.Exception V_12) + int32 V_10, + class [FSharp.Core]Microsoft.FSharp.Control.TaskBuilderBase V_11, + int32 V_12, + valuetype [runtime]System.Runtime.CompilerServices.TaskAwaiter`1 V_13, + class [runtime]System.Exception V_14, + class [runtime]System.Exception V_15) IL_0000: ldarg.0 IL_0001: ldfld int32 Test/testTask@4::ResumptionPoint IL_0006: stloc.0 @@ -226,13 +237,13 @@ let testTask(t: Task) = task { let! res = t in return res+1 } IL_000a: switch ( IL_0015) IL_0013: br.s IL_0018 - + IL_0015: nop IL_0016: br.s IL_001b - + IL_0018: nop IL_0019: br.s IL_001b - + .try { IL_001b: ldloc.0 @@ -241,130 +252,139 @@ let testTask(t: Task) = task { let! res = t in return res+1 } IL_001e: switch ( IL_0029) IL_0027: br.s IL_002c - + IL_0029: nop - IL_002a: br.s IL_0057 - + IL_002a: br.s IL_0068 + IL_002c: nop IL_002d: br.s IL_002f - + IL_002f: ldarg.0 - IL_0030: ldfld class [runtime]System.Threading.Tasks.Task`1 Test/testTask@4::t + IL_0030: ldfld class [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder Test/testTask@4::builder@ IL_0035: stloc.3 IL_0036: ldarg.0 - IL_0037: ldloc.3 - IL_0038: callvirt instance valuetype [netstandard]System.Runtime.CompilerServices.TaskAwaiter`1 class [netstandard]System.Threading.Tasks.Task`1::GetAwaiter() - IL_003d: stfld valuetype [runtime]System.Runtime.CompilerServices.TaskAwaiter`1 Test/testTask@4::awaiter - IL_0042: ldc.i4.1 - IL_0043: stloc.s V_4 - IL_0045: ldarg.0 - IL_0046: ldflda valuetype [runtime]System.Runtime.CompilerServices.TaskAwaiter`1 Test/testTask@4::awaiter - IL_004b: call instance bool valuetype [netstandard]System.Runtime.CompilerServices.TaskAwaiter`1::get_IsCompleted() - IL_0050: brfalse.s IL_0054 - - IL_0052: br.s IL_006d - - IL_0054: ldc.i4.0 - IL_0055: brfalse.s IL_005b - - IL_0057: ldc.i4.1 - IL_0058: nop - IL_0059: br.s IL_0064 - - IL_005b: ldarg.0 - IL_005c: ldc.i4.1 - IL_005d: stfld int32 Test/testTask@4::ResumptionPoint - IL_0062: ldc.i4.0 - IL_0063: nop - IL_0064: stloc.s V_5 - IL_0066: ldloc.s V_5 - IL_0068: stloc.s V_4 - IL_006a: nop - IL_006b: br.s IL_006e - - IL_006d: nop - IL_006e: ldloc.s V_4 - IL_0070: brfalse.s IL_009e - - IL_0072: ldarg.0 - IL_0073: ldflda valuetype [runtime]System.Runtime.CompilerServices.TaskAwaiter`1 Test/testTask@4::awaiter - IL_0078: call instance !0 valuetype [netstandard]System.Runtime.CompilerServices.TaskAwaiter`1::GetResult() - IL_007d: stloc.s V_6 + IL_0037: ldfld class [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder Test/testTask@4::builder@ + IL_003c: stloc.s V_4 + IL_003e: ldarg.0 + IL_003f: ldfld class [runtime]System.Threading.Tasks.Task`1 Test/testTask@4::t + IL_0044: stloc.s V_5 + IL_0046: ldarg.0 + IL_0047: ldloc.s V_5 + IL_0049: callvirt instance valuetype [netstandard]System.Runtime.CompilerServices.TaskAwaiter`1 class [netstandard]System.Threading.Tasks.Task`1::GetAwaiter() + IL_004e: stfld valuetype [runtime]System.Runtime.CompilerServices.TaskAwaiter`1 Test/testTask@4::awaiter + IL_0053: ldc.i4.1 + IL_0054: stloc.s V_6 + IL_0056: ldarg.0 + IL_0057: ldflda valuetype [runtime]System.Runtime.CompilerServices.TaskAwaiter`1 Test/testTask@4::awaiter + IL_005c: call instance bool valuetype [netstandard]System.Runtime.CompilerServices.TaskAwaiter`1::get_IsCompleted() + IL_0061: brfalse.s IL_0065 + + IL_0063: br.s IL_007e + + IL_0065: ldc.i4.0 + IL_0066: brfalse.s IL_006c + + IL_0068: ldc.i4.1 + IL_0069: nop + IL_006a: br.s IL_0075 + + IL_006c: ldarg.0 + IL_006d: ldc.i4.1 + IL_006e: stfld int32 Test/testTask@4::ResumptionPoint + IL_0073: ldc.i4.0 + IL_0074: nop + IL_0075: stloc.s V_7 + IL_0077: ldloc.s V_7 + IL_0079: stloc.s V_6 + IL_007b: nop + IL_007c: br.s IL_007f + + IL_007e: nop IL_007f: ldloc.s V_6 - IL_0081: stloc.s V_7 - IL_0083: ldloc.s V_7 - IL_0085: stloc.s V_8 - IL_0087: ldloc.s V_8 - IL_0089: ldc.i4.1 - IL_008a: add - IL_008b: stloc.s V_9 - IL_008d: ldarg.0 - IL_008e: ldflda valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 Test/testTask@4::Data - IL_0093: ldloc.s V_9 - IL_0095: stfld !0 valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1::Result - IL_009a: ldc.i4.1 - IL_009b: nop - IL_009c: br.s IL_00b7 - - IL_009e: ldarg.0 - IL_009f: ldflda valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 Test/testTask@4::Data - IL_00a4: ldflda valuetype [runtime]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1 valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1::MethodBuilder - IL_00a9: ldarg.0 - IL_00aa: ldflda valuetype [runtime]System.Runtime.CompilerServices.TaskAwaiter`1 Test/testTask@4::awaiter - IL_00af: ldarg.0 - IL_00b0: call instance void valuetype [netstandard]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1::AwaitUnsafeOnCompleted,valuetype Test/testTask@4>(!!0&, - !!1&) - IL_00b5: ldc.i4.0 - IL_00b6: nop - IL_00b7: brfalse.s IL_00c5 - - IL_00b9: ldarg.0 - IL_00ba: ldloc.s V_10 - IL_00bc: stfld valuetype [runtime]System.Runtime.CompilerServices.TaskAwaiter`1 Test/testTask@4::awaiter - IL_00c1: ldc.i4.1 - IL_00c2: nop - IL_00c3: br.s IL_00c7 - - IL_00c5: ldc.i4.0 - IL_00c6: nop - IL_00c7: stloc.2 - IL_00c8: ldloc.2 - IL_00c9: brfalse.s IL_00e8 - - IL_00cb: ldarg.0 - IL_00cc: ldflda valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 Test/testTask@4::Data - IL_00d1: ldflda valuetype [runtime]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1 valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1::MethodBuilder - IL_00d6: ldarg.0 - IL_00d7: ldflda valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 Test/testTask@4::Data - IL_00dc: ldfld !0 valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1::Result - IL_00e1: call instance void valuetype [netstandard]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1::SetResult(!0) - IL_00e6: leave.s IL_00f6 - - IL_00e8: leave.s IL_00f6 - + IL_0081: brfalse.s IL_00b7 + + IL_0083: ldarg.0 + IL_0084: ldflda valuetype [runtime]System.Runtime.CompilerServices.TaskAwaiter`1 Test/testTask@4::awaiter + IL_0089: call instance !0 valuetype [netstandard]System.Runtime.CompilerServices.TaskAwaiter`1::GetResult() + IL_008e: stloc.s V_8 + IL_0090: ldloc.s V_8 + IL_0092: stloc.s V_9 + IL_0094: ldloc.s V_9 + IL_0096: stloc.s V_10 + IL_0098: ldarg.0 + IL_0099: ldfld class [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder Test/testTask@4::builder@ + IL_009e: stloc.s V_11 + IL_00a0: ldloc.s V_10 + IL_00a2: ldc.i4.1 + IL_00a3: add + IL_00a4: stloc.s V_12 + IL_00a6: ldarg.0 + IL_00a7: ldflda valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 Test/testTask@4::Data + IL_00ac: ldloc.s V_12 + IL_00ae: stfld !0 valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1::Result + IL_00b3: ldc.i4.1 + IL_00b4: nop + IL_00b5: br.s IL_00d0 + + IL_00b7: ldarg.0 + IL_00b8: ldflda valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 Test/testTask@4::Data + IL_00bd: ldflda valuetype [runtime]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1 valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1::MethodBuilder + IL_00c2: ldarg.0 + IL_00c3: ldflda valuetype [runtime]System.Runtime.CompilerServices.TaskAwaiter`1 Test/testTask@4::awaiter + IL_00c8: ldarg.0 + IL_00c9: call instance void valuetype [netstandard]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1::AwaitUnsafeOnCompleted,valuetype Test/testTask@4>(!!0&, + !!1&) + IL_00ce: ldc.i4.0 + IL_00cf: nop + IL_00d0: brfalse.s IL_00de + + IL_00d2: ldarg.0 + IL_00d3: ldloc.s V_13 + IL_00d5: stfld valuetype [runtime]System.Runtime.CompilerServices.TaskAwaiter`1 Test/testTask@4::awaiter + IL_00da: ldc.i4.1 + IL_00db: nop + IL_00dc: br.s IL_00e0 + + IL_00de: ldc.i4.0 + IL_00df: nop + IL_00e0: stloc.2 + IL_00e1: ldloc.2 + IL_00e2: brfalse.s IL_0101 + + IL_00e4: ldarg.0 + IL_00e5: ldflda valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 Test/testTask@4::Data + IL_00ea: ldflda valuetype [runtime]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1 valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1::MethodBuilder + IL_00ef: ldarg.0 + IL_00f0: ldflda valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 Test/testTask@4::Data + IL_00f5: ldfld !0 valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1::Result + IL_00fa: call instance void valuetype [netstandard]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1::SetResult(!0) + IL_00ff: leave.s IL_010f + + IL_0101: leave.s IL_010f + } catch [runtime]System.Object { - IL_00ea: castclass [runtime]System.Exception - IL_00ef: stloc.s V_11 - IL_00f1: ldloc.s V_11 - IL_00f3: stloc.1 - IL_00f4: leave.s IL_00f6 - + IL_0103: castclass [runtime]System.Exception + IL_0108: stloc.s V_14 + IL_010a: ldloc.s V_14 + IL_010c: stloc.1 + IL_010d: leave.s IL_010f + } - IL_00f6: ldloc.1 - IL_00f7: stloc.s V_12 - IL_00f9: ldloc.s V_12 - IL_00fb: brtrue.s IL_00fe - - IL_00fd: ret - - IL_00fe: ldarg.0 - IL_00ff: ldflda valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 Test/testTask@4::Data - IL_0104: ldflda valuetype [runtime]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1 valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1::MethodBuilder - IL_0109: ldloc.s V_12 - IL_010b: call instance void valuetype [netstandard]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1::SetException(class [netstandard]System.Exception) - IL_0110: ret + IL_010f: ldloc.1 + IL_0110: stloc.s V_15 + IL_0112: ldloc.s V_15 + IL_0114: brtrue.s IL_0117 + + IL_0116: ret + + IL_0117: ldarg.0 + IL_0118: ldflda valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 Test/testTask@4::Data + IL_011d: ldflda valuetype [runtime]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1 valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1::MethodBuilder + IL_0122: ldloc.s V_15 + IL_0124: call instance void valuetype [netstandard]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1::SetException(class [netstandard]System.Exception) + IL_0129: ret } """ ])) @@ -495,102 +515,118 @@ let testTask() = task { try 1+1 finally System.Console.WriteLine("finally") } MoveNext() cil managed { .override [runtime]System.Runtime.CompilerServices.IAsyncStateMachine::MoveNext - + .maxstack 4 .locals init (int32 V_0, class [runtime]System.Exception V_1, bool V_2, - bool V_3, - bool V_4, - class [runtime]System.Exception V_5, + class [FSharp.Core]Microsoft.FSharp.Control.TaskBuilderBase V_3, + class [FSharp.Core]Microsoft.FSharp.Control.TaskBuilderBase V_4, + bool V_5, bool V_6, - bool V_7, - class [runtime]System.Exception V_8, - class [runtime]System.Exception V_9) + class [FSharp.Core]Microsoft.FSharp.Control.TaskBuilderBase V_7, + class [FSharp.Core]Microsoft.FSharp.Control.TaskBuilderBase V_8, + class [runtime]System.Exception V_9, + bool V_10, + bool V_11, + class [runtime]System.Exception V_12, + class [runtime]System.Exception V_13) IL_0000: ldarg.0 IL_0001: ldfld int32 Test/testTask@4::ResumptionPoint IL_0006: stloc.0 .try { - IL_0007: ldc.i4.0 - IL_0008: stloc.3 + IL_0007: ldarg.0 + IL_0008: ldfld class [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder Test/testTask@4::builder@ + IL_000d: stloc.3 + IL_000e: ldarg.0 + IL_000f: ldfld class [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder Test/testTask@4::builder@ + IL_0014: stloc.s V_4 + IL_0016: ldc.i4.0 + IL_0017: stloc.s V_5 .try { - IL_0009: nop - IL_000a: ldc.i4.1 - IL_000b: stloc.s V_4 - IL_000d: ldloc.s V_4 - IL_000f: stloc.3 - IL_0010: leave.s IL_0032 + IL_0019: ldarg.0 + IL_001a: ldfld class [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder Test/testTask@4::builder@ + IL_001f: stloc.s V_7 + IL_0021: nop + IL_0022: ldarg.0 + IL_0023: ldfld class [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder Test/testTask@4::builder@ + IL_0028: stloc.s V_8 + IL_002a: ldc.i4.1 + IL_002b: stloc.s V_6 + IL_002d: ldloc.s V_6 + IL_002f: stloc.s V_5 + IL_0031: leave.s IL_0053 } catch [runtime]System.Object { - IL_0012: castclass [runtime]System.Exception - IL_0017: stloc.s V_5 - IL_0019: nop - IL_001a: ldstr "finally" - IL_001f: call void [runtime]System.Console::WriteLine(string) - IL_0024: ldc.i4.1 - IL_0025: stloc.s V_6 - IL_0027: rethrow - IL_0029: ldnull - IL_002a: unbox.any [FSharp.Core]Microsoft.FSharp.Core.Unit - IL_002f: pop - IL_0030: leave.s IL_0032 + IL_0033: castclass [runtime]System.Exception + IL_0038: stloc.s V_9 + IL_003a: nop + IL_003b: ldstr "finally" + IL_0040: call void [runtime]System.Console::WriteLine(string) + IL_0045: ldc.i4.1 + IL_0046: stloc.s V_10 + IL_0048: rethrow + IL_004a: ldnull + IL_004b: unbox.any [FSharp.Core]Microsoft.FSharp.Core.Unit + IL_0050: pop + IL_0051: leave.s IL_0053 } - IL_0032: ldloc.3 - IL_0033: brfalse.s IL_0046 - - IL_0035: nop - IL_0036: ldstr "finally" - IL_003b: call void [runtime]System.Console::WriteLine(string) - IL_0040: ldc.i4.1 - IL_0041: stloc.s V_7 - IL_0043: nop - IL_0044: br.s IL_0047 - - IL_0046: nop - IL_0047: ldloc.3 - IL_0048: stloc.2 - IL_0049: ldloc.2 - IL_004a: brfalse.s IL_0069 - - IL_004c: ldarg.0 - IL_004d: ldflda valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 Test/testTask@4::Data - IL_0052: ldflda valuetype [runtime]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1 valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1::MethodBuilder - IL_0057: ldarg.0 - IL_0058: ldflda valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 Test/testTask@4::Data - IL_005d: ldfld !0 valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1::Result - IL_0062: call instance void valuetype [netstandard]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1::SetResult(!0) - IL_0067: leave.s IL_0077 - - IL_0069: leave.s IL_0077 + IL_0053: ldloc.s V_5 + IL_0055: brfalse.s IL_0068 + + IL_0057: nop + IL_0058: ldstr "finally" + IL_005d: call void [runtime]System.Console::WriteLine(string) + IL_0062: ldc.i4.1 + IL_0063: stloc.s V_11 + IL_0065: nop + IL_0066: br.s IL_0069 + + IL_0068: nop + IL_0069: ldloc.s V_5 + IL_006b: stloc.2 + IL_006c: ldloc.2 + IL_006d: brfalse.s IL_008c + + IL_006f: ldarg.0 + IL_0070: ldflda valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 Test/testTask@4::Data + IL_0075: ldflda valuetype [runtime]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1 valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1::MethodBuilder + IL_007a: ldarg.0 + IL_007b: ldflda valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 Test/testTask@4::Data + IL_0080: ldfld !0 valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1::Result + IL_0085: call instance void valuetype [netstandard]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1::SetResult(!0) + IL_008a: leave.s IL_009a + + IL_008c: leave.s IL_009a } catch [runtime]System.Object { - IL_006b: castclass [runtime]System.Exception - IL_0070: stloc.s V_8 - IL_0072: ldloc.s V_8 - IL_0074: stloc.1 - IL_0075: leave.s IL_0077 + IL_008e: castclass [runtime]System.Exception + IL_0093: stloc.s V_12 + IL_0095: ldloc.s V_12 + IL_0097: stloc.1 + IL_0098: leave.s IL_009a } - IL_0077: ldloc.1 - IL_0078: stloc.s V_9 - IL_007a: ldloc.s V_9 - IL_007c: brtrue.s IL_007f - - IL_007e: ret - - IL_007f: ldarg.0 - IL_0080: ldflda valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 Test/testTask@4::Data - IL_0085: ldflda valuetype [runtime]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1 valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1::MethodBuilder - IL_008a: ldloc.s V_9 - IL_008c: call instance void valuetype [netstandard]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1::SetException(class [netstandard]System.Exception) - IL_0091: ret + IL_009a: ldloc.1 + IL_009b: stloc.s V_13 + IL_009d: ldloc.s V_13 + IL_009f: brtrue.s IL_00a2 + + IL_00a1: ret + + IL_00a2: ldarg.0 + IL_00a3: ldflda valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 Test/testTask@4::Data + IL_00a8: ldflda valuetype [runtime]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1 valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1::MethodBuilder + IL_00ad: ldloc.s V_13 + IL_00af: call instance void valuetype [netstandard]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1::SetException(class [netstandard]System.Exception) + IL_00b4: ret } """ ])) @@ -725,105 +761,125 @@ let testTask() = task { try 1 with e -> System.Console.WriteLine("with"); 2 } MoveNext() cil managed { .override [runtime]System.Runtime.CompilerServices.IAsyncStateMachine::MoveNext - + .maxstack 4 .locals init (int32 V_0, class [runtime]System.Exception V_1, bool V_2, - bool V_3, - bool V_4, - class [runtime]System.Exception V_5, + class [FSharp.Core]Microsoft.FSharp.Control.TaskBuilderBase V_3, + class [FSharp.Core]Microsoft.FSharp.Control.TaskBuilderBase V_4, + bool V_5, bool V_6, class [runtime]System.Exception V_7, - class [runtime]System.Exception V_8, - class [runtime]System.Exception V_9, - class [runtime]System.Exception V_10, - class [runtime]System.Exception V_11) + bool V_8, + class [FSharp.Core]Microsoft.FSharp.Control.TaskBuilderBase V_9, + class [FSharp.Core]Microsoft.FSharp.Control.TaskBuilderBase V_10, + class [runtime]System.Exception V_11, + class [runtime]System.Exception V_12, + class [runtime]System.Exception V_13, + class [FSharp.Core]Microsoft.FSharp.Control.TaskBuilderBase V_14, + class [runtime]System.Exception V_15, + class [runtime]System.Exception V_16) IL_0000: ldarg.0 IL_0001: ldfld int32 Test/testTask@4::ResumptionPoint IL_0006: stloc.0 .try { - IL_0007: ldc.i4.0 - IL_0008: stloc.3 - IL_0009: ldc.i4.0 - IL_000a: stloc.s V_4 - IL_000c: ldnull - IL_000d: stloc.s V_5 + IL_0007: ldarg.0 + IL_0008: ldfld class [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder Test/testTask@4::builder@ + IL_000d: stloc.3 + IL_000e: ldarg.0 + IL_000f: ldfld class [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder Test/testTask@4::builder@ + IL_0014: stloc.s V_4 + IL_0016: ldc.i4.0 + IL_0017: stloc.s V_5 + IL_0019: ldc.i4.0 + IL_001a: stloc.s V_6 + IL_001c: ldnull + IL_001d: stloc.s V_7 .try { - IL_000f: nop - IL_0010: ldc.i4.1 - IL_0011: stloc.s V_6 - IL_0013: ldloc.s V_6 - IL_0015: stloc.3 - IL_0016: leave.s IL_0028 + IL_001f: ldarg.0 + IL_0020: ldfld class [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder Test/testTask@4::builder@ + IL_0025: stloc.s V_9 + IL_0027: nop + IL_0028: ldarg.0 + IL_0029: ldfld class [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder Test/testTask@4::builder@ + IL_002e: stloc.s V_10 + IL_0030: ldc.i4.1 + IL_0031: stloc.s V_8 + IL_0033: ldloc.s V_8 + IL_0035: stloc.s V_5 + IL_0037: leave.s IL_0049 } catch [runtime]System.Object { - IL_0018: castclass [runtime]System.Exception - IL_001d: stloc.s V_7 - IL_001f: ldc.i4.1 - IL_0020: stloc.s V_4 - IL_0022: ldloc.s V_7 - IL_0024: stloc.s V_5 - IL_0026: leave.s IL_0028 + IL_0039: castclass [runtime]System.Exception + IL_003e: stloc.s V_11 + IL_0040: ldc.i4.1 + IL_0041: stloc.s V_6 + IL_0043: ldloc.s V_11 + IL_0045: stloc.s V_7 + IL_0047: leave.s IL_0049 } - IL_0028: ldloc.s V_4 - IL_002a: brfalse.s IL_0042 - - IL_002c: ldloc.s V_5 - IL_002e: stloc.s V_8 - IL_0030: ldloc.s V_8 - IL_0032: stloc.s V_9 - IL_0034: ldstr "with" - IL_0039: call void [runtime]System.Console::WriteLine(string) - IL_003e: ldc.i4.1 - IL_003f: nop - IL_0040: br.s IL_0044 - - IL_0042: ldloc.3 - IL_0043: nop - IL_0044: stloc.2 - IL_0045: ldloc.2 - IL_0046: brfalse.s IL_0065 - - IL_0048: ldarg.0 - IL_0049: ldflda valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 Test/testTask@4::Data - IL_004e: ldflda valuetype [runtime]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1 valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1::MethodBuilder - IL_0053: ldarg.0 - IL_0054: ldflda valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 Test/testTask@4::Data - IL_0059: ldfld !0 valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1::Result - IL_005e: call instance void valuetype [netstandard]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1::SetResult(!0) - IL_0063: leave.s IL_0073 - - IL_0065: leave.s IL_0073 + IL_0049: ldloc.s V_6 + IL_004b: brfalse.s IL_006b + + IL_004d: ldloc.s V_7 + IL_004f: stloc.s V_12 + IL_0051: ldloc.s V_12 + IL_0053: stloc.s V_13 + IL_0055: ldstr "with" + IL_005a: call void [runtime]System.Console::WriteLine(string) + IL_005f: ldarg.0 + IL_0060: ldfld class [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder Test/testTask@4::builder@ + IL_0065: stloc.s V_14 + IL_0067: ldc.i4.1 + IL_0068: nop + IL_0069: br.s IL_006e + + IL_006b: ldloc.s V_5 + IL_006d: nop + IL_006e: stloc.2 + IL_006f: ldloc.2 + IL_0070: brfalse.s IL_008f + + IL_0072: ldarg.0 + IL_0073: ldflda valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 Test/testTask@4::Data + IL_0078: ldflda valuetype [runtime]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1 valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1::MethodBuilder + IL_007d: ldarg.0 + IL_007e: ldflda valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 Test/testTask@4::Data + IL_0083: ldfld !0 valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1::Result + IL_0088: call instance void valuetype [netstandard]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1::SetResult(!0) + IL_008d: leave.s IL_009d + + IL_008f: leave.s IL_009d } catch [runtime]System.Object { - IL_0067: castclass [runtime]System.Exception - IL_006c: stloc.s V_10 - IL_006e: ldloc.s V_10 - IL_0070: stloc.1 - IL_0071: leave.s IL_0073 + IL_0091: castclass [runtime]System.Exception + IL_0096: stloc.s V_15 + IL_0098: ldloc.s V_15 + IL_009a: stloc.1 + IL_009b: leave.s IL_009d } - IL_0073: ldloc.1 - IL_0074: stloc.s V_11 - IL_0076: ldloc.s V_11 - IL_0078: brtrue.s IL_007b - - IL_007a: ret - - IL_007b: ldarg.0 - IL_007c: ldflda valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 Test/testTask@4::Data - IL_0081: ldflda valuetype [runtime]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1 valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1::MethodBuilder - IL_0086: ldloc.s V_11 - IL_0088: call instance void valuetype [netstandard]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1::SetException(class [netstandard]System.Exception) - IL_008d: ret + IL_009d: ldloc.1 + IL_009e: stloc.s V_16 + IL_00a0: ldloc.s V_16 + IL_00a2: brtrue.s IL_00a5 + + IL_00a4: ret + + IL_00a5: ldarg.0 + IL_00a6: ldflda valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 Test/testTask@4::Data + IL_00ab: ldflda valuetype [runtime]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1 valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1::MethodBuilder + IL_00b0: ldloc.s V_16 + IL_00b2: call instance void valuetype [netstandard]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1::SetException(class [netstandard]System.Exception) + IL_00b7: ret } """ ])) @@ -944,84 +1000,100 @@ let testTask() = task { while x > 4 do System.Console.WriteLine("loop") } MoveNext() cil managed { .override [runtime]System.Runtime.CompilerServices.IAsyncStateMachine::MoveNext - + .maxstack 4 .locals init (int32 V_0, class [runtime]System.Exception V_1, bool V_2, - bool V_3, - bool V_4, - class [runtime]System.Exception V_5, - class [runtime]System.Exception V_6) + class [FSharp.Core]Microsoft.FSharp.Control.TaskBuilderBase V_3, + class [FSharp.Core]Microsoft.FSharp.Control.TaskBuilderBase V_4, + bool V_5, + bool V_6, + class [FSharp.Core]Microsoft.FSharp.Control.TaskBuilderBase V_7, + class [FSharp.Core]Microsoft.FSharp.Control.TaskBuilderBase V_8, + class [runtime]System.Exception V_9, + class [runtime]System.Exception V_10) IL_0000: ldarg.0 IL_0001: ldfld int32 Test/testTask@5::ResumptionPoint IL_0006: stloc.0 .try { - IL_0007: ldc.i4.1 - IL_0008: stloc.3 - IL_0009: br.s IL_001d + IL_0007: ldarg.0 + IL_0008: ldfld class [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder Test/testTask@5::builder@ + IL_000d: stloc.3 + IL_000e: ldarg.0 + IL_000f: ldfld class [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder Test/testTask@5::builder@ + IL_0014: stloc.s V_4 + IL_0016: ldc.i4.1 + IL_0017: stloc.s V_5 + IL_0019: br.s IL_003e + + IL_001b: ldarg.0 + IL_001c: ldfld class [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder Test/testTask@5::builder@ + IL_0021: stloc.s V_7 + IL_0023: ldstr "loop" + IL_0028: call void [runtime]System.Console::WriteLine(string) + IL_002d: ldarg.0 + IL_002e: ldfld class [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder Test/testTask@5::builder@ + IL_0033: stloc.s V_8 + IL_0035: ldc.i4.1 + IL_0036: stloc.s V_6 + IL_0038: ldloc.s V_6 + IL_003a: stloc.s V_5 + IL_003c: ldc.i4.0 + IL_003d: stloc.0 + IL_003e: ldloc.s V_5 + IL_0040: brfalse.s IL_004d + + IL_0042: call int32 Test::get_x() + IL_0047: ldc.i4.4 + IL_0048: cgt + IL_004a: nop + IL_004b: br.s IL_004f + + IL_004d: ldc.i4.0 + IL_004e: nop + IL_004f: brtrue.s IL_001b + + IL_0051: ldloc.s V_5 + IL_0053: stloc.2 + IL_0054: ldloc.2 + IL_0055: brfalse.s IL_0074 - IL_000b: ldstr "loop" - IL_0010: call void [runtime]System.Console::WriteLine(string) - IL_0015: ldc.i4.1 - IL_0016: stloc.s V_4 - IL_0018: ldloc.s V_4 - IL_001a: stloc.3 - IL_001b: ldc.i4.0 - IL_001c: stloc.0 - IL_001d: ldloc.3 - IL_001e: brfalse.s IL_002b - - IL_0020: call int32 Test::get_x() - IL_0025: ldc.i4.4 - IL_0026: cgt - IL_0028: nop - IL_0029: br.s IL_002d - - IL_002b: ldc.i4.0 - IL_002c: nop - IL_002d: brtrue.s IL_000b - - IL_002f: ldloc.3 - IL_0030: stloc.2 - IL_0031: ldloc.2 - IL_0032: brfalse.s IL_0051 - - IL_0034: ldarg.0 - IL_0035: ldflda valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 Test/testTask@5::Data - IL_003a: ldflda valuetype [runtime]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1 valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1::MethodBuilder - IL_003f: ldarg.0 - IL_0040: ldflda valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 Test/testTask@5::Data - IL_0045: ldfld !0 valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1::Result - IL_004a: call instance void valuetype [netstandard]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1::SetResult(!0) - IL_004f: leave.s IL_005f + IL_0057: ldarg.0 + IL_0058: ldflda valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 Test/testTask@5::Data + IL_005d: ldflda valuetype [runtime]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1 valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1::MethodBuilder + IL_0062: ldarg.0 + IL_0063: ldflda valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 Test/testTask@5::Data + IL_0068: ldfld !0 valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1::Result + IL_006d: call instance void valuetype [netstandard]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1::SetResult(!0) + IL_0072: leave.s IL_0082 - IL_0051: leave.s IL_005f + IL_0074: leave.s IL_0082 } catch [runtime]System.Object { - IL_0053: castclass [runtime]System.Exception - IL_0058: stloc.s V_5 - IL_005a: ldloc.s V_5 - IL_005c: stloc.1 - IL_005d: leave.s IL_005f + IL_0076: castclass [runtime]System.Exception + IL_007b: stloc.s V_9 + IL_007d: ldloc.s V_9 + IL_007f: stloc.1 + IL_0080: leave.s IL_0082 } - IL_005f: ldloc.1 - IL_0060: stloc.s V_6 - IL_0062: ldloc.s V_6 - IL_0064: brtrue.s IL_0067 + IL_0082: ldloc.1 + IL_0083: stloc.s V_10 + IL_0085: ldloc.s V_10 + IL_0087: brtrue.s IL_008a - IL_0066: ret + IL_0089: ret - IL_0067: ldarg.0 - IL_0068: ldflda valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 Test/testTask@5::Data - IL_006d: ldflda valuetype [runtime]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1 valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1::MethodBuilder - IL_0072: ldloc.s V_6 - IL_0074: call instance void valuetype [netstandard]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1::SetException(class [netstandard]System.Exception) - IL_0079: ret + IL_008a: ldarg.0 + IL_008b: ldflda valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 Test/testTask@5::Data + IL_0090: ldflda valuetype [runtime]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1 valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1::MethodBuilder + IL_0095: ldloc.s V_10 + IL_0097: call instance void valuetype [netstandard]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1::SetException(class [netstandard]System.Exception) + IL_009c: ret } """ ])) @@ -1100,7 +1172,7 @@ type Generic1InGeneric1<'T>() = """, (fun verifier -> verifier.VerifyIL [ """ -.class public abstract auto ansi sealed Test + .class public abstract auto ansi sealed Test extends [runtime]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 ) @@ -1118,23 +1190,26 @@ type Generic1InGeneric1<'T>() = .field public valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 Data .field public int32 ResumptionPoint .field public class [runtime]System.Threading.Tasks.Task`1 computation + .field public class [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder builder@ .field public valuetype [runtime]System.Runtime.CompilerServices.TaskAwaiter`1 awaiter .method public strict virtual instance void MoveNext() cil managed { .override [runtime]System.Runtime.CompilerServices.IAsyncStateMachine::MoveNext - + .maxstack 5 .locals init (int32 V_0, class [runtime]System.Exception V_1, bool V_2, - class [runtime]System.Threading.Tasks.Task`1 V_3, - bool V_4, - bool V_5, - !A V_6, - !A V_7, - valuetype [runtime]System.Runtime.CompilerServices.TaskAwaiter`1 V_8, - class [runtime]System.Exception V_9, - class [runtime]System.Exception V_10) + class [FSharp.Core]Microsoft.FSharp.Control.TaskBuilderBase V_3, + class [FSharp.Core]Microsoft.FSharp.Control.TaskBuilderBase V_4, + class [runtime]System.Threading.Tasks.Task`1 V_5, + bool V_6, + bool V_7, + !A V_8, + !A V_9, + valuetype [runtime]System.Runtime.CompilerServices.TaskAwaiter`1 V_10, + class [runtime]System.Exception V_11, + class [runtime]System.Exception V_12) IL_0000: ldarg.0 IL_0001: ldfld int32 valuetype Test/Generic1InGeneric1`1/clo@7::ResumptionPoint IL_0006: stloc.0 @@ -1163,130 +1238,136 @@ type Generic1InGeneric1<'T>() = IL_0029: br.s IL_002e IL_002b: nop - IL_002c: br.s IL_0059 + IL_002c: br.s IL_006a IL_002e: nop IL_002f: br.s IL_0031 IL_0031: ldarg.0 - IL_0032: ldfld class [runtime]System.Threading.Tasks.Task`1 valuetype Test/Generic1InGeneric1`1/clo@7::computation + IL_0032: ldfld class [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder valuetype Test/Generic1InGeneric1`1/clo@7::builder@ IL_0037: stloc.3 IL_0038: ldarg.0 - IL_0039: ldloc.3 - IL_003a: callvirt instance valuetype [netstandard]System.Runtime.CompilerServices.TaskAwaiter`1 class [netstandard]System.Threading.Tasks.Task`1::GetAwaiter() - IL_003f: stfld valuetype [runtime]System.Runtime.CompilerServices.TaskAwaiter`1 valuetype Test/Generic1InGeneric1`1/clo@7::awaiter - IL_0044: ldc.i4.1 - IL_0045: stloc.s V_4 - IL_0047: ldarg.0 - IL_0048: ldflda valuetype [runtime]System.Runtime.CompilerServices.TaskAwaiter`1 valuetype Test/Generic1InGeneric1`1/clo@7::awaiter - IL_004d: call instance bool valuetype [netstandard]System.Runtime.CompilerServices.TaskAwaiter`1::get_IsCompleted() - IL_0052: brfalse.s IL_0056 - - IL_0054: br.s IL_006f - - IL_0056: ldc.i4.0 - IL_0057: brfalse.s IL_005d - - IL_0059: ldc.i4.1 - IL_005a: nop - IL_005b: br.s IL_0066 - - IL_005d: ldarg.0 - IL_005e: ldc.i4.1 - IL_005f: stfld int32 valuetype Test/Generic1InGeneric1`1/clo@7::ResumptionPoint - IL_0064: ldc.i4.0 - IL_0065: nop - IL_0066: stloc.s V_5 - IL_0068: ldloc.s V_5 - IL_006a: stloc.s V_4 - IL_006c: nop - IL_006d: br.s IL_0070 - - IL_006f: nop - IL_0070: ldloc.s V_4 - IL_0072: brfalse.s IL_0096 - - IL_0074: ldarg.0 - IL_0075: ldflda valuetype [runtime]System.Runtime.CompilerServices.TaskAwaiter`1 valuetype Test/Generic1InGeneric1`1/clo@7::awaiter - IL_007a: call instance !0 valuetype [netstandard]System.Runtime.CompilerServices.TaskAwaiter`1::GetResult() - IL_007f: stloc.s V_6 + IL_0039: ldfld class [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder valuetype Test/Generic1InGeneric1`1/clo@7::builder@ + IL_003e: stloc.s V_4 + IL_0040: ldarg.0 + IL_0041: ldfld class [runtime]System.Threading.Tasks.Task`1 valuetype Test/Generic1InGeneric1`1/clo@7::computation + IL_0046: stloc.s V_5 + IL_0048: ldarg.0 + IL_0049: ldloc.s V_5 + IL_004b: callvirt instance valuetype [netstandard]System.Runtime.CompilerServices.TaskAwaiter`1 class [netstandard]System.Threading.Tasks.Task`1::GetAwaiter() + IL_0050: stfld valuetype [runtime]System.Runtime.CompilerServices.TaskAwaiter`1 valuetype Test/Generic1InGeneric1`1/clo@7::awaiter + IL_0055: ldc.i4.1 + IL_0056: stloc.s V_6 + IL_0058: ldarg.0 + IL_0059: ldflda valuetype [runtime]System.Runtime.CompilerServices.TaskAwaiter`1 valuetype Test/Generic1InGeneric1`1/clo@7::awaiter + IL_005e: call instance bool valuetype [netstandard]System.Runtime.CompilerServices.TaskAwaiter`1::get_IsCompleted() + IL_0063: brfalse.s IL_0067 + + IL_0065: br.s IL_0080 + + IL_0067: ldc.i4.0 + IL_0068: brfalse.s IL_006e + + IL_006a: ldc.i4.1 + IL_006b: nop + IL_006c: br.s IL_0077 + + IL_006e: ldarg.0 + IL_006f: ldc.i4.1 + IL_0070: stfld int32 valuetype Test/Generic1InGeneric1`1/clo@7::ResumptionPoint + IL_0075: ldc.i4.0 + IL_0076: nop + IL_0077: stloc.s V_7 + IL_0079: ldloc.s V_7 + IL_007b: stloc.s V_6 + IL_007d: nop + IL_007e: br.s IL_0081 + + IL_0080: nop IL_0081: ldloc.s V_6 - IL_0083: stloc.s V_7 - IL_0085: ldarg.0 - IL_0086: ldflda valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 valuetype Test/Generic1InGeneric1`1/clo@7::Data - IL_008b: ldloc.s V_7 - IL_008d: stfld !0 valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1::Result - IL_0092: ldc.i4.1 - IL_0093: nop - IL_0094: br.s IL_00af + IL_0083: brfalse.s IL_00a7 + IL_0085: ldarg.0 + IL_0086: ldflda valuetype [runtime]System.Runtime.CompilerServices.TaskAwaiter`1 valuetype Test/Generic1InGeneric1`1/clo@7::awaiter + IL_008b: call instance !0 valuetype [netstandard]System.Runtime.CompilerServices.TaskAwaiter`1::GetResult() + IL_0090: stloc.s V_8 + IL_0092: ldloc.s V_8 + IL_0094: stloc.s V_9 IL_0096: ldarg.0 IL_0097: ldflda valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 valuetype Test/Generic1InGeneric1`1/clo@7::Data - IL_009c: ldflda valuetype [runtime]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1 valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1::MethodBuilder - IL_00a1: ldarg.0 - IL_00a2: ldflda valuetype [runtime]System.Runtime.CompilerServices.TaskAwaiter`1 valuetype Test/Generic1InGeneric1`1/clo@7::awaiter + IL_009c: ldloc.s V_9 + IL_009e: stfld !0 valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1::Result + IL_00a3: ldc.i4.1 + IL_00a4: nop + IL_00a5: br.s IL_00c0 + IL_00a7: ldarg.0 - IL_00a8: call instance void valuetype [netstandard]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1::AwaitUnsafeOnCompleted,valuetype Test/Generic1InGeneric1`1/clo@7>(!!0&, - !!1&) - IL_00ad: ldc.i4.0 - IL_00ae: nop - IL_00af: brfalse.s IL_00c5 - - IL_00b1: ldarg.0 - IL_00b2: ldloca.s V_8 - IL_00b4: initobj valuetype [runtime]System.Runtime.CompilerServices.TaskAwaiter`1 - IL_00ba: ldloc.s V_8 - IL_00bc: stfld valuetype [runtime]System.Runtime.CompilerServices.TaskAwaiter`1 valuetype Test/Generic1InGeneric1`1/clo@7::awaiter - IL_00c1: ldc.i4.1 - IL_00c2: nop - IL_00c3: br.s IL_00c7 - - IL_00c5: ldc.i4.0 - IL_00c6: nop - IL_00c7: stloc.2 - IL_00c8: ldloc.2 - IL_00c9: brfalse.s IL_00e8 - - IL_00cb: ldarg.0 - IL_00cc: ldflda valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 valuetype Test/Generic1InGeneric1`1/clo@7::Data - IL_00d1: ldflda valuetype [runtime]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1 valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1::MethodBuilder - IL_00d6: ldarg.0 - IL_00d7: ldflda valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 valuetype Test/Generic1InGeneric1`1/clo@7::Data - IL_00dc: ldfld !0 valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1::Result - IL_00e1: call instance void valuetype [netstandard]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1::SetResult(!0) - IL_00e6: leave.s IL_00f6 - - IL_00e8: leave.s IL_00f6 + IL_00a8: ldflda valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 valuetype Test/Generic1InGeneric1`1/clo@7::Data + IL_00ad: ldflda valuetype [runtime]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1 valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1::MethodBuilder + IL_00b2: ldarg.0 + IL_00b3: ldflda valuetype [runtime]System.Runtime.CompilerServices.TaskAwaiter`1 valuetype Test/Generic1InGeneric1`1/clo@7::awaiter + IL_00b8: ldarg.0 + IL_00b9: call instance void valuetype [netstandard]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1::AwaitUnsafeOnCompleted,valuetype Test/Generic1InGeneric1`1/clo@7>(!!0&, + !!1&) + IL_00be: ldc.i4.0 + IL_00bf: nop + IL_00c0: brfalse.s IL_00d6 + + IL_00c2: ldarg.0 + IL_00c3: ldloca.s V_10 + IL_00c5: initobj valuetype [runtime]System.Runtime.CompilerServices.TaskAwaiter`1 + IL_00cb: ldloc.s V_10 + IL_00cd: stfld valuetype [runtime]System.Runtime.CompilerServices.TaskAwaiter`1 valuetype Test/Generic1InGeneric1`1/clo@7::awaiter + IL_00d2: ldc.i4.1 + IL_00d3: nop + IL_00d4: br.s IL_00d8 + + IL_00d6: ldc.i4.0 + IL_00d7: nop + IL_00d8: stloc.2 + IL_00d9: ldloc.2 + IL_00da: brfalse.s IL_00f9 + + IL_00dc: ldarg.0 + IL_00dd: ldflda valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 valuetype Test/Generic1InGeneric1`1/clo@7::Data + IL_00e2: ldflda valuetype [runtime]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1 valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1::MethodBuilder + IL_00e7: ldarg.0 + IL_00e8: ldflda valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 valuetype Test/Generic1InGeneric1`1/clo@7::Data + IL_00ed: ldfld !0 valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1::Result + IL_00f2: call instance void valuetype [netstandard]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1::SetResult(!0) + IL_00f7: leave.s IL_0107 + + IL_00f9: leave.s IL_0107 } catch [runtime]System.Object { - IL_00ea: castclass [runtime]System.Exception - IL_00ef: stloc.s V_9 - IL_00f1: ldloc.s V_9 - IL_00f3: stloc.1 - IL_00f4: leave.s IL_00f6 + IL_00fb: castclass [runtime]System.Exception + IL_0100: stloc.s V_11 + IL_0102: ldloc.s V_11 + IL_0104: stloc.1 + IL_0105: leave.s IL_0107 } - IL_00f6: ldloc.1 - IL_00f7: stloc.s V_10 - IL_00f9: ldloc.s V_10 - IL_00fb: brtrue.s IL_00fe - - IL_00fd: ret - - IL_00fe: ldarg.0 - IL_00ff: ldflda valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 valuetype Test/Generic1InGeneric1`1/clo@7::Data - IL_0104: ldflda valuetype [runtime]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1 valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1::MethodBuilder - IL_0109: ldloc.s V_10 - IL_010b: call instance void valuetype [netstandard]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1::SetException(class [netstandard]System.Exception) - IL_0110: ret + IL_0107: ldloc.1 + IL_0108: stloc.s V_12 + IL_010a: ldloc.s V_12 + IL_010c: brtrue.s IL_010f + + IL_010e: ret + + IL_010f: ldarg.0 + IL_0110: ldflda valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 valuetype Test/Generic1InGeneric1`1/clo@7::Data + IL_0115: ldflda valuetype [runtime]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1 valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1::MethodBuilder + IL_011a: ldloc.s V_12 + IL_011c: call instance void valuetype [netstandard]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1::SetException(class [netstandard]System.Exception) + IL_0121: ret } .method public strict virtual instance void SetStateMachine(class [runtime]System.Runtime.CompilerServices.IAsyncStateMachine state) cil managed { .override [runtime]System.Runtime.CompilerServices.IAsyncStateMachine::SetStateMachine - + .maxstack 8 IL_0000: ldarg.0 IL_0001: ldflda valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 valuetype Test/Generic1InGeneric1`1/clo@7::Data @@ -1299,7 +1380,7 @@ type Generic1InGeneric1<'T>() = .method public strict virtual instance int32 get_ResumptionPoint() cil managed { .override method instance int32 class [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.IResumableStateMachine`1>::get_ResumptionPoint() - + .maxstack 8 IL_0000: ldarg.0 IL_0001: ldfld int32 valuetype Test/Generic1InGeneric1`1/clo@7::ResumptionPoint @@ -1309,7 +1390,7 @@ type Generic1InGeneric1<'T>() = .method public strict virtual instance valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 get_Data() cil managed { .override method instance !0 class [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.IResumableStateMachine`1>::get_Data() - + .maxstack 8 IL_0000: ldarg.0 IL_0001: ldfld valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 valuetype Test/Generic1InGeneric1`1/clo@7::Data @@ -1319,7 +1400,7 @@ type Generic1InGeneric1<'T>() = .method public strict virtual instance void set_Data(valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 'value') cil managed { .override method instance void class [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.IResumableStateMachine`1>::set_Data(!0) - + .maxstack 8 IL_0000: ldarg.0 IL_0001: ldarg.1 @@ -1331,7 +1412,7 @@ type Generic1InGeneric1<'T>() = .method public specialname rtspecialname instance void .ctor() cil managed { - + .maxstack 8 IL_0000: ldarg.0 IL_0001: callvirt instance void [runtime]System.Object::.ctor() @@ -1342,7 +1423,7 @@ type Generic1InGeneric1<'T>() = .method public hidebysig instance class [runtime]System.Threading.Tasks.Task`1 Run() cil managed { - + .maxstack 8 IL_0000: ldarg.0 IL_0001: ldc.i4.3 @@ -1354,35 +1435,49 @@ type Generic1InGeneric1<'T>() = .method assembly hidebysig instance class [runtime]System.Threading.Tasks.Task`1 run(class [runtime]System.Threading.Tasks.Task`1 computation) cil managed { .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - + .maxstack 4 - .locals init (valuetype Test/Generic1InGeneric1`1/clo@7 V_0, - valuetype Test/Generic1InGeneric1`1/clo@7& V_1) - IL_0000: ldloca.s V_0 - IL_0002: initobj valuetype Test/Generic1InGeneric1`1/clo@7 - IL_0008: ldloca.s V_0 - IL_000a: stloc.1 - IL_000b: ldloc.1 - IL_000c: ldarg.1 - IL_000d: stfld class [runtime]System.Threading.Tasks.Task`1 valuetype Test/Generic1InGeneric1`1/clo@7::computation - IL_0012: ldloc.1 - IL_0013: ldflda valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 valuetype Test/Generic1InGeneric1`1/clo@7::Data - IL_0018: call valuetype [netstandard]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1 valuetype [netstandard]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1::Create() - IL_001d: stfld valuetype [runtime]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1 valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1::MethodBuilder - IL_0022: ldloc.1 - IL_0023: ldflda valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 valuetype Test/Generic1InGeneric1`1/clo@7::Data - IL_0028: ldflda valuetype [runtime]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1 valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1::MethodBuilder - IL_002d: ldloc.1 - IL_002e: call instance void valuetype [netstandard]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1::Start>(!!0&) - IL_0033: ldloc.1 - IL_0034: ldflda valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 valuetype Test/Generic1InGeneric1`1/clo@7::Data - IL_0039: ldflda valuetype [runtime]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1 valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1::MethodBuilder - IL_003e: call instance class [netstandard]System.Threading.Tasks.Task`1 valuetype [netstandard]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1::get_Task() - IL_0043: ret + .locals init (class [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder V_0, + class [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder V_1, + valuetype Test/Generic1InGeneric1`1/clo@7 V_2, + valuetype Test/Generic1InGeneric1`1/clo@7& V_3) + IL_0000: call class [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder [FSharp.Core]Microsoft.FSharp.Control.TaskBuilderModule::get_task() + IL_0005: stloc.0 + IL_0006: ldloc.0 + IL_0007: stloc.1 + IL_0008: ldloca.s V_2 + IL_000a: initobj valuetype Test/Generic1InGeneric1`1/clo@7 + IL_0010: ldloca.s V_2 + IL_0012: stloc.3 + IL_0013: ldloc.3 + IL_0014: ldarg.1 + IL_0015: stfld class [runtime]System.Threading.Tasks.Task`1 valuetype Test/Generic1InGeneric1`1/clo@7::computation + IL_001a: ldloc.3 + IL_001b: ldloc.0 + IL_001c: stfld class [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder valuetype Test/Generic1InGeneric1`1/clo@7::builder@ + IL_0021: ldloc.3 + IL_0022: ldflda valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 valuetype Test/Generic1InGeneric1`1/clo@7::Data + IL_0027: call valuetype [netstandard]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1 valuetype [netstandard]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1::Create() + IL_002c: stfld valuetype [runtime]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1 valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1::MethodBuilder + IL_0031: ldloc.3 + IL_0032: ldflda valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 valuetype Test/Generic1InGeneric1`1/clo@7::Data + IL_0037: ldflda valuetype [runtime]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1 valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1::MethodBuilder + IL_003c: ldloc.3 + IL_003d: call instance void valuetype [netstandard]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1::Start>(!!0&) + IL_0042: ldloc.3 + IL_0043: ldflda valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1 valuetype Test/Generic1InGeneric1`1/clo@7::Data + IL_0048: ldflda valuetype [runtime]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1 valuetype [FSharp.Core]Microsoft.FSharp.Control.TaskStateMachineData`1::MethodBuilder + IL_004d: call instance class [netstandard]System.Threading.Tasks.Task`1 valuetype [netstandard]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1::get_Task() + IL_0052: ret } } +} + +.class private abstract auto ansi sealed ''.$Test + extends [runtime]System.Object +{ } """ ]))