Merge pull request #5428 from kumpera/wasm-support-p2
[mono.git] / mono / tests / instance_tailrec.il
1 /* inspired by
2
3     ./mcs/mcs/assign.cs:
4             SimpleAssign:CheckEqualAssign ()
5
6 */
7
8 .assembly extern mscorlib
9 {
10   .ver 4:0:0:0
11   .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
12 }
13 .assembly 'instance_tailrec'
14 {
15   .custom instance void class [mscorlib]System.Diagnostics.DebuggableAttribute::'.ctor'(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) =  (01 00 02 01 00 00 00 00 ) // ........
16
17   .custom instance void class [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::'.ctor'() =  (
18                 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78   // ....T..WrapNonEx
19                 63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01       ) // ceptionThrows.
20
21   .permissionset reqmin = {[mscorlib]System.Security.Permissions.SecurityPermissionAttribute = {property bool 'SkipVerification' = bool(true)}}
22   .hash algorithm 0x00008004
23   .ver  0:0:0:0
24 }
25 .module instance_tailrec.exe // GUID = {5C65CFE6-9730-430A-BE4D-0F9BAC9C03DA}
26
27 .custom instance void class [mscorlib]System.Security.UnverifiableCodeAttribute::'.ctor'() =  (01 00 00 00 ) // ....
28
29
30 .namespace test
31 {
32   .class public auto ansi beforefieldinit TailRec
33         extends [mscorlib]System.Object
34   {
35     .field  public  int32 counter
36
37     // method line 1
38     .method public hidebysig specialname rtspecialname 
39            instance default void '.ctor' (int32 a)  cil managed 
40     {
41         // Method begins at RVA 0x2050
42         // Code size 15 (0xf)
43         .maxstack 8
44         IL_0000:  ldarg.0 
45         IL_0001:  call instance void object::'.ctor'()
46         IL_0006:  nop 
47         IL_0007:  ldarg.0 
48         IL_0008:  ldarg.1 
49         IL_0009:  stfld int32 test.TailRec::counter
50         IL_000e:  ret 
51     } // end of method TailRec::.ctor
52
53     // method line 2
54     .method public hidebysig 
55            instance default bool tailrec (object obj)  cil managed 
56     {
57         // Method begins at RVA 0x2060
58         // Code size 78 (0x4e)
59         .maxstack 3
60         .locals init (
61                 bool    V_0)
62         IL_0000:  nop 
63         IL_0001:  ldarg.1 
64         IL_0002:  brtrue IL_003f
65
66         IL_0007:  nop 
67         IL_0008:  ldarg.0 
68         IL_0009:  dup 
69         IL_000a:  ldfld int32 test.TailRec::counter
70         IL_000f:  ldc.i4.1 
71         IL_0010:  sub 
72         IL_0011:  stfld int32 test.TailRec::counter
73         IL_0016:  ldarg.0 
74         IL_0017:  ldfld int32 test.TailRec::counter
75         IL_001c:  ldc.i4.0 
76         IL_001d:  bgt IL_0029
77
78         IL_0022:  ldc.i4.0 
79         IL_0023:  stloc.0 
80         IL_0024:  br IL_004c
81
82         IL_0029:  ldarg.0 
83         IL_002a:  brfalse IL_0038
84
85         IL_002f:  ldarg.0 
86         IL_0030:  ldnull 
87         // here is the tail call
88         IL_0031:  call instance bool class test.TailRec::tailrec(object)
89         ret
90
91         IL_0038:  ldc.i4.0 
92         IL_0039:  stloc.0 
93         IL_003a:  br IL_004c
94
95         IL_003f:  ldarg.0 
96         IL_0040:  ldarg.1 
97         IL_0041:  callvirt instance bool object::Equals(object)
98         IL_0046:  stloc.0 
99         IL_0047:  br IL_004c
100
101         IL_004c:  ldloc.0 
102         IL_004d:  ret 
103     } // end of method TailRec::tailrec
104
105     // method line 3
106     .method public static hidebysig 
107            default int32 Main ()  cil managed 
108     {
109         // Method begins at RVA 0x20bc
110         .entrypoint
111         // Code size 112 (0x70)
112         .maxstack 2
113         .locals init (
114                 class test.TailRec      V_0,
115                 bool    V_1,
116                 int32   V_2,
117                 int32   V_3,
118                 int32   V_4,
119                 int32   V_5)
120         IL_0000:  nop 
121         IL_0001:  ldnull 
122         IL_0002:  stloc.0 
123         IL_0003:  ldc.i4.1 
124         IL_0004:  stloc.1 
125         IL_0005:  ldc.i4 1337
126         IL_000a:  stloc.2 
127         IL_000b:  ldc.i4 347134
128         IL_0010:  stloc.3 
129         IL_0011:  ldc.i4.0 
130         IL_0012:  stloc.s 4
131         IL_0014:  br IL_0031
132
133         IL_0019:  nop 
134         IL_001a:  ldloc.s 4
135         IL_001c:  newobj instance void class test.TailRec::'.ctor'(int32)
136         IL_0021:  stloc.0 
137         IL_0022:  ldloc.0 
138         IL_0023:  ldnull 
139         IL_0024:  callvirt instance bool class test.TailRec::tailrec(object)
140         IL_0029:  stloc.1 
141         IL_002a:  nop 
142         IL_002b:  ldloc.s 4
143         IL_002d:  ldc.i4.1 
144         IL_002e:  add 
145         IL_002f:  stloc.s 4
146         IL_0031:  ldloc.s 4
147         IL_0033:  ldc.i4 100
148         IL_0038:  blt IL_0019
149
150         IL_003d:  ldloc.0 
151         IL_003e:  brfalse IL_0065
152
153         IL_0043:  ldloc.1 
154         IL_0044:  brtrue IL_0065
155
156         IL_0049:  ldloc.2 
157         IL_004a:  ldc.i4 1337
158         IL_004f:  bne.un IL_0065
159
160         IL_0054:  ldloc.3 
161         IL_0055:  ldc.i4 347134
162         IL_005a:  bne.un IL_0065
163
164         IL_005f:  ldc.i4.0 
165         IL_0060:  br IL_0066
166
167         IL_0065:  ldc.i4.1 
168         IL_0066:  stloc.s 5
169         IL_0068:  br IL_006d
170
171         IL_006d:  ldloc.s 5
172         IL_006f:  ret 
173     } // end of method TailRec::Main
174
175   } // end of class test.TailRec
176 }
177