if (MethodData != null)
MethodData.Emit (Parent);
+ if (block != null && block.StateMachine is AsyncTaskStorey) {
+ var psm = Module.PredefinedAttributes.AsyncStateMachine;
+ psm.EmitAttribute (MethodBuilder, block.StateMachine);
+ }
+
if ((ModFlags & Modifiers.PARTIAL) == 0)
Block = null;
}
}
}
- if (block != null && block.StateMachine is AsyncTaskStorey) {
- var psm = Module.PredefinedAttributes.AsyncStateMachine;
-
- psm.EmitAttribute (MethodBuilder, block.StateMachine);
- }
-
if ((ModFlags & Modifiers.METHOD_EXTENSION) != 0)
Module.PredefinedAttributes.Extension.EmitAttribute (MethodBuilder);
return 0;
}
+ public static async Task NestedAsyncAnonymousMethod ()
+ {
+ Action a = async delegate {
+ await Task.Yield();
+ };
+
+ await Task.Yield();
+ }
+
public static int Main ()
{
var m = typeof (C).GetMethod ("AsyncMethod");
if (c != 1)
return 3;
+
+ m = typeof (C).GetMethod ("NestedAsyncAnonymousMethod");
+ attr = m.GetCustomAttribute<AsyncStateMachineAttribute> ();
+ if (attr == null)
+ return 10;
+
+ if (attr.StateMachineType == null)
+ return 11;
+
+ var n = typeof (C).GetNestedTypes (BindingFlags.NonPublic).Single (l => l.Name.Contains ("NestedAsyncAnonymousMethod"));
+ if (n == null)
+ return 12;
+
+ m = n.GetMethods (BindingFlags.NonPublic | BindingFlags.Static).Single (l => l.Name.Contains ("m__"));
+
+ attr = m.GetCustomAttribute<AsyncStateMachineAttribute> ();
+ if (attr == null)
+ return 13;
+
+ if (attr.StateMachineType == null)
+ return 14;
+
return 0;
}
}
<size>33</size>\r
</method>\r
<method name="Int32 Main()" attrs="150">\r
- <size>178</size>\r
+ <size>409</size>\r
</method>\r
<method name="System.Threading.Tasks.Task`1[System.Int32] <Main>m__0()" attrs="145">\r
<size>33</size>\r
<method name="Void MoveNext()" attrs="486">\r
<size>165</size>\r
</method>\r
+ <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
+ <size>13</size>\r
+ </method>\r
</type>\r
- <type name="N.M.C+<Main>c__async1">\r
+ <type name="N.M.C">\r
+ <method name="System.Threading.Tasks.Task NestedAsyncAnonymousMethod()" attrs="150">\r
+ <size>33</size>\r
+ </method>\r
+ <method name="Boolean <Main>m__2(System.Type)" attrs="145">\r
+ <size>24</size>\r
+ </method>\r
+ <method name="Boolean <Main>m__3(System.Reflection.MethodInfo)" attrs="145">\r
+ <size>24</size>\r
+ </method>\r
+ </type>\r
+ <type name="N.M.C+<NestedAsyncAnonymousMethod>c__async1">\r
<method name="Void MoveNext()" attrs="486">\r
- <size>162</size>\r
+ <size>194</size>\r
+ </method>\r
+ <method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
+ <size>13</size>\r
+ </method>\r
+ <method name="Void <>m__0()" attrs="145">\r
+ <size>27</size>\r
</method>\r
</type>\r
- <type name="N.M.C+<AsyncMethod>c__async0">\r
+ <type name="N.M.C+<NestedAsyncAnonymousMethod>c__async1+<NestedAsyncAnonymousMethod>c__async2">\r
+ <method name="Void MoveNext()" attrs="486">\r
+ <size>159</size>\r
+ </method>\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r
</type>\r
- <type name="N.M.C+<Main>c__async1">\r
+ <type name="N.M.C+<Main>c__async3">\r
+ <method name="Void MoveNext()" attrs="486">\r
+ <size>162</size>\r
+ </method>\r
<method name="Void SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)" attrs="486">\r
<size>13</size>\r
</method>\r