Use simple null check for implicitly convertible reference types is check
authorMarek Safar <marek.safar@gmail.com>
Tue, 26 Jul 2011 20:31:06 +0000 (21:31 +0100)
committerMarek Safar <marek.safar@gmail.com>
Tue, 26 Jul 2011 21:15:52 +0000 (22:15 +0100)
mcs/mcs/expression.cs
mcs/tests/gtest-etree-01.cs
mcs/tests/ver-il-net_4_0.xml

index 1b64225dcb4d555de23aacb1976585b5e076e988..2bb332c78a77ff66289293edea8aab0c2f03ac6d 100644 (file)
@@ -1481,11 +1481,22 @@ namespace Mono.CSharp
                                                return CreateConstantResult (ec, true);
                                        }
                                } else {
-                               //      if (InflatedTypeSpec.ContainsTypeParameter (d))
-                               //              return this;
+                                       if (Convert.ImplicitReferenceConversionExists (d, t)) {
+                                               //
+                                               // Do not optimize for imported type
+                                               //
+                                               if (d.MemberDefinition.IsImported && d.BuiltinType != BuiltinTypeSpec.Type.None)
+                                                       return this;
+                                               
+                                               //
+                                               // Turn is check into simple null check for implicitly convertible reference types
+                                               //
+                                               return ReducedExpression.Create (
+                                                       new Binary (Binary.Operator.Inequality, expr, new NullLiteral (loc), loc).Resolve (ec),
+                                                       this).Resolve (ec);
+                                       }
 
-                                       if (Convert.ImplicitReferenceConversionExists (d, t) ||
-                                               Convert.ExplicitReferenceConversionExists (d, t)) {
+                                       if (Convert.ExplicitReferenceConversionExists (d, t)) {
                                                return this;
                                        }
                                }
index 3556924babaa028ef3aabd9ae7a1b7a0dae19157..3d7391732233c668ec758da2076848c5b695db21 100644 (file)
@@ -292,6 +292,8 @@ class Indexer
        public string this [params string[] i] { get { return string.Concat (i); } }
 }
 
+class A { }
+class B : A { }
 
 // TODO: Add more nullable tests, follow AddTest pattern.
 
@@ -2689,6 +2691,13 @@ class Tester
                Assert (false, e3.Compile ().Invoke (null));
        }
        
+       void TypeIsTest_4 ()
+       {
+               Expression<Func<B, bool>> e = l => l is A;
+               AssertNodeType (e, ExpressionType.TypeIs);
+               Assert (false, e.Compile ().Invoke (null));
+       }
+       
        void TypeIsTest_5 ()
        {
                Expression<Func<bool>> e5 = () => 1 is int;
index 1d382da456affc969e2e85d2055b27ba707f584d..92900e0577eaf2cc336db2ed5bb69e19e72d573c 100644 (file)
         <size>113</size>
       </method>
     </type>
+    <type name="A">
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="B">
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="Tester">
+      <method name="Void TypeIsTest_4()">
+        <size>80</size>
+      </method>
+    </type>
   </test>
   <test name="gtest-etree-02.cs">
     <type name="M">
     </type>
     <type name="C">
       <method name="Int32 Main()">
-        <size>144</size>
+        <size>114</size>
       </method>
       <method name="Void .ctor()">
         <size>7</size>
         <size>9</size>
       </method>
       <method name="Int32 Main()">
-        <size>139</size>
+        <size>134</size>
       </method>
     </type>
     <type name="Blah+MyDelegate">
         <size>7</size>
       </method>
       <method name="Void Main()">
-        <size>47</size>
+        <size>37</size>
       </method>
     </type>
   </test>
       </method>
     </type>
     <type name="Tester">
-      <method name="System.Threading.Tasks.Task`1[System.Int32] AssignTest_1()">
-        <size>34</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Int32] BinaryTest_1()">
-        <size>27</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Int32] BinaryTest_2()">
-        <size>27</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Int32] CallTest_1()">
-        <size>34</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Int32] ConditionalTest_1()">
-        <size>27</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Int32] ConditionalTest_2()">
-        <size>34</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Int32] ConditionalTest_3()">
-        <size>27</size>
-      </method>
       <method name="System.Threading.Tasks.Task`1[System.Boolean] NewArrayInitTest_1()">
         <size>27</size>
       </method>
       </method>
     </type>
     <type name="Tester">
-      <method name="System.Threading.Tasks.Task`1[System.Boolean] CallTest_2()">
-        <size>34</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Int32] CallTest_3()">
-        <size>27</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Boolean] CallTest_4()">
-        <size>27</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Int32] CallTest_5()">
-        <size>34</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Int32] ConditionalTest_4()">
-        <size>27</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Int32] DelegateInvoke_4()">
-        <size>27</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Int32] EventInvoke_1()">
-        <size>34</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Boolean] IndexerTest_1()">
-        <size>34</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Boolean] IndexerTest_2()">
-        <size>34</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Int32] IndexerTest_3()">
-        <size>34</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Int32] IndexerTest_4()">
-        <size>34</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Int32] IndexerTest_5()">
-        <size>34</size>
-      </method>
       <method name="System.Threading.Tasks.Task`1[System.Boolean] PropertyTest_1()">
         <size>34</size>
       </method>
       </method>
     </type>
     <type name="Tester">
-      <method name="System.Threading.Tasks.Task`1[System.Int32] IndexerTest_6()">
-        <size>34</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Boolean] IndexerTest_7()">
-        <size>34</size>
-      </method>
       <method name="System.Threading.Tasks.Task`1[System.Int32] PropertyTest_3()">
         <size>34</size>
       </method>
       </method>
     </type>
     <type name="Tester">
-      <method name="System.Threading.Tasks.Task`1[System.Boolean] NewTest_1()">
-        <size>27</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Boolean] NewTest_2()">
-        <size>27</size>
-      </method>
       <method name="System.Threading.Tasks.Task`1[System.Int32] NewInitTest_1()">
         <size>27</size>
       </method>
       </method>
     </type>
     <type name="Tester">
-      <method name="System.Threading.Tasks.Task`1[System.Boolean] ArrayAccessTest_1()">
-        <size>27</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Int32] ArrayAccessTest_2()">
-        <size>27</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Int32] ArrayAccessTest_3()">
-        <size>27</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Boolean] ArrayAccessTest_4()">
-        <size>27</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Boolean] ArrayAccessTest_5()">
-        <size>27</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Int32] ArrayAccessTest_6()">
-        <size>27</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Boolean] CastTest_1()">
-        <size>27</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Boolean] CastTest_2()">
-        <size>34</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Boolean] IsTest_1()">
-        <size>27</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Boolean] LogicalUserOperator_1()">
-        <size>27</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Boolean] LogicalUserOperator_2()">
-        <size>27</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Boolean] LogicalUserOperator_3()">
-        <size>27</size>
-      </method>
       <method name="System.Threading.Tasks.Task`1[System.Boolean] UnaryTest_1()">
         <size>27</size>
       </method>
-      <method name="System.Threading.Tasks.Task`1[System.Boolean] AssignTest_2()">
-        <size>27</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Int32] BinaryTest_3()">
-        <size>27</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Int32] BinaryTest_4()">
-        <size>27</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Boolean] CoalescingTest_1()">
-        <size>27</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Boolean] CoalescingTest_2()">
-        <size>27</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Boolean] IsTest_2()">
-        <size>27</size>
-      </method>
       <method name="System.Threading.Tasks.Task`1[System.Boolean] UnaryTest_2()">
         <size>27</size>
       </method>
       <method name="System.Threading.Tasks.Task`1[System.Boolean] UnaryTest_3()">
         <size>27</size>
       </method>
-      <method name="System.Threading.Tasks.Task`1[System.Boolean] ArrayAccessTest_7()">
-        <size>27</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Int32] ArrayAccessTest_8()">
-        <size>27</size>
-      </method>
     </type>
     <type name="S">
       <method name="S op_Addition(S, S)">
       </method>
     </type>
     <type name="Tester">
-      <method name="System.Threading.Tasks.Task`1[System.Int32] ArrayAccessTest_9()">
-        <size>27</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Int32] FieldTest_1()">
-        <size>27</size>
-      </method>
       <method name="System.Threading.Tasks.Task`1[System.Boolean] NewArrayInitTest_6()">
         <size>27</size>
       </method>
-      <method name="System.Threading.Tasks.Task`1[System.Int32] AssignTest_3()">
-        <size>27</size>
-      </method>
     </type>
-    <type name="Tester+&lt;ArrayAccessTest_1&gt;c__async0">
+    <type name="Tester+&lt;NewInitTest_1&gt;c__async0">
       <method name="Void MoveNext()">
-        <size>321</size>
+        <size>1019</size>
       </method>
-      <method name="Boolean &lt;&gt;m__4()">
-        <size>2</size>
+      <method name="Int32 &lt;&gt;m__4()">
+        <size>3</size>
       </method>
       <method name="Int32 &lt;&gt;m__5()">
-        <size>2</size>
-      </method>
-      <method name="Void .ctor()">
-        <size>36</size>
-      </method>
-    </type>
-    <type name="Tester+&lt;ArrayAccessTest_2&gt;c__async1">
-      <method name="Void MoveNext()">
-        <size>740</size>
+        <size>3</size>
       </method>
       <method name="Int32 &lt;&gt;m__6()">
-        <size>2</size>
+        <size>3</size>
       </method>
       <method name="Int32 &lt;&gt;m__7()">
-        <size>2</size>
+        <size>3</size>
       </method>
       <method name="Int32 &lt;&gt;m__8()">
-        <size>2</size>
+        <size>3</size>
       </method>
-      <method name="Double &lt;&gt;m__9()">
-        <size>10</size>
+      <method name="Int32 &lt;&gt;m__9()">
+        <size>3</size>
       </method>
       <method name="Void .ctor()">
         <size>36</size>
       </method>
     </type>
-    <type name="Tester+&lt;ArrayAccessTest_3&gt;c__async2">
+    <type name="Tester+&lt;NewInitTest_2&gt;c__async1">
       <method name="Void MoveNext()">
-        <size>1086</size>
+        <size>738</size>
       </method>
-      <method name="Int32 &lt;&gt;m__A()">
-        <size>2</size>
+      <method name="System.String &lt;&gt;m__A()">
+        <size>6</size>
       </method>
-      <method name="Int32 &lt;&gt;m__B()">
-        <size>2</size>
+      <method name="System.String &lt;&gt;m__B()">
+        <size>6</size>
       </method>
-      <method name="Decimal &lt;&gt;m__C()">
-        <size>12</size>
+      <method name="Int32 &lt;&gt;m__C()">
+        <size>3</size>
       </method>
       <method name="Int32 &lt;&gt;m__D()">
-        <size>2</size>
-      </method>
-      <method name="Decimal &lt;&gt;m__E()">
-        <size>12</size>
+        <size>3</size>
       </method>
       <method name="Void .ctor()">
         <size>36</size>
       </method>
     </type>
-    <type name="Tester+&lt;ArrayAccessTest_4&gt;c__async3">
+    <type name="Tester+&lt;NewArrayInitTest_1&gt;c__async2">
       <method name="Void MoveNext()">
-        <size>396</size>
+        <size>212</size>
       </method>
-      <method name="Int32 &lt;&gt;m__F()">
+      <method name="Int32 &lt;&gt;m__E()">
         <size>2</size>
       </method>
-      <method name="System.String &lt;&gt;m__10()">
-        <size>6</size>
-      </method>
       <method name="Void .ctor()">
         <size>36</size>
       </method>
     </type>
-    <type name="Tester+&lt;ArrayAccessTest_5&gt;c__async4">
+    <type name="Tester+&lt;NewArrayInitTest_2&gt;c__async3">
       <method name="Void MoveNext()">
-        <size>396</size>
+        <size>334</size>
       </method>
-      <method name="Int32 &lt;&gt;m__11()">
+      <method name="Int32 &lt;&gt;m__F()">
         <size>2</size>
       </method>
-      <method name="Int32 &lt;&gt;m__12()">
-        <size>18</size>
-      </method>
-      <method name="Void .ctor()">
-        <size>36</size>
-      </method>
-    </type>
-    <type name="Tester+&lt;ArrayAccessTest_6&gt;c__async5">
-      <method name="Void MoveNext()">
-        <size>236</size>
-      </method>
-      <method name="Int64 &lt;&gt;m__13()">
-        <size>3</size>
+      <method name="Int32 &lt;&gt;m__10()">
+        <size>2</size>
       </method>
       <method name="Void .ctor()">
         <size>36</size>
       </method>
     </type>
-    <type name="Tester+&lt;ArrayAccessTest_7&gt;c__async6">
+    <type name="Tester+&lt;NewArrayInitTest_3&gt;c__async4">
       <method name="Void MoveNext()">
-        <size>363</size>
+        <size>232</size>
       </method>
-      <method name="Int32 &lt;&gt;m__14()">
+      <method name="Byte &lt;&gt;m__11()">
         <size>2</size>
       </method>
       <method name="Void .ctor()">
         <size>36</size>
       </method>
     </type>
-    <type name="Tester+&lt;ArrayAccessTest_8&gt;c__async7">
+    <type name="Tester+&lt;NewArrayInitTest_4&gt;c__async5">
       <method name="Void MoveNext()">
-        <size>657</size>
+        <size>420</size>
       </method>
-      <method name="Int32 &lt;&gt;m__15()">
+      <method name="UInt16 &lt;&gt;m__12()">
         <size>2</size>
       </method>
-      <method name="Byte &lt;&gt;m__16()">
-        <size>3</size>
+      <method name="UInt16 &lt;&gt;m__13()">
+        <size>2</size>
       </method>
       <method name="Void .ctor()">
         <size>36</size>
       </method>
     </type>
-    <type name="Tester+&lt;ArrayAccessTest_9&gt;c__async8">
+    <type name="Tester+&lt;NewArrayInitTest_5&gt;c__async6">
       <method name="Void MoveNext()">
-        <size>1209</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__17()">
-        <size>2</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__18()">
-        <size>2</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__19()">
-        <size>3</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__1A()">
-        <size>2</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__1B()">
-        <size>3</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__1C()">
-        <size>2</size>
+        <size>250</size>
       </method>
-      <method name="S &lt;&gt;m__1D()">
+      <method name="S &lt;&gt;m__14()">
         <size>18</size>
       </method>
       <method name="Void .ctor()">
         <size>36</size>
       </method>
     </type>
-    <type name="Tester+&lt;AssignTest_1&gt;c__async9">
+    <type name="Tester+&lt;NewArrayInitTest_6&gt;c__async7">
       <method name="Void MoveNext()">
-        <size>202</size>
+        <size>252</size>
       </method>
-      <method name="Int32 &lt;&gt;m__1E()">
+      <method name="Int32 &lt;&gt;m__15()">
         <size>2</size>
       </method>
       <method name="Void .ctor()">
         <size>36</size>
       </method>
     </type>
-    <type name="Tester+&lt;AssignTest_2&gt;c__asyncA">
+    <type name="Tester+&lt;PropertyTest_1&gt;c__async8">
       <method name="Void MoveNext()">
-        <size>251</size>
+        <size>201</size>
       </method>
-      <method name="Nullable`1 &lt;&gt;m__1F()">
-        <size>10</size>
+      <method name="Int32 &lt;&gt;m__16()">
+        <size>2</size>
       </method>
       <method name="Void .ctor()">
         <size>36</size>
       </method>
     </type>
-    <type name="Tester+&lt;AssignTest_3&gt;c__asyncB">
+    <type name="Tester+&lt;PropertyTest_2&gt;c__async9">
       <method name="Void MoveNext()">
-        <size>350</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__20()">
-        <size>2</size>
+        <size>272</size>
       </method>
-      <method name="Int32 &lt;&gt;m__21()">
+      <method name="Int32 &lt;&gt;m__17()">
         <size>2</size>
       </method>
       <method name="Void .ctor()">
         <size>36</size>
       </method>
     </type>
-    <type name="Tester+&lt;BinaryTest_1&gt;c__asyncC">
+    <type name="Tester+&lt;PropertyTest_3&gt;c__asyncA">
       <method name="Void MoveNext()">
-        <size>428</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__22()">
-        <size>9</size>
+        <size>636</size>
       </method>
-      <method name="Int32 &lt;&gt;m__23()">
+      <method name="Int32 &lt;&gt;m__18()">
         <size>3</size>
       </method>
-      <method name="Int32 &lt;&gt;m__24()">
-        <size>3</size>
+      <method name="Int32 &lt;&gt;m__19()">
+        <size>2</size>
+      </method>
+      <method name="Int32 &lt;&gt;m__1A()">
+        <size>2</size>
       </method>
       <method name="Void .ctor()">
         <size>36</size>
       </method>
     </type>
-    <type name="Tester+&lt;BinaryTest_2&gt;c__asyncD">
+    <type name="Tester+&lt;StringConcatTest_1&gt;c__asyncB">
       <method name="Void MoveNext()">
-        <size>459</size>
+        <size>441</size>
       </method>
-      <method name="Boolean &lt;&gt;m__25()">
-        <size>16</size>
+      <method name="System.String &lt;&gt;m__1B()">
+        <size>6</size>
       </method>
-      <method name="Boolean &lt;&gt;m__26()">
-        <size>16</size>
+      <method name="System.String &lt;&gt;m__1C()">
+        <size>6</size>
       </method>
-      <method name="Boolean &lt;&gt;m__27()">
-        <size>16</size>
+      <method name="System.String &lt;&gt;m__1D()">
+        <size>2</size>
       </method>
       <method name="Void .ctor()">
         <size>36</size>
       </method>
     </type>
-    <type name="Tester+&lt;BinaryTest_3&gt;c__asyncE">
+    <type name="Tester+&lt;UnaryTest_1&gt;c__asyncC">
       <method name="Void MoveNext()">
-        <size>1095</size>
-      </method>
-      <method name="Nullable`1 &lt;&gt;m__28()">
-        <size>7</size>
-      </method>
-      <method name="Nullable`1 &lt;&gt;m__29()">
-        <size>10</size>
-      </method>
-      <method name="Nullable`1 &lt;&gt;m__2A()">
-        <size>10</size>
-      </method>
-      <method name="Nullable`1 &lt;&gt;m__2B()">
-        <size>7</size>
-      </method>
-      <method name="Nullable`1 &lt;&gt;m__2C()">
-        <size>10</size>
+        <size>212</size>
       </method>
-      <method name="Nullable`1 &lt;&gt;m__2D()">
-        <size>7</size>
+      <method name="Int32 &lt;&gt;m__1E()">
+        <size>2</size>
       </method>
       <method name="Void .ctor()">
         <size>36</size>
       </method>
     </type>
-    <type name="Tester+&lt;BinaryTest_4&gt;c__asyncF">
+    <type name="Tester+&lt;UnaryTest_2&gt;c__asyncD">
       <method name="Void MoveNext()">
-        <size>808</size>
+        <size>313</size>
       </method>
-      <method name="Nullable`1 &lt;&gt;m__2E()">
+      <method name="Nullable`1 &lt;&gt;m__1F()">
         <size>7</size>
       </method>
-      <method name="Nullable`1 &lt;&gt;m__2F()">
-        <size>10</size>
-      </method>
-      <method name="Nullable`1 &lt;&gt;m__30()">
-        <size>13</size>
-      </method>
-      <method name="Nullable`1 &lt;&gt;m__31()">
-        <size>10</size>
-      </method>
       <method name="Void .ctor()">
         <size>36</size>
       </method>
     </type>
-    <type name="Tester+&lt;CallTest_1&gt;c__async10">
+    <type name="Tester+&lt;UnaryTest_3&gt;c__asyncE">
       <method name="Void MoveNext()">
-        <size>423</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__32()">
-        <size>9</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__33()">
-        <size>3</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__34()">
-        <size>2</size>
-      </method>
-      <method name="Void .ctor()">
-        <size>36</size>
+        <size>347</size>
       </method>
-    </type>
-    <type name="Tester+&lt;CallTest_2&gt;c__async11">
-      <method name="Void MoveNext()">
-        <size>246</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__35()">
-        <size>9</size>
-      </method>
-      <method name="Void .ctor()">
-        <size>36</size>
-      </method>
-    </type>
-    <type name="Tester+&lt;CallTest_3&gt;c__async12">
-      <method name="Void MoveNext()">
-        <size>216</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__36()">
-        <size>3</size>
-      </method>
-      <method name="Void .ctor()">
-        <size>36</size>
-      </method>
-    </type>
-    <type name="Tester+&lt;CallTest_4&gt;c__async13">
-      <method name="Void MoveNext()">
-        <size>206</size>
-      </method>
-      <method name="E &lt;&gt;m__37()">
-        <size>2</size>
-      </method>
-      <method name="Void .ctor()">
-        <size>36</size>
-      </method>
-    </type>
-    <type name="Tester+&lt;CallTest_5&gt;c__async14">
-      <method name="Void MoveNext()">
-        <size>272</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__38()">
-        <size>18</size>
-      </method>
-      <method name="Void .ctor()">
-        <size>36</size>
-      </method>
-    </type>
-    <type name="Tester+&lt;CastTest_1&gt;c__async15">
-      <method name="Void MoveNext()">
-        <size>225</size>
-      </method>
-      <method name="Decimal &lt;&gt;m__39()">
-        <size>8</size>
-      </method>
-      <method name="Void .ctor()">
-        <size>36</size>
-      </method>
-    </type>
-    <type name="Tester+&lt;CastTest_2&gt;c__async16">
-      <method name="Void MoveNext()">
-        <size>207</size>
-      </method>
-      <method name="Tester &lt;&gt;m__3A()">
-        <size>7</size>
-      </method>
-      <method name="Void .ctor()">
-        <size>36</size>
-      </method>
-    </type>
-    <type name="Tester+&lt;CoalescingTest_1&gt;c__async17">
-      <method name="Void MoveNext()">
-        <size>337</size>
-      </method>
-      <method name="System.String &lt;&gt;m__3B()">
-        <size>2</size>
-      </method>
-      <method name="System.String &lt;&gt;m__3C()">
-        <size>6</size>
-      </method>
-      <method name="Void .ctor()">
-        <size>36</size>
-      </method>
-    </type>
-    <type name="Tester+&lt;CoalescingTest_2&gt;c__async18">
-      <method name="Void MoveNext()">
-        <size>349</size>
-      </method>
-      <method name="Nullable`1 &lt;&gt;m__3D()">
-        <size>10</size>
-      </method>
-      <method name="Byte &lt;&gt;m__3E()">
-        <size>2</size>
-      </method>
-      <method name="Void .ctor()">
-        <size>36</size>
-      </method>
-    </type>
-    <type name="Tester+&lt;ConditionalTest_1&gt;c__async19">
-      <method name="Void MoveNext()">
-        <size>41</size>
-      </method>
-      <method name="Void .ctor()">
-        <size>36</size>
-      </method>
-    </type>
-    <type name="Tester+&lt;ConditionalTest_2&gt;c__async1A">
-      <method name="Void MoveNext()">
-        <size>315</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__3F()">
-        <size>2</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__40()">
-        <size>2</size>
-      </method>
-      <method name="Void .ctor()">
-        <size>36</size>
-      </method>
-    </type>
-    <type name="Tester+&lt;ConditionalTest_3&gt;c__async1B">
-      <method name="Void MoveNext()">
-        <size>333</size>
-      </method>
-      <method name="Boolean &lt;&gt;m__41()">
-        <size>2</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__42()">
-        <size>2</size>
-      </method>
-      <method name="Void .ctor()">
-        <size>36</size>
-      </method>
-    </type>
-    <type name="Tester+&lt;ConditionalTest_4&gt;c__async1C">
-      <method name="Void MoveNext()">
-        <size>222</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__43()">
-        <size>2</size>
-      </method>
-      <method name="Void .ctor()">
-        <size>36</size>
-      </method>
-    </type>
-    <type name="Tester+&lt;DelegateInvoke_4&gt;c__async1D">
-      <method name="Void MoveNext()">
-        <size>250</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__44(Int32)">
-        <size>4</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__45()">
-        <size>2</size>
-      </method>
-      <method name="Void .ctor()">
-        <size>36</size>
-      </method>
-    </type>
-    <type name="Tester+&lt;EventInvoke_1&gt;c__async1E">
-      <method name="Void MoveNext()">
-        <size>196</size>
-      </method>
-      <method name="System.Action &lt;&gt;m__46()">
-        <size>15</size>
-      </method>
-      <method name="Void &lt;&gt;m__47()">
-        <size>8</size>
-      </method>
-      <method name="Void .ctor()">
-        <size>36</size>
-      </method>
-    </type>
-    <type name="Tester+&lt;FieldTest_1&gt;c__async1F">
-      <method name="Void MoveNext()">
-        <size>525</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__48()">
-        <size>2</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__49()">
-        <size>2</size>
-      </method>
-      <method name="Void .ctor()">
-        <size>36</size>
-      </method>
-    </type>
-    <type name="Tester+&lt;IndexerTest_1&gt;c__async20">
-      <method name="Void MoveNext()">
-        <size>204</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__4A()">
-        <size>2</size>
-      </method>
-      <method name="Void .ctor()">
-        <size>36</size>
-      </method>
-    </type>
-    <type name="Tester+&lt;IndexerTest_2&gt;c__async21">
-      <method name="Void MoveNext()">
-        <size>321</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__4B()">
-        <size>2</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__4C()">
-        <size>2</size>
-      </method>
-      <method name="Void .ctor()">
-        <size>36</size>
-      </method>
-    </type>
-    <type name="Tester+&lt;IndexerTest_3&gt;c__async22">
-      <method name="Void MoveNext()">
-        <size>350</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__4D()">
-        <size>18</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__4E()">
-        <size>2</size>
-      </method>
-      <method name="Void .ctor()">
-        <size>36</size>
-      </method>
-    </type>
-    <type name="Tester+&lt;IndexerTest_4&gt;c__async23">
-      <method name="Void MoveNext()">
-        <size>381</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__4F()">
-        <size>18</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__50()">
-        <size>3</size>
-      </method>
-      <method name="Void .ctor()">
-        <size>36</size>
-      </method>
-    </type>
-    <type name="Tester+&lt;IndexerTest_5&gt;c__async24">
-      <method name="Void MoveNext()">
-        <size>491</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__51()">
-        <size>18</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__52()">
-        <size>3</size>
-      </method>
-      <method name="Void .ctor()">
-        <size>36</size>
-      </method>
-    </type>
-    <type name="Tester+&lt;IndexerTest_6&gt;c__async25">
-      <method name="Void MoveNext()">
-        <size>537</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__53()">
-        <size>3</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__54()">
-        <size>2</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__55()">
-        <size>3</size>
-      </method>
-      <method name="Void .ctor()">
-        <size>36</size>
-      </method>
-    </type>
-    <type name="Tester+&lt;IndexerTest_7&gt;c__async26">
-      <method name="Void MoveNext()">
-        <size>235</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__56()">
-        <size>18</size>
-      </method>
-      <method name="Void .ctor()">
-        <size>36</size>
-      </method>
-    </type>
-    <type name="Tester+&lt;IsTest_1&gt;c__async27">
-      <method name="Void MoveNext()">
-        <size>224</size>
-      </method>
-      <method name="Tester &lt;&gt;m__57()">
-        <size>6</size>
-      </method>
-      <method name="Void .ctor()">
-        <size>36</size>
-      </method>
-    </type>
-    <type name="Tester+&lt;IsTest_2&gt;c__async28">
-      <method name="Void MoveNext()">
-        <size>211</size>
-      </method>
-      <method name="Nullable`1 &lt;&gt;m__58()">
-        <size>7</size>
-      </method>
-      <method name="Void .ctor()">
-        <size>36</size>
-      </method>
-    </type>
-    <type name="Tester+&lt;LogicalUserOperator_1&gt;c__async29">
-      <method name="Void MoveNext()">
-        <size>370</size>
-      </method>
-      <method name="Base &lt;&gt;m__59()">
-        <size>6</size>
-      </method>
-      <method name="Base &lt;&gt;m__5A()">
-        <size>6</size>
-      </method>
-      <method name="Void .ctor()">
-        <size>36</size>
-      </method>
-    </type>
-    <type name="Tester+&lt;LogicalUserOperator_2&gt;c__async2A">
-      <method name="Void MoveNext()">
-        <size>275</size>
-      </method>
-      <method name="Base &lt;&gt;m__5B()">
-        <size>6</size>
-      </method>
-      <method name="Void .ctor()">
-        <size>36</size>
-      </method>
-    </type>
-    <type name="Tester+&lt;LogicalUserOperator_3&gt;c__async2B">
-      <method name="Void MoveNext()">
-        <size>369</size>
-      </method>
-      <method name="Base &lt;&gt;m__5C()">
-        <size>6</size>
-      </method>
-      <method name="Base &lt;&gt;m__5D()">
-        <size>6</size>
-      </method>
-      <method name="Void .ctor()">
-        <size>36</size>
-      </method>
-    </type>
-    <type name="Tester+&lt;NewTest_1&gt;c__async2C">
-      <method name="Void MoveNext()">
-        <size>232</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__5E()">
-        <size>3</size>
-      </method>
-      <method name="Void .ctor()">
-        <size>36</size>
-      </method>
-    </type>
-    <type name="Tester+&lt;NewTest_2&gt;c__async2D">
-      <method name="Void MoveNext()">
-        <size>334</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__5F()">
-        <size>3</size>
-      </method>
-      <method name="System.String &lt;&gt;m__60()">
-        <size>6</size>
-      </method>
-      <method name="Void .ctor()">
-        <size>36</size>
-      </method>
-    </type>
-    <type name="Tester+&lt;NewInitTest_1&gt;c__async2E">
-      <method name="Void MoveNext()">
-        <size>1019</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__61()">
-        <size>3</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__62()">
-        <size>3</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__63()">
-        <size>3</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__64()">
-        <size>3</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__65()">
-        <size>3</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__66()">
-        <size>3</size>
-      </method>
-      <method name="Void .ctor()">
-        <size>36</size>
-      </method>
-    </type>
-    <type name="Tester+&lt;NewInitTest_2&gt;c__async2F">
-      <method name="Void MoveNext()">
-        <size>738</size>
-      </method>
-      <method name="System.String &lt;&gt;m__67()">
-        <size>6</size>
-      </method>
-      <method name="System.String &lt;&gt;m__68()">
-        <size>6</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__69()">
-        <size>3</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__6A()">
-        <size>3</size>
-      </method>
-      <method name="Void .ctor()">
-        <size>36</size>
-      </method>
-    </type>
-    <type name="Tester+&lt;NewArrayInitTest_1&gt;c__async30">
-      <method name="Void MoveNext()">
-        <size>212</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__6B()">
-        <size>2</size>
-      </method>
-      <method name="Void .ctor()">
-        <size>36</size>
-      </method>
-    </type>
-    <type name="Tester+&lt;NewArrayInitTest_2&gt;c__async31">
-      <method name="Void MoveNext()">
-        <size>334</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__6C()">
-        <size>2</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__6D()">
-        <size>2</size>
-      </method>
-      <method name="Void .ctor()">
-        <size>36</size>
-      </method>
-    </type>
-    <type name="Tester+&lt;NewArrayInitTest_3&gt;c__async32">
-      <method name="Void MoveNext()">
-        <size>232</size>
-      </method>
-      <method name="Byte &lt;&gt;m__6E()">
-        <size>2</size>
-      </method>
-      <method name="Void .ctor()">
-        <size>36</size>
-      </method>
-    </type>
-    <type name="Tester+&lt;NewArrayInitTest_4&gt;c__async33">
-      <method name="Void MoveNext()">
-        <size>420</size>
-      </method>
-      <method name="UInt16 &lt;&gt;m__6F()">
-        <size>2</size>
-      </method>
-      <method name="UInt16 &lt;&gt;m__70()">
-        <size>2</size>
-      </method>
-      <method name="Void .ctor()">
-        <size>36</size>
-      </method>
-    </type>
-    <type name="Tester+&lt;NewArrayInitTest_5&gt;c__async34">
-      <method name="Void MoveNext()">
-        <size>250</size>
-      </method>
-      <method name="S &lt;&gt;m__71()">
-        <size>18</size>
-      </method>
-      <method name="Void .ctor()">
-        <size>36</size>
-      </method>
-    </type>
-    <type name="Tester+&lt;NewArrayInitTest_6&gt;c__async35">
-      <method name="Void MoveNext()">
-        <size>265</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__72()">
-        <size>2</size>
-      </method>
-      <method name="Void .ctor()">
-        <size>36</size>
-      </method>
-    </type>
-    <type name="Tester+&lt;PropertyTest_1&gt;c__async36">
-      <method name="Void MoveNext()">
-        <size>201</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__73()">
-        <size>2</size>
-      </method>
-      <method name="Void .ctor()">
-        <size>36</size>
-      </method>
-    </type>
-    <type name="Tester+&lt;PropertyTest_2&gt;c__async37">
-      <method name="Void MoveNext()">
-        <size>272</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__74()">
-        <size>2</size>
-      </method>
-      <method name="Void .ctor()">
-        <size>36</size>
-      </method>
-    </type>
-    <type name="Tester+&lt;PropertyTest_3&gt;c__async38">
-      <method name="Void MoveNext()">
-        <size>636</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__75()">
-        <size>3</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__76()">
-        <size>2</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__77()">
-        <size>2</size>
-      </method>
-      <method name="Void .ctor()">
-        <size>36</size>
-      </method>
-    </type>
-    <type name="Tester+&lt;StringConcatTest_1&gt;c__async39">
-      <method name="Void MoveNext()">
-        <size>441</size>
-      </method>
-      <method name="System.String &lt;&gt;m__78()">
-        <size>6</size>
-      </method>
-      <method name="System.String &lt;&gt;m__79()">
-        <size>6</size>
-      </method>
-      <method name="System.String &lt;&gt;m__7A()">
-        <size>2</size>
-      </method>
-      <method name="Void .ctor()">
-        <size>36</size>
-      </method>
-    </type>
-    <type name="Tester+&lt;UnaryTest_1&gt;c__async3A">
-      <method name="Void MoveNext()">
-        <size>212</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__7B()">
-        <size>2</size>
-      </method>
-      <method name="Void .ctor()">
-        <size>36</size>
-      </method>
-    </type>
-    <type name="Tester+&lt;UnaryTest_2&gt;c__async3B">
-      <method name="Void MoveNext()">
-        <size>313</size>
-      </method>
-      <method name="Nullable`1 &lt;&gt;m__7C()">
-        <size>7</size>
-      </method>
-      <method name="Void .ctor()">
-        <size>36</size>
-      </method>
-    </type>
-    <type name="Tester+&lt;UnaryTest_3&gt;c__async3C">
-      <method name="Void MoveNext()">
-        <size>347</size>
-      </method>
-      <method name="Int32 &lt;&gt;m__7D()">
+      <method name="Int32 &lt;&gt;m__20()">
         <size>2</size>
       </method>
       <method name="Void .ctor()">