3 Jay Krell (jaykrell@microsoft.com)
5 Copyright 2018 Microsoft
6 Licensed under the MIT license. See LICENSE file in the project root for full license information.
8 Derived from tailcall-interface.cs.
11 .assembly extern mscorlib { }
13 .assembly 'tailcall-interface-justrun' { }
15 .class public sequential sealed Point
16 extends [mscorlib]System.ValueType
22 .class interface private abstract I1
24 .method public newslot abstract virtual instance void perturb_interface_offset1() { }
25 .method public newslot abstract virtual instance void F1(class I2 i2, int32 counter, int64 initial_stack, int64 current_stack) noinlining { }
26 .method public newslot abstract virtual instance void GF1<TF>(class I2 i2, int32 counter, int64 initial_stack, int64 current_stack) noinlining { }
29 .class interface private abstract GI1`1<TC>
31 .method public newslot abstract virtual instance void perturb_interface_offset1() { }
32 .method public newslot abstract virtual instance void perturb_interface_offset2() { }
33 .method public newslot abstract virtual instance void F1(class GI2`1<!TC> i2, int32 counter, int64 initial_stack, int64 current_stack) noinlining { }
34 .method public newslot abstract virtual instance void GF1<TF>(class GI2`1<!TC> i2, int32 counter, int64 initial_stack, int64 current_stack) noinlining { }
35 .method public newslot abstract virtual instance void HF1<TF>(class GI2`1<!!TF> i2, int32 counter, int64 initial_stack, int64 current_stack) noinlining { }
38 .class interface private abstract I2
40 .method public newslot abstract virtual instance void perturb_interface_offset1() { }
41 .method public newslot abstract virtual instance void perturb_interface_offset2() { }
42 .method public newslot abstract virtual instance void perturb_interface_offset3() { }
43 .method public newslot abstract virtual instance void F2(class I1 i1, int32 counter, int64 initial_stack, int64 current_stack) noinlining { }
44 .method public newslot abstract virtual instance void GF2<TF>(class I1 i1, int32 counter, int64 initial_stack, int64 current_stack) noinlining { }
47 .class interface private abstract GI2`1<TC>
49 .method public newslot abstract virtual instance void perturb_interface_offset1() { }
50 .method public newslot abstract virtual instance void perturb_interface_offset2() { }
51 .method public newslot abstract virtual instance void perturb_interface_offset3() { }
52 .method public newslot abstract virtual instance void perturb_interface_offset4() { }
53 .method public newslot abstract virtual instance void F2(class GI1`1<!TC> i1, int32 counter, int64 initial_stack, int64 current_stack) noinlining { }
54 .method public newslot abstract virtual instance void GF2<TF>(class GI1`1<!TC> i1, int32 counter, int64 initial_stack, int64 current_stack) noinlining { }
55 .method public newslot abstract virtual instance void HF2<TF>(class GI1`1<!!TF> i1, int32 counter, int64 initial_stack, int64 current_stack) noinlining { }
58 .class public C1 implements I1
60 .method private newslot virtual final instance void I1.perturb_interface_offset1()
62 .override I1::perturb_interface_offset1
66 .method private newslot virtual final instance void I1.F1(class I2 i2, int32 counter, int64 initial_stack, int64 current_stack) noinlining
69 .locals init (int32 V_0)
83 callvirt instance void I2::F2(class I1, int32, int64, int64)
88 .method private newslot virtual final instance void I1.GF1<TF>(class I2 i2, int32 counter, int64 initial_stack, int64 current_stack) noinlining
91 .locals init (int32 V_0)
106 callvirt instance void I2::GF2<!!0>(class I1, int32, int64, int64)
111 .method public instance void .ctor()
115 call instance void [mscorlib]System.Object::.ctor()
120 .class public GC1`1<TC> implements class GI1`1<!TC>
123 .method private newslot virtual final instance void 'GI1<TC>.perturb_interface_offset1'()
125 .override method instance void class GI1`1<!TC>::perturb_interface_offset1()
129 .method private newslot virtual final instance void 'GI1<TC>.perturb_interface_offset2'()
131 .override method instance void class GI1`1<!TC>::perturb_interface_offset2()
135 .method private newslot virtual final instance void 'GI1<TC>.F1'(class GI2`1<!TC> i2, int32 counter, int64 initial_stack, int64 current_stack) noinlining
137 .override method instance void class GI1`1<!TC>::F1(class GI2`1<!0>, int32, int64, int64)
138 .locals init (int32 V_0)
154 callvirt instance void class GI2`1<!TC>::F2(class GI1`1<!0>, int32, int64, int64)
159 .method private newslot virtual final instance void 'GI1<TC>.GF1'<TF>(class GI2`1<!TC> i2, int32 counter, int64 initial_stack, int64 current_stack) noinlining
161 .override method instance void class GI1`1<!TC>::GF1<[1]>(class GI2`1<!0>, int32, int64, int64)
162 .locals init (int32 V_0)
178 callvirt instance void class GI2`1<!TC>::GF2<!!0>(class GI1`1<!0>, int32, int64, int64)
184 .method private newslot virtual final instance void 'GI1<TC>.HF1'<TF>(class GI2`1<!!TF> i2, int32 counter, int64 initial_stack, int64 current_stack) noinlining
186 .override method instance void class GI1`1<!TC>::HF1<[1]>(class GI2`1<!!TF>, int32, int64, int64)
187 .locals init (int32 V_0)
203 callvirt instance void class GI2`1<!!0>::HF2<!0>(class GI1`1<!!0>, int32, int64, int64)
208 .method public instance void .ctor()
212 call instance void [mscorlib]System.Object::.ctor()
218 .class public C2 implements I2
221 .method private newslot virtual final instance void I2.perturb_interface_offset1()
223 .override I2::perturb_interface_offset1
227 .method private newslot virtual final instance void I2.perturb_interface_offset2()
229 .override I2::perturb_interface_offset2
233 .method private newslot virtual final instance void I2.perturb_interface_offset3()
235 .override I2::perturb_interface_offset3
239 .method private newslot virtual final instance void I2.F2(class I1 i1, int32 counter, int64 initial_stack, int64 current_stack) noinlining
242 .locals init (int32 V_0)
257 callvirt instance void I1::F1(class I2, int32, int64, int64)
262 .method private newslot virtual final instance void I2.GF2<TF>(class I1 i1, int32 counter, int64 initial_stack, int64 current_stack) noinlining
265 .locals init (int32 V_0)
281 callvirt instance void I1::GF1<!!0>(class I2, int32, int64, int64)
286 .method public instance void .ctor()
290 call instance void [mscorlib]System.Object::.ctor()
295 .class public GC2`1<TC> implements class GI2`1<!TC>
298 .method private newslot virtual final instance void 'GI2<TC>.perturb_interface_offset1'()
300 .override method instance void class GI2`1<!TC>::perturb_interface_offset1()
304 .method private newslot virtual final instance void 'GI2<TC>.perturb_interface_offset2'()
306 .override method instance void class GI2`1<!TC>::perturb_interface_offset2()
310 .method private newslot virtual final instance void 'GI2<TC>.perturb_interface_offset3'()
312 .override method instance void class GI2`1<!TC>::perturb_interface_offset3()
316 .method private newslot virtual final instance void 'GI2<TC>.perturb_interface_offset4'()
318 .override method instance void class GI2`1<!TC>::perturb_interface_offset4()
322 .method private newslot virtual final instance void 'GI2<TC>.F2'(class GI1`1<!TC> i1, int32 counter, int64 initial_stack, int64 current_stack) noinlining
324 .override method instance void class GI2`1<!TC>::F2(class GI1`1<!0>, int32, int64, int64)
325 .locals init (int32 V_0)
341 callvirt instance void class GI1`1<!TC>::F1(class GI2`1<!0>, int32, int64, int64)
346 .method private newslot virtual final instance void 'GI2<TC>.GF2'<TF>(class GI1`1<!TC> i1, int32 counter, int64 initial_stack, int64 current_stack) noinlining
348 .override method instance void class GI2`1<!TC>::GF2<[1]>(class GI1`1<!0>, int32, int64, int64)
349 .locals init (int32 V_0)
365 callvirt instance void class GI1`1<!TC>::GF1<!!0>(class GI2`1<!0>, int32, int64, int64)
370 .method private newslot virtual final instance void 'GI2<TC>.HF2'<TF>(class GI1`1<!!TF> i1, int32 counter, int64 initial_stack, int64 current_stack) noinlining
372 .override method instance void class GI2`1<!TC>::HF2<[1]>(class GI1`1<!!TF>, int32, int64, int64)
373 .locals init (int32 V_0)
389 callvirt instance void class GI1`1<!!0>::HF1<!0>(class GI2`1<!!0>, int32, int64, int64)
394 .method public instance void .ctor()
398 call instance void [mscorlib]System.Object::.ctor()
407 .method public instance void .ctor()
411 call instance void [mscorlib]System.Object::.ctor()
420 .method public instance void .ctor()
424 call instance void [mscorlib]System.Object::.ctor()
430 .class interface private abstract IC
432 .method public newslot abstract virtual instance !!T cast1<T>(object o, int32 counter, int64 stack) noinlining { }
433 .method public newslot abstract virtual instance class B cast2(object o, int32 counter, int64 stack) noinlining { }
434 .method public newslot abstract virtual instance !!T cast3<T>(object o, int32 counter, int64 stack) noinlining { }
435 .method public newslot abstract virtual instance class B[] cast4(object o, int32 counter, int64 stack) noinlining { }
436 .method public newslot abstract virtual instance !!T[] cast5<T>(object o, int32 counter, int64 stack) noinlining { }
442 .method public instance !!T cast1<T>(object o, int32 counter, int64 stack) noinlining
444 .locals init (int32 V_0)
458 call instance !!0 C::cast1<!!0>(object, int32, int64)
466 .method public instance class B cast2(object o, int32 counter, int64 stack) noinlining
468 .locals init (int32 V_0)
482 call instance class B C::cast2(object, int32, int64)
492 call instance !!0 C::cast1<class B>(object, int32, int64)
495 .method public instance !!T cast3<T>(object o, int32 counter, int64 stack) noinlining
497 .locals init (int32 V_0)
511 call instance !!0 C::cast3<!!0>(object, int32, int64)
521 call instance !!0 C::cast1<!!0>(object, int32, int64)
525 .method public instance class B[] cast4(object o, int32 counter, int64 stack) noinlining
527 .locals init (int32 V_0)
540 call instance class B[] C::cast4(object, int32, int64)
550 call instance !!0 C::cast1<class B[]>(object, int32, int64)
553 .method public instance !!T[] cast5<T>(object o, int32 counter, int64 stack) noinlining
555 .locals init (int32 V_0)
568 call instance !!0[] C::cast5<!!0>(object, int32, int64)
577 call instance !!0 C::cast1<!!0[]>(object, int32, int64)
580 .method public instance void .ctor()
584 call instance void [mscorlib]System.Object::.ctor()
588 .class public D`1<T1>
590 .method public static !!T cast1<T>(object o, int32 counter, int64 stack) noinlining
592 .locals init (int32 V_0)
605 call !!0 class D`1<!T1>::cast1<!!0>(object, int32, int64)
613 .method public instance class B cast2(object o, int32 counter, int64 stack) noinlining
615 .locals init (int32 V_0)
629 call instance class B class D`1<!T1>::cast2(object, int32, int64)
638 call !!0 class D`1<!T1>::cast1<class B>(object, int32, int64)
641 .method public instance !!T cast3<T>(object o, int32 counter, int64 stack) noinlining
643 .locals init (int32 V_0)
656 call instance !!0 class D`1<!T1>::cast3<!!0>(object, int32, int64)
664 call !!0 class D`1<!T1>::cast1<!!0>(object, int32, int64)
667 .method public instance class B[] cast4(object o, int32 counter, int64 stack) noinlining
669 .locals init (int32 V_0)
682 call instance class B[] class D`1<!T1>::cast4(object, int32, int64)
690 call !!0 class D`1<!T1>::cast1<class B[]>(object, int32, int64)
693 .method public instance !!T[] cast5<T>(object o, int32 counter, int64 stack) noinlining
695 .locals init (int32 V_0)
708 call instance !!0[] class D`1<!T1>::cast5<!!0>(object, int32, int64)
716 call !!0 class D`1<!T1>::cast1<!!0[]>(object, int32, int64)
719 .method public instance !T1 cast6(object o, int32 counter, int64 stack) noinlining
721 .locals init (int32 V_0)
734 call instance !0 class D`1<!T1>::cast6(object, int32, int64)
742 call !!0 class D`1<!T1>::cast1<!0>(object, int32, int64)
745 .method public instance !T1 cast7<T>(object o, int32 counter, int64 stack) noinlining
747 .locals init (int32 V_0)
760 call instance !0 class D`1<!T1>::cast7<!!0>(object, int32, int64)
768 call !!0 class D`1<!T1>::cast1<!0>(object, int32, int64)
771 .method public instance !T1[] cast8(object o, int32 counter, int64 stack) noinlining
773 .locals init (int32 V_0)
786 call instance !0[] class D`1<!T1>::cast8(object, int32, int64)
795 call instance !!0 class D`1<!T1>::cast3<!0[]>(object, int32, int64)
798 .method public instance !T1[] cast9<T>(object o, int32 counter, int64 stack) noinlining
800 .locals init (int32 V_0)
813 call instance !0[] class D`1<!T1>::cast9<!!0>(object, int32, int64)
822 call instance !!0 class D`1<!T1>::cast3<!0[]>(object, int32, int64)
825 .method public instance void .ctor()
829 call instance void [mscorlib]System.Object::.ctor()
835 .field private int32 i
836 .method private instance void print(object o) noinlining
846 .method public instance void Main() noinlining
848 .locals init (class D`1<class A> V_0, class D`1<class B> V_1, class D`1<class B[]> V_2, class C V_3, class B V_4, class B[] V_5, int32 V_6, class I1 V_7, class I2 V_8, class GI1`1<object> V_10, class GI1`1<object[]> V_11, class GI1`1<int32> V_12, class GI1`1<int32[]> V_13, class GI1`1<valuetype Point> V_14, class GI1`1<valuetype Point[]> V_15, class GI2`1<object> V_16, class GI2`1<object[]> V_17, class GI2`1<int32> V_18, class GI2`1<int32[]> V_19, class GI2`1<valuetype Point> V_20, class GI2`1<valuetype Point[]> V_21)
850 newobj instance void class D`1<class A>::.ctor()
852 newobj instance void class D`1<class B>::.ctor()
854 newobj instance void class D`1<class B[]>::.ctor()
856 newobj instance void C::.ctor()
858 newobj instance void B::.ctor()
864 newobj instance void class GC1`1<object>::.ctor()
866 newobj instance void class GC1`1<object[]>::.ctor()
868 newobj instance void class GC1`1<int32>::.ctor()
870 newobj instance void class GC1`1<int32[]>::.ctor()
872 newobj instance void class GC1`1<valuetype Point>::.ctor()
874 newobj instance void class GC1`1<valuetype Point[]>::.ctor()
876 newobj instance void class GC2`1<object>::.ctor()
878 newobj instance void class GC2`1<object[]>::.ctor()
880 newobj instance void class GC2`1<int32>::.ctor()
882 newobj instance void class GC2`1<int32[]>::.ctor()
884 newobj instance void class GC2`1<valuetype Point>::.ctor()
886 newobj instance void class GC2`1<valuetype Point[]>::.ctor()
889 newobj instance void C1::.ctor()
891 newobj instance void C2::.ctor()
900 callvirt instance class B class D`1<class A>::cast2(object, int32, int64)
901 call instance void C3::print(object)
909 callvirt instance !!0 class D`1<class A>::cast3<class B>(object, int32, int64)
910 call instance void C3::print(object)
918 callvirt instance !!0 class D`1<class A>::cast3<class B[]>(object, int32, int64)
919 call instance void C3::print(object)
927 callvirt instance class B[] class D`1<class A>::cast4(object, int32, int64)
928 call instance void C3::print(object)
936 callvirt instance !!0[] class D`1<class A>::cast5<class B>(object, int32, int64)
937 call instance void C3::print(object)
945 callvirt instance !0 class D`1<class B>::cast6(object, int32, int64)
946 call instance void C3::print(object)
954 callvirt instance !0 class D`1<class B>::cast7<class A>(object, int32, int64)
955 call instance void C3::print(object)
963 callvirt instance !0 class D`1<class B[]>::cast7<class A[]>(object, int32, int64)
964 call instance void C3::print(object)
972 callvirt instance !0[] class D`1<class B>::cast8(object, int32, int64)
973 call instance void C3::print(object)
981 callvirt instance !0[] class D`1<class B>::cast9<class A>(object, int32, int64)
982 call instance void C3::print(object)
990 callvirt instance class B C::cast2(object, int32, int64)
991 call instance void C3::print(object)
999 callvirt instance !!0 C::cast3<class B>(object, int32, int64)
1000 call instance void C3::print(object)
1008 callvirt instance !!0 C::cast3<class B[]>(object, int32, int64)
1009 call instance void C3::print(object)
1017 callvirt instance class B[] C::cast4(object, int32, int64)
1018 call instance void C3::print(object)
1026 callvirt instance !!0[] C::cast5<class B>(object, int32, int64)
1027 call instance void C3::print(object)
1037 callvirt instance void I1::F1(class I2, int32, int64, int64)
1047 callvirt instance void I1::GF1<object>(class I2, int32, int64, int64)
1057 callvirt instance void I1::GF1<class A>(class I2, int32, int64, int64)
1067 callvirt instance void I1::GF1<class A[]>(class I2, int32, int64, int64)
1077 callvirt instance void I1::GF1<int32>(class I2, int32, int64, int64)
1087 callvirt instance void I1::GF1<int32[]>(class I2, int32, int64, int64)
1097 callvirt instance void class GI1`1<object>::F1(class GI2`1<!0>, int32, int64, int64)
1107 callvirt instance void class GI1`1<object>::GF1<object>(class GI2`1<!0>, int32, int64, int64)
1117 callvirt instance void class GI1`1<object>::GF1<class A>(class GI2`1<!0>, int32, int64, int64)
1127 callvirt instance void class GI1`1<object>::GF1<class A[]>(class GI2`1<!0>, int32, int64, int64)
1137 callvirt instance void class GI1`1<object>::GF1<int32>(class GI2`1<!0>, int32, int64, int64)
1147 callvirt instance void class GI1`1<object>::GF1<int32[]>(class GI2`1<!0>, int32, int64, int64)
1157 callvirt instance void class GI1`1<object[]>::GF1<object[]>(class GI2`1<!0>, int32, int64, int64)
1167 callvirt instance void class GI1`1<object[]>::GF1<class A>(class GI2`1<!0>, int32, int64, int64)
1177 callvirt instance void class GI1`1<object[]>::GF1<class A[]>(class GI2`1<!0>, int32, int64, int64)
1187 callvirt instance void class GI1`1<object[]>::GF1<int32>(class GI2`1<!0>, int32, int64, int64)
1197 callvirt instance void class GI1`1<object[]>::GF1<int32[]>(class GI2`1<!0>, int32, int64, int64)
1207 callvirt instance void class GI1`1<int32>::GF1<object>(class GI2`1<!0>, int32, int64, int64)
1217 callvirt instance void class GI1`1<int32>::GF1<class A>(class GI2`1<!0>, int32, int64, int64)
1227 callvirt instance void class GI1`1<int32>::GF1<class A[]>(class GI2`1<!0>, int32, int64, int64)
1237 callvirt instance void class GI1`1<int32>::GF1<int32>(class GI2`1<!0>, int32, int64, int64)
1247 callvirt instance void class GI1`1<int32>::GF1<int32[]>(class GI2`1<!0>, int32, int64, int64)
1257 callvirt instance void class GI1`1<int32[]>::GF1<object>(class GI2`1<!0>, int32, int64, int64)
1267 callvirt instance void class GI1`1<int32[]>::GF1<class A>(class GI2`1<!0>, int32, int64, int64)
1277 callvirt instance void class GI1`1<int32[]>::GF1<class A[]>(class GI2`1<!0>, int32, int64, int64)
1287 callvirt instance void class GI1`1<int32[]>::GF1<int32>(class GI2`1<!0>, int32, int64, int64)
1297 callvirt instance void class GI1`1<int32[]>::GF1<int32[]>(class GI2`1<!0>, int32, int64, int64)
1307 callvirt instance void class GI1`1<valuetype Point>::GF1<object>(class GI2`1<!0>, int32, int64, int64)
1317 callvirt instance void class GI1`1<valuetype Point>::GF1<class A>(class GI2`1<!0>, int32, int64, int64)
1327 callvirt instance void class GI1`1<valuetype Point>::GF1<class A[]>(class GI2`1<!0>, int32, int64, int64)
1337 callvirt instance void class GI1`1<valuetype Point>::GF1<int32>(class GI2`1<!0>, int32, int64, int64)
1347 callvirt instance void class GI1`1<valuetype Point>::GF1<int32[]>(class GI2`1<!0>, int32, int64, int64)
1357 callvirt instance void class GI1`1<valuetype Point[]>::GF1<object>(class GI2`1<!0>, int32, int64, int64)
1367 callvirt instance void class GI1`1<valuetype Point[]>::GF1<class A>(class GI2`1<!0>, int32, int64, int64)
1377 callvirt instance void class GI1`1<valuetype Point[]>::GF1<class A[]>(class GI2`1<!0>, int32, int64, int64)
1387 callvirt instance void class GI1`1<valuetype Point[]>::GF1<int32>(class GI2`1<!0>, int32, int64, int64)
1398 callvirt instance void class GI1`1<valuetype Point[]>::GF1<int32[]>(class GI2`1<!0>, int32, int64, int64)
1403 .method public static void Main(string[] args) noinlining
1406 newobj instance void C3::.ctor()
1408 call instance void C3::Main()
1412 .method public instance void .ctor()
1416 call instance void [mscorlib]System.Object::.ctor()