1
2method Target.<init>():void
3{
4	.src "exitHooks.java"
5	.line 28
6	.prologue_end
7	.line 28
8	    0| move-object v0, v2
9	.local v0, "this", Target
10	    1| move-object v1, v0
11	    2| invoke-direct {v1}, java.lang.Object.<init>():void
12	    5| invoke-static/range {}, Tracer.OnExit():void
13	    8| return-void
14}
15
16method Target.main(java.lang.String[]):void
17{
18	.params "?"
19	.src "exitHooks.java"
20	.line 32
21	.prologue_end
22	.line 32
23	    0| move-object v0, v3
24	.local v0, "args", java.lang.String[]
25	    1| sget-object v1, java.lang.System.out
26	    3| const-string v2, "Hello, world!\n{"
27	    5| invoke-virtual {v1,v2}, java.io.PrintStream.println(java.lang.String):void
28	.line 33
29	    8| invoke-static {}, Target.test():void
30	.line 34
31	   11| sget-object v1, java.lang.System.out
32	   13| const-string v2, "}\nGood bye!"
33	   15| invoke-virtual {v1,v2}, java.io.PrintStream.println(java.lang.String):void
34	.line 35
35	   18| invoke-static/range {}, Tracer.OnExit():void
36	   21| return-void
37}
38
39method Target.test():void
40{
41	.src "exitHooks.java"
42	.line 39
43	.prologue_end
44	.line 39
45	    0| new-instance v1, Target
46	    2| move-object v8, v1
47	    3| move-object v1, v8
48	    4| move-object v2, v8
49	    5| invoke-direct {v2}, Target.<init>():void
50	    8| move-object v0, v1
51	.line 40
52	.local v0, "obj", Target
53	    9| sget-object v1, java.lang.System.out
54	   11| const-string v2, "Object(true)   : %s\n"
55	   13| const/4 v3, #+1 (0x00000001 | 1.40130e-45)
56	   14| new-array v3, v3, java.lang.Object[]
57	   16| move-object v8, v3
58	   17| move-object v3, v8
59	   18| move-object v4, v8
60	   19| const/4 v5, #+0 (0x00000000 | 0.00000)
61	   20| move-object v6, v0
62	   21| const/4 v7, #+1 (0x00000001 | 1.40130e-45)
63	   22| invoke-virtual {v6,v7}, Target.testObject(boolean):java.lang.Object
64	   25| move-result-object v6
65	   26| aput-object v6, v4, v5
66	   28| invoke-virtual {v1,v2,v3}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream
67	   31| move-result-object v1
68	.line 41
69	   32| sget-object v1, java.lang.System.out
70	   34| const-string v2, "Object(false)  : %s\n"
71	   36| const/4 v3, #+1 (0x00000001 | 1.40130e-45)
72	   37| new-array v3, v3, java.lang.Object[]
73	   39| move-object v8, v3
74	   40| move-object v3, v8
75	   41| move-object v4, v8
76	   42| const/4 v5, #+0 (0x00000000 | 0.00000)
77	   43| move-object v6, v0
78	   44| const/4 v7, #+0 (0x00000000 | 0.00000)
79	   45| invoke-virtual {v6,v7}, Target.testObject(boolean):java.lang.Object
80	   48| move-result-object v6
81	   49| aput-object v6, v4, v5
82	   51| invoke-virtual {v1,v2,v3}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream
83	   54| move-result-object v1
84	.line 42
85	   55| sget-object v1, java.lang.System.out
86	   57| const-string v2, "double         : %s\n"
87	   59| const/4 v3, #+1 (0x00000001 | 1.40130e-45)
88	   60| new-array v3, v3, java.lang.Object[]
89	   62| move-object v8, v3
90	   63| move-object v3, v8
91	   64| move-object v4, v8
92	   65| const/4 v5, #+0 (0x00000000 | 0.00000)
93	   66| move-object v6, v0
94	   67| const/4 v7, #+3 (0x00000003 | 4.20390e-45)
95	   68| invoke-virtual {v6,v7}, Target.testDouble(int):double
96	   71| move-result-wide v6:v7
97	   72| invoke-static {v6,v7}, java.lang.Double.valueOf(double):java.lang.Double
98	   75| move-result-object v6
99	   76| aput-object v6, v4, v5
100	   78| invoke-virtual {v1,v2,v3}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream
101	   81| move-result-object v1
102	.line 43
103	   82| sget-object v1, java.lang.System.out
104	   84| const-string v2, "int            : %s\n"
105	   86| const/4 v3, #+1 (0x00000001 | 1.40130e-45)
106	   87| new-array v3, v3, java.lang.Object[]
107	   89| move-object v8, v3
108	   90| move-object v3, v8
109	   91| move-object v4, v8
110	   92| const/4 v5, #+0 (0x00000000 | 0.00000)
111	   93| move-object v6, v0
112	   94| const/16 v7, #+100 (0x00000064 | 1.40130e-43)
113	   96| invoke-virtual {v6,v7}, Target.testInt(int):int
114	   99| move-result v6
115	  100| invoke-static {v6}, java.lang.Integer.valueOf(int):java.lang.Integer
116	  103| move-result-object v6
117	  104| aput-object v6, v4, v5
118	  106| invoke-virtual {v1,v2,v3}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream
119	  109| move-result-object v1
120	.line 44
121	  110| move-object v1, v0
122	  111| const/4 v2, #+1 (0x00000001 | 1.40130e-45)
123	  112| invoke-virtual {v1,v2}, Target.testVoid(boolean):void
124	.line 45
125	  115| invoke-static/range {}, Tracer.OnExit():void
126	  118| return-void
127}
128
129method Target.testDouble(int):double
130{
131	.params "?"
132	.src "exitHooks.java"
133	.line 60
134	.prologue_end
135	.line 60
136	    0| move-object v0, v4
137	.local v0, "this", Target
138	    1| move v1, v5
139	.local v1, "n", int
140	    2| move v2, v1
141	    3| packed-switch v2, Label_5
142	.line 65
143	    6| const-wide v2:v3, #+4621762822593629389 (0x4023cccccccccccd | 9.90000)
144	   11| move-wide v0:v1, v2:v3
145Label_1:
146	.end_local v0
147	   12| invoke-static/range {v0..v1}, Tracer.OnExit(double):double
148	   15| move-result-wide v0:v1
149	   16| return-wide v0:v1
150Label_2:
151	.line 62
152	.restart_local v0
153	   17| const-wide v2:v3, #+4607632778762754458 (0x3ff199999999999a | 1.10000)
154	   22| move-wide v0:v1, v2:v3
155	   23| goto/16 Label_1
156Label_3:
157	.line 63
158	   25| const-wide v2:v3, #+4612136378390124954 (0x400199999999999a | 2.20000)
159	   30| move-wide v0:v1, v2:v3
160	   31| goto/16 Label_1
161Label_4:
162	.line 64
163	   33| const-wide v2:v3, #+4614613358185178726 (0x400a666666666666 | 3.30000)
164	   38| move-wide v0:v1, v2:v3
165	   39| goto/16 Label_1
166	   41| nop
167Label_5: <aligned>
168	.line 60
169	   42| packed-switch-payload
170		    1: Label_2
171		    2: Label_3
172		    3: Label_4
173}
174
175method Target.testInt(int):int
176{
177	.params "?"
178	.src "exitHooks.java"
179	.line 71
180	.prologue_end
181	.line 71
182	    0| move-object v0, v3
183	.local v0, "this", Target
184	    1| move v1, v4
185	.local v1, "n", int
186	    2| move v2, v1
187	    3| sparse-switch v2, Label_5
188	.line 76
189	    6| const/16 v2, #+123 (0x0000007b | 1.72360e-43)
190	    8| move v0, v2
191Label_1:
192	.end_local v0
193	    9| invoke-static/range {v0..v0}, Tracer.OnExit(int):int
194	   12| move-result v0
195	   13| return v0
196Label_2:
197	.line 73
198	.restart_local v0
199	   14| const/4 v2, #+1 (0x00000001 | 1.40130e-45)
200	   15| move v0, v2
201	   16| goto/16 Label_1
202Label_3:
203	.line 74
204	   18| const/4 v2, #+2 (0x00000002 | 2.80260e-45)
205	   19| move v0, v2
206	   20| goto/16 Label_1
207Label_4:
208	.line 75
209	   22| const/4 v2, #+3 (0x00000003 | 4.20390e-45)
210	   23| move v0, v2
211	   24| goto/16 Label_1
212	.line 71
213	   26| nop
214	   27| nop
215Label_5: <aligned>
216	   28| sparse-switch-payload
217		   10: Label_2
218		   20: Label_3
219		   30: Label_4
220}
221
222method Target.testObject(boolean):java.lang.Object
223{
224	.params "?"
225	.src "exitHooks.java"
226	.line 49
227	.prologue_end
228	.line 49
229	    0| move-object v0, v5
230	.local v0, "this", Target
231	    1| move v1, v6
232	.local v1, "flag", boolean
233	    2| move v2, v1
234	    3| if-eqz v2, Label_2
235	.line 51
236	    5| sget-object v2, java.lang.System.out
237	    7| const-string v3, "Flag!\n"
238	    9| const/4 v4, #+0 (0x00000000 | 0.00000)
239	   10| new-array v4, v4, java.lang.Object[]
240	   12| invoke-virtual {v2,v3,v4}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream
241	   15| move-result-object v2
242	.line 52
243	   16| const-string v2, "Sigh"
244	   18| move-object v0, v2
245Label_1:
246	.line 55
247	.end_local v0
248	   19| invoke-static/range {v0..v0}, Tracer.OnExit(java.lang.Object):java.lang.Object
249	   22| move-result-object v0
250	   23| return-object v0
251Label_2:
252	.restart_local v0
253	   24| const-string v2, "Blah"
254	   26| move-object v0, v2
255	   27| goto/16 Label_1
256}
257
258method Target.testVoid(boolean):void
259{
260	.params "?"
261	.src "exitHooks.java"
262	.line 82
263	.prologue_end
264	.line 82
265	    0| move-object v0, v5
266	.local v0, "this", Target
267	    1| move v1, v6
268	.local v1, "flag", boolean
269	    2| move v2, v1
270	    3| if-eqz v2, Label_2
271	.line 84
272	    5| sget-object v2, java.lang.System.out
273	    7| const-string v3, "True!\n"
274	    9| const/4 v4, #+0 (0x00000000 | 0.00000)
275	   10| new-array v4, v4, java.lang.Object[]
276	   12| invoke-virtual {v2,v3,v4}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream
277	   15| move-result-object v2
278Label_1:
279	.line 85
280	.line 90
281	   16| invoke-static/range {}, Tracer.OnExit():void
282	   19| return-void
283Label_2:
284	.line 89
285	   20| sget-object v2, java.lang.System.out
286	   22| const-string v3, "False!\n"
287	   24| const/4 v4, #+0 (0x00000000 | 0.00000)
288	   25| new-array v4, v4, java.lang.Object[]
289	   27| invoke-virtual {v2,v3,v4}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream
290	   30| move-result-object v2
291	.line 90
292	   31| goto/16 Label_1
293}
294
295method Tracer.<init>():void
296{
297	.src "exitHooks.java"
298	.line 2
299	.prologue_end
300	.line 2
301	    0| move-object v0, v2
302	.local v0, "this", Tracer
303	    1| move-object v1, v0
304	    2| invoke-direct {v1}, java.lang.Object.<init>():void
305	    5| invoke-static/range {}, Tracer.OnExit():void
306	    8| return-void
307}
308
309method Tracer.onExit(double):double
310{
311	.params "?"
312	.src "exitHooks.java"
313	.line 12
314	.prologue_end
315	.line 12
316	    0| move-wide v0:v1, v10:v11
317	.local v0, "value", double
318	    1| sget-object v2, java.lang.System.out
319	    3| const-string v3, ">>> onExit(double: %f)\n"
320	    5| const/4 v4, #+1 (0x00000001 | 1.40130e-45)
321	    6| new-array v4, v4, java.lang.Object[]
322	    8| move-object v9, v4
323	    9| move-object v4, v9
324	   10| move-object v5, v9
325	   11| const/4 v6, #+0 (0x00000000 | 0.00000)
326	   12| move-wide v7:v8, v0:v1
327	   13| invoke-static {v7,v8}, java.lang.Double.valueOf(double):java.lang.Double
328	   16| move-result-object v7
329	   17| aput-object v7, v5, v6
330	   19| invoke-virtual {v2,v3,v4}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream
331	   22| move-result-object v2
332	.line 13
333	   23| move-wide v2:v3, v0:v1
334	   24| neg-double v2:v3, v2:v3
335	   25| move-wide v0:v1, v2:v3
336	.end_local v0
337	   26| invoke-static/range {v0..v1}, Tracer.OnExit(double):double
338	   29| move-result-wide v0:v1
339	   30| return-wide v0:v1
340}
341
342method Tracer.onExit(int):int
343{
344	.params "?"
345	.src "exitHooks.java"
346	.line 18
347	.prologue_end
348	.line 18
349	    0| move v0, v8
350	.local v0, "value", int
351	    1| sget-object v1, java.lang.System.out
352	    3| const-string v2, ">>> onExit(int: %d)\n"
353	    5| const/4 v3, #+1 (0x00000001 | 1.40130e-45)
354	    6| new-array v3, v3, java.lang.Object[]
355	    8| move-object v7, v3
356	    9| move-object v3, v7
357	   10| move-object v4, v7
358	   11| const/4 v5, #+0 (0x00000000 | 0.00000)
359	   12| move v6, v0
360	   13| invoke-static {v6}, java.lang.Integer.valueOf(int):java.lang.Integer
361	   16| move-result-object v6
362	   17| aput-object v6, v4, v5
363	   19| invoke-virtual {v1,v2,v3}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream
364	   22| move-result-object v1
365	.line 19
366	   23| move v1, v0
367	   24| const/16 v2, #+10 (0x0000000a | 1.40130e-44)
368	   26| mul-int/lit8 v1, v1, #+10 (0x0000000a | 1.40130e-44)
369	   28| move v0, v1
370	.end_local v0
371	   29| invoke-static/range {v0..v0}, Tracer.OnExit(int):int
372	   32| move-result v0
373	   33| return v0
374}
375
376method Tracer.onExit(java.lang.Object):java.lang.Object
377{
378	.params "?"
379	.src "exitHooks.java"
380	.line 6
381	.prologue_end
382	.line 6
383	    0| move-object v0, v8
384	.local v0, "value", java.lang.Object
385	    1| sget-object v1, java.lang.System.out
386	    3| const-string v2, ">>> onExit(Object: %s)\n"
387	    5| const/4 v3, #+1 (0x00000001 | 1.40130e-45)
388	    6| new-array v3, v3, java.lang.Object[]
389	    8| move-object v7, v3
390	    9| move-object v3, v7
391	   10| move-object v4, v7
392	   11| const/4 v5, #+0 (0x00000000 | 0.00000)
393	   12| move-object v6, v0
394	   13| aput-object v6, v4, v5
395	   15| invoke-virtual {v1,v2,v3}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream
396	   18| move-result-object v1
397	.line 7
398	   19| move-object v1, v0
399	   20| move-object v0, v1
400	.end_local v0
401	   21| invoke-static/range {v0..v0}, Tracer.OnExit(java.lang.Object):java.lang.Object
402	   24| move-result-object v0
403	   25| return-object v0
404}
405
406method Tracer.onExit():void
407{
408	.src "exitHooks.java"
409	.line 24
410	.prologue_end
411	.line 24
412	    0| sget-object v0, java.lang.System.out
413	    2| const-string v1, ">>> onExit(void)\n"
414	    4| const/4 v2, #+0 (0x00000000 | 0.00000)
415	    5| new-array v2, v2, java.lang.Object[]
416	    7| invoke-virtual {v0,v1,v2}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream
417	   10| move-result-object v0
418	.line 25
419	   11| invoke-static/range {}, Tracer.OnExit():void
420	   14| return-void
421}
422