Label? return_label;
+ List<IExpressionCleanup> epilogue_expressions;
+
public EmitContext (IMemberContext rc, ILGenerator ig, TypeSpec return_type, SourceMethodBuilder methodSymbols)
{
this.member_context = rc;
}
}
+ public List<IExpressionCleanup> StatementEpilogue {
+ get {
+ return epilogue_expressions;
+ }
+ }
+
#endregion
+ public void AddStatementEpilog (IExpressionCleanup cleanupExpression)
+ {
+ if (epilogue_expressions == null) {
+ epilogue_expressions = new List<IExpressionCleanup> ();
+ } else if (epilogue_expressions.Contains (cleanupExpression)) {
+ return;
+ }
+
+ epilogue_expressions.Add (cleanupExpression);
+ }
+
public void AssertEmptyStack ()
{
#if STATIC
ig.Emit (OpCodes.Ldarg_0);
}
+ public void EmitEpilogue ()
+ {
+ if (epilogue_expressions == null)
+ return;
+
+ foreach (var e in epilogue_expressions)
+ e.EmitCleanup (this);
+
+ epilogue_expressions = null;
+ }
+
/// <summary>
/// Returns a temporary storage for a variable of type t as
/// a local variable in the current body.
</type>
<type name="C+<TestCompositionCall_2>c__async1">
<method name="Void MoveNext()" attrs="486">
- <size>244</size>
+ <size>251</size>
</method>
<method name="System.String <>m__3()" attrs="145">
<size>13</size>
</type>
<type name="C+<TestStack_1>c__async1">
<method name="Void MoveNext()" attrs="486">
- <size>307</size>
+ <size>321</size>
</method>
<method name="Int32 <>m__1()" attrs="145">
<size>9</size>
</type>
<type name="C+<TestStack_2>c__async2">
<method name="Void MoveNext()" attrs="486">
- <size>289</size>
+ <size>296</size>
</method>
<method name="Int32 <>m__2()" attrs="145">
<size>9</size>
</type>
<type name="Tester+<ArrayAccessTest_3>c__async2">
<method name="Void MoveNext()" attrs="486">
- <size>1103</size>
+ <size>1117</size>
</method>
<method name="Int32 <>m__A()" attrs="145">
<size>9</size>
</type>
<type name="Tester+<ArrayAccessTest_4>c__async3">
<method name="Void MoveNext()" attrs="486">
- <size>415</size>
+ <size>429</size>
</method>
<method name="Int32 <>m__F()" attrs="145">
<size>9</size>
</type>
<type name="Tester+<ArrayAccessTest_5>c__async4">
<method name="Void MoveNext()" attrs="486">
- <size>399</size>
+ <size>413</size>
</method>
<method name="Int32 <>m__11()" attrs="145">
<size>9</size>
</type>
<type name="Tester+<ArrayAccessTest_9>c__async8">
<method name="Void MoveNext()" attrs="486">
- <size>1205</size>
+ <size>1233</size>
</method>
<method name="Int32 <>m__17()" attrs="145">
<size>9</size>
</type>
<type name="Tester+<CallTest_4>c__async14">
<method name="Void MoveNext()" attrs="486">
- <size>232</size>
+ <size>239</size>
</method>
<method name="Void SetStateMachine(IAsyncStateMachine)" attrs="486">
<size>13</size>
</type>
<type name="Tester+<CoalescingTest_1>c__async18">
<method name="Void MoveNext()" attrs="486">
- <size>359</size>
+ <size>366</size>
</method>
<method name="Void SetStateMachine(IAsyncStateMachine)" attrs="486">
<size>13</size>
</type>
<type name="Tester+<IndexerTest_4>c__async24">
<method name="Void MoveNext()" attrs="486">
- <size>400</size>
+ <size>407</size>
</method>
<method name="Void SetStateMachine(IAsyncStateMachine)" attrs="486">
<size>13</size>
</type>
<type name="Tester+<IndexerTest_5>c__async25">
<method name="Void MoveNext()" attrs="486">
- <size>506</size>
+ <size>520</size>
</method>
<method name="Void SetStateMachine(IAsyncStateMachine)" attrs="486">
<size>13</size>
</type>
<type name="Tester+<IsTest_1>c__async28">
<method name="Void MoveNext()" attrs="486">
- <size>229</size>
+ <size>236</size>
</method>
<method name="Void SetStateMachine(IAsyncStateMachine)" attrs="486">
<size>13</size>
</type>
<type name="Tester+<LogicalUserOperator_1>c__async2A">
<method name="Void MoveNext()" attrs="486">
- <size>392</size>
+ <size>399</size>
</method>
<method name="Void SetStateMachine(IAsyncStateMachine)" attrs="486">
<size>13</size>
</type>
<type name="Tester+<LogicalUserOperator_2>c__async2B">
<method name="Void MoveNext()" attrs="486">
- <size>297</size>
+ <size>304</size>
</method>
<method name="Void SetStateMachine(IAsyncStateMachine)" attrs="486">
<size>13</size>
</type>
<type name="Tester+<LogicalUserOperator_3>c__async2C">
<method name="Void MoveNext()" attrs="486">
- <size>391</size>
+ <size>398</size>
</method>
<method name="Void SetStateMachine(IAsyncStateMachine)" attrs="486">
<size>13</size>
</type>
<type name="Tester+<NewTest_1>c__async2D">
<method name="Void MoveNext()" attrs="486">
- <size>258</size>
+ <size>265</size>
</method>
<method name="Void SetStateMachine(IAsyncStateMachine)" attrs="486">
<size>13</size>
</type>
<type name="Tester+<NewInitTest_1>c__async2F">
<method name="Void MoveNext()" attrs="486">
- <size>1025</size>
+ <size>1046</size>
</method>
<method name="Void SetStateMachine(IAsyncStateMachine)" attrs="486">
<size>13</size>
</type>
<type name="Tester+<NewArrayInitTest_1>c__async31">
<method name="Void MoveNext()" attrs="486">
- <size>238</size>
+ <size>245</size>
</method>
<method name="Void SetStateMachine(IAsyncStateMachine)" attrs="486">
<size>13</size>
</type>
<type name="Tester+<NewArrayInitTest_2>c__async32">
<method name="Void MoveNext()" attrs="486">
- <size>356</size>
+ <size>363</size>
</method>
<method name="Void SetStateMachine(IAsyncStateMachine)" attrs="486">
<size>13</size>
</type>
<type name="Tester+<NewArrayInitTest_3>c__async33">
<method name="Void MoveNext()" attrs="486">
- <size>242</size>
+ <size>249</size>
</method>
<method name="Void SetStateMachine(IAsyncStateMachine)" attrs="486">
<size>13</size>
</type>
<type name="Tester+<NewArrayInitTest_4>c__async34">
<method name="Void MoveNext()" attrs="486">
- <size>426</size>
+ <size>433</size>
</method>
<method name="Void SetStateMachine(IAsyncStateMachine)" attrs="486">
<size>13</size>
</type>
<type name="Tester+<NewArrayInitTest_5>c__async35">
<method name="Void MoveNext()" attrs="486">
- <size>260</size>
+ <size>267</size>
</method>
<method name="Void SetStateMachine(IAsyncStateMachine)" attrs="486">
<size>13</size>
</type>
<type name="Tester+<NewArrayInitTest_6>c__async36">
<method name="Void MoveNext()" attrs="486">
- <size>262</size>
+ <size>269</size>
</method>
<method name="Void SetStateMachine(IAsyncStateMachine)" attrs="486">
<size>13</size>
</type>
<type name="Tester+<PropertyTest_2>c__async38">
<method name="Void MoveNext()" attrs="486">
- <size>293</size>
+ <size>300</size>
</method>
<method name="Void SetStateMachine(IAsyncStateMachine)" attrs="486">
<size>13</size>
</type>
<type name="Tester+<PropertyTest_3>c__async39">
<method name="Void MoveNext()" attrs="486">
- <size>649</size>
+ <size>656</size>
</method>
<method name="Void SetStateMachine(IAsyncStateMachine)" attrs="486">
<size>13</size>
</type>
<type name="Tester+<StringConcatTest_1>c__async3A">
<method name="Void MoveNext()" attrs="486">
- <size>459</size>
+ <size>466</size>
</method>
<method name="Void SetStateMachine(IAsyncStateMachine)" attrs="486">
<size>13</size>
</type>
<type name="Tester+<Add_1>c__async0">
<method name="Void MoveNext()" attrs="486">
- <size>462</size>
+ <size>497</size>
</method>
<method name="Int32 <>m__4()" attrs="145">
<size>9</size>
</type>
<type name="Tester+<AssignCompound_1>c__async1">
<method name="Void MoveNext()" attrs="486">
- <size>1188</size>
+ <size>1237</size>
</method>
<method name="Int32 <>m__5()" attrs="145">
<size>9</size>
</type>
<type name="Tester+<Convert_1>c__async2">
<method name="Void MoveNext()" attrs="486">
- <size>328</size>
+ <size>349</size>
</method>
<method name="System.Object <>m__6()" attrs="145">
<size>13</size>
</type>
<type name="Tester+<Invocation_1>c__async3">
<method name="Void MoveNext()" attrs="486">
- <size>580</size>
+ <size>601</size>
</method>
<method name="System.Object <>m__7()" attrs="145">
<size>13</size>
</type>
<type name="A+<Test1>c__async0">
<method name="Void MoveNext()" attrs="486">
- <size>598</size>
+ <size>612</size>
</method>
<method name="Void SetStateMachine(IAsyncStateMachine)" attrs="486">
<size>13</size>
</type>
<type name="C+<Test>c__async0">
<method name="Void MoveNext()" attrs="486">
- <size>271</size>
+ <size>285</size>
</method>
<method name="Int32 <>m__0(Int32)" attrs="145">
<size>10</size>
</type>
<type name="C+<Test_3>c__async2">
<method name="Void MoveNext()" attrs="486">
- <size>1188</size>
+ <size>1237</size>
</method>
<method name="Int32 <>m__2()" attrs="145">
<size>9</size>