method Target.<init>():void { ............................. begin block 1 ............................. .src "exitHooks.java" .line 28 .prologue_end .line 28 0| move-object v0, v2 .local v0, "this", Target 1| move-object v1, v0 2| invoke-direct {v1}, java.lang.Object.<init>():void .............................. end block 1 .............................. ............................. begin block 2 ............................. 5| return-void .............................. end block 2 .............................. } method Target.main(java.lang.String[]):void { ............................. begin block 1 ............................. .params "?" .src "exitHooks.java" .line 32 .prologue_end .line 32 0| move-object v0, v3 .local v0, "args", java.lang.String[] 1| sget-object v1, java.lang.System.out .............................. end block 1 .............................. ............................. begin block 2 ............................. 3| const-string v2, "Hello, world!\n{" .............................. end block 2 .............................. ............................. begin block 3 ............................. 5| invoke-virtual {v1,v2}, java.io.PrintStream.println(java.lang.String):void .............................. end block 3 .............................. ............................. begin block 4 ............................. .line 33 8| invoke-static {}, Target.test():void .............................. end block 4 .............................. ............................. begin block 5 ............................. .line 34 11| sget-object v1, java.lang.System.out .............................. end block 5 .............................. ............................. begin block 6 ............................. 13| const-string v2, "}\nGood bye!" .............................. end block 6 .............................. ............................. begin block 7 ............................. 15| invoke-virtual {v1,v2}, java.io.PrintStream.println(java.lang.String):void .............................. end block 7 .............................. ............................. begin block 8 ............................. .line 35 18| return-void .............................. end block 8 .............................. } method Target.test():void { ............................. begin block 1 ............................. .src "exitHooks.java" .line 39 .prologue_end .line 39 0| new-instance v1, Target .............................. end block 1 .............................. ............................. begin block 2 ............................. 2| move-object v8, v1 3| move-object v1, v8 4| move-object v2, v8 5| invoke-direct {v2}, Target.<init>():void .............................. end block 2 .............................. ............................. begin block 3 ............................. 8| move-object v0, v1 .line 40 .local v0, "obj", Target 9| sget-object v1, java.lang.System.out .............................. end block 3 .............................. ............................. begin block 4 ............................. 11| const-string v2, "Object(true) : %s\n" .............................. end block 4 .............................. ............................. begin block 5 ............................. 13| const/4 v3, #+1 (0x00000001 | 1.40130e-45) 14| new-array v3, v3, java.lang.Object[] .............................. end block 5 .............................. ............................. begin block 6 ............................. 16| move-object v8, v3 17| move-object v3, v8 18| move-object v4, v8 19| const/4 v5, #+0 (0x00000000 | 0.00000) 20| move-object v6, v0 21| const/4 v7, #+1 (0x00000001 | 1.40130e-45) 22| invoke-virtual {v6,v7}, Target.testObject(boolean):java.lang.Object .............................. end block 6 .............................. ............................. begin block 7 ............................. 25| move-result-object v6 26| aput-object v6, v4, v5 .............................. end block 7 .............................. ............................. begin block 8 ............................. 28| invoke-virtual {v1,v2,v3}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream .............................. end block 8 .............................. ............................. begin block 9 ............................. 31| move-result-object v1 .line 41 32| sget-object v1, java.lang.System.out .............................. end block 9 .............................. ............................. begin block 10 ............................. 34| const-string v2, "Object(false) : %s\n" .............................. end block 10 .............................. ............................. begin block 11 ............................. 36| const/4 v3, #+1 (0x00000001 | 1.40130e-45) 37| new-array v3, v3, java.lang.Object[] .............................. end block 11 .............................. ............................. begin block 12 ............................. 39| move-object v8, v3 40| move-object v3, v8 41| move-object v4, v8 42| const/4 v5, #+0 (0x00000000 | 0.00000) 43| move-object v6, v0 44| const/4 v7, #+0 (0x00000000 | 0.00000) 45| invoke-virtual {v6,v7}, Target.testObject(boolean):java.lang.Object .............................. end block 12 .............................. ............................. begin block 13 ............................. 48| move-result-object v6 49| aput-object v6, v4, v5 .............................. end block 13 .............................. ............................. begin block 14 ............................. 51| invoke-virtual {v1,v2,v3}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream .............................. end block 14 .............................. ............................. begin block 15 ............................. 54| move-result-object v1 .line 42 55| sget-object v1, java.lang.System.out .............................. end block 15 .............................. ............................. begin block 16 ............................. 57| const-string v2, "double : %s\n" .............................. end block 16 .............................. ............................. begin block 17 ............................. 59| const/4 v3, #+1 (0x00000001 | 1.40130e-45) 60| new-array v3, v3, java.lang.Object[] .............................. end block 17 .............................. ............................. begin block 18 ............................. 62| move-object v8, v3 63| move-object v3, v8 64| move-object v4, v8 65| const/4 v5, #+0 (0x00000000 | 0.00000) 66| move-object v6, v0 67| const/4 v7, #+3 (0x00000003 | 4.20390e-45) 68| invoke-virtual {v6,v7}, Target.testDouble(int):double .............................. end block 18 .............................. ............................. begin block 19 ............................. 71| move-result-wide v6:v7 72| invoke-static {v6,v7}, java.lang.Double.valueOf(double):java.lang.Double .............................. end block 19 .............................. ............................. begin block 20 ............................. 75| move-result-object v6 76| aput-object v6, v4, v5 .............................. end block 20 .............................. ............................. begin block 21 ............................. 78| invoke-virtual {v1,v2,v3}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream .............................. end block 21 .............................. ............................. begin block 22 ............................. 81| move-result-object v1 .line 43 82| sget-object v1, java.lang.System.out .............................. end block 22 .............................. ............................. begin block 23 ............................. 84| const-string v2, "int : %s\n" .............................. end block 23 .............................. ............................. begin block 24 ............................. 86| const/4 v3, #+1 (0x00000001 | 1.40130e-45) 87| new-array v3, v3, java.lang.Object[] .............................. end block 24 .............................. ............................. begin block 25 ............................. 89| move-object v8, v3 90| move-object v3, v8 91| move-object v4, v8 92| const/4 v5, #+0 (0x00000000 | 0.00000) 93| move-object v6, v0 94| const/16 v7, #+100 (0x00000064 | 1.40130e-43) 96| invoke-virtual {v6,v7}, Target.testInt(int):int .............................. end block 25 .............................. ............................. begin block 26 ............................. 99| move-result v6 100| invoke-static {v6}, java.lang.Integer.valueOf(int):java.lang.Integer .............................. end block 26 .............................. ............................. begin block 27 ............................. 103| move-result-object v6 104| aput-object v6, v4, v5 .............................. end block 27 .............................. ............................. begin block 28 ............................. 106| invoke-virtual {v1,v2,v3}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream .............................. end block 28 .............................. ............................. begin block 29 ............................. 109| move-result-object v1 .line 44 110| move-object v1, v0 111| const/4 v2, #+1 (0x00000001 | 1.40130e-45) 112| invoke-virtual {v1,v2}, Target.testVoid(boolean):void .............................. end block 29 .............................. ............................. begin block 30 ............................. .line 45 115| return-void .............................. end block 30 .............................. } method Target.testDouble(int):double { ............................. begin block 1 ............................. .params "?" .src "exitHooks.java" .line 60 .prologue_end .line 60 0| move-object v0, v4 .local v0, "this", Target 1| move v1, v5 .local v1, "n", int 2| move v2, v1 3| packed-switch v2, Label_5 .............................. end block 1 .............................. ............................. begin block 2 ............................. .line 65 6| const-wide v2:v3, #+4621762822593629389 (0x4023cccccccccccd | 9.90000) 11| move-wide v0:v1, v2:v3 .............................. end block 2 .............................. ............................. begin block 3 ............................. Label_1: .end_local v0 12| return-wide v0:v1 .............................. end block 3 .............................. ............................. begin block 4 ............................. Label_2: .line 62 .restart_local v0 13| const-wide v2:v3, #+4607632778762754458 (0x3ff199999999999a | 1.10000) 18| move-wide v0:v1, v2:v3 19| goto Label_1 .............................. end block 4 .............................. ............................. begin block 5 ............................. Label_3: .line 63 20| const-wide v2:v3, #+4612136378390124954 (0x400199999999999a | 2.20000) 25| move-wide v0:v1, v2:v3 26| goto Label_1 .............................. end block 5 .............................. ............................. begin block 6 ............................. Label_4: .line 64 27| const-wide v2:v3, #+4614613358185178726 (0x400a666666666666 | 3.30000) 32| move-wide v0:v1, v2:v3 33| goto Label_1 .............................. end block 6 .............................. Label_5: <aligned> .line 60 34| packed-switch-payload 1: Label_2 2: Label_3 3: Label_4 } method Target.testInt(int):int { ............................. begin block 1 ............................. .params "?" .src "exitHooks.java" .line 71 .prologue_end .line 71 0| move-object v0, v3 .local v0, "this", Target 1| move v1, v4 .local v1, "n", int 2| move v2, v1 3| sparse-switch v2, Label_5 .............................. end block 1 .............................. ............................. begin block 2 ............................. .line 76 6| const/16 v2, #+123 (0x0000007b | 1.72360e-43) 8| move v0, v2 .............................. end block 2 .............................. ............................. begin block 3 ............................. Label_1: .end_local v0 9| return v0 .............................. end block 3 .............................. ............................. begin block 4 ............................. Label_2: .line 73 .restart_local v0 10| const/4 v2, #+1 (0x00000001 | 1.40130e-45) 11| move v0, v2 12| goto Label_1 .............................. end block 4 .............................. ............................. begin block 5 ............................. Label_3: .line 74 13| const/4 v2, #+2 (0x00000002 | 2.80260e-45) 14| move v0, v2 15| goto Label_1 .............................. end block 5 .............................. ............................. begin block 6 ............................. Label_4: .line 75 16| const/4 v2, #+3 (0x00000003 | 4.20390e-45) 17| move v0, v2 18| goto Label_1 .............................. end block 6 .............................. ............................. begin block 7 ............................. .line 71 19| nop .............................. end block 7 .............................. Label_5: <aligned> 20| sparse-switch-payload 10: Label_2 20: Label_3 30: Label_4 } method Target.testObject(boolean):java.lang.Object { ............................. begin block 1 ............................. .params "?" .src "exitHooks.java" .line 49 .prologue_end .line 49 0| move-object v0, v5 .local v0, "this", Target 1| move v1, v6 .local v1, "flag", boolean 2| move v2, v1 3| if-eqz v2, Label_2 .............................. end block 1 .............................. ............................. begin block 2 ............................. .line 51 5| sget-object v2, java.lang.System.out .............................. end block 2 .............................. ............................. begin block 3 ............................. 7| const-string v3, "Flag!\n" .............................. end block 3 .............................. ............................. begin block 4 ............................. 9| const/4 v4, #+0 (0x00000000 | 0.00000) 10| new-array v4, v4, java.lang.Object[] .............................. end block 4 .............................. ............................. begin block 5 ............................. 12| invoke-virtual {v2,v3,v4}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream .............................. end block 5 .............................. ............................. begin block 6 ............................. 15| move-result-object v2 .line 52 16| const-string v2, "Sigh" .............................. end block 6 .............................. ............................. begin block 7 ............................. 18| move-object v0, v2 .............................. end block 7 .............................. ............................. begin block 8 ............................. Label_1: .line 55 .end_local v0 19| return-object v0 .............................. end block 8 .............................. ............................. begin block 9 ............................. Label_2: .restart_local v0 20| const-string v2, "Blah" .............................. end block 9 .............................. ............................. begin block 10 ............................. 22| move-object v0, v2 23| goto Label_1 .............................. end block 10 .............................. } method Target.testVoid(boolean):void { ............................. begin block 1 ............................. .params "?" .src "exitHooks.java" .line 82 .prologue_end .line 82 0| move-object v0, v5 .local v0, "this", Target 1| move v1, v6 .local v1, "flag", boolean 2| move v2, v1 3| if-eqz v2, Label_2 .............................. end block 1 .............................. ............................. begin block 2 ............................. .line 84 5| sget-object v2, java.lang.System.out .............................. end block 2 .............................. ............................. begin block 3 ............................. 7| const-string v3, "True!\n" .............................. end block 3 .............................. ............................. begin block 4 ............................. 9| const/4 v4, #+0 (0x00000000 | 0.00000) 10| new-array v4, v4, java.lang.Object[] .............................. end block 4 .............................. ............................. begin block 5 ............................. 12| invoke-virtual {v2,v3,v4}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream .............................. end block 5 .............................. ............................. begin block 6 ............................. 15| move-result-object v2 .............................. end block 6 .............................. ............................. begin block 7 ............................. Label_1: .line 85 .line 90 16| return-void .............................. end block 7 .............................. ............................. begin block 8 ............................. Label_2: .line 89 17| sget-object v2, java.lang.System.out .............................. end block 8 .............................. ............................. begin block 9 ............................. 19| const-string v3, "False!\n" .............................. end block 9 .............................. ............................. begin block 10 ............................. 21| const/4 v4, #+0 (0x00000000 | 0.00000) 22| new-array v4, v4, java.lang.Object[] .............................. end block 10 .............................. ............................. begin block 11 ............................. 24| invoke-virtual {v2,v3,v4}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream .............................. end block 11 .............................. ............................. begin block 12 ............................. 27| move-result-object v2 .line 90 28| goto Label_1 .............................. end block 12 .............................. } method Tracer.<init>():void { ............................. begin block 1 ............................. .src "exitHooks.java" .line 2 .prologue_end .line 2 0| move-object v0, v2 .local v0, "this", Tracer 1| move-object v1, v0 2| invoke-direct {v1}, java.lang.Object.<init>():void .............................. end block 1 .............................. ............................. begin block 2 ............................. 5| return-void .............................. end block 2 .............................. } method Tracer.onExit(double):double { ............................. begin block 1 ............................. .params "?" .src "exitHooks.java" .line 12 .prologue_end .line 12 0| move-wide v0:v1, v10:v11 .local v0, "value", double 1| sget-object v2, java.lang.System.out .............................. end block 1 .............................. ............................. begin block 2 ............................. 3| const-string v3, ">>> onExit(double: %f)\n" .............................. end block 2 .............................. ............................. begin block 3 ............................. 5| const/4 v4, #+1 (0x00000001 | 1.40130e-45) 6| new-array v4, v4, java.lang.Object[] .............................. end block 3 .............................. ............................. begin block 4 ............................. 8| move-object v9, v4 9| move-object v4, v9 10| move-object v5, v9 11| const/4 v6, #+0 (0x00000000 | 0.00000) 12| move-wide v7:v8, v0:v1 13| invoke-static {v7,v8}, java.lang.Double.valueOf(double):java.lang.Double .............................. end block 4 .............................. ............................. begin block 5 ............................. 16| move-result-object v7 17| aput-object v7, v5, v6 .............................. end block 5 .............................. ............................. begin block 6 ............................. 19| invoke-virtual {v2,v3,v4}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream .............................. end block 6 .............................. ............................. begin block 7 ............................. 22| move-result-object v2 .line 13 23| move-wide v2:v3, v0:v1 24| neg-double v2:v3, v2:v3 25| move-wide v0:v1, v2:v3 .end_local v0 26| return-wide v0:v1 .............................. end block 7 .............................. } method Tracer.onExit(int):int { ............................. begin block 1 ............................. .params "?" .src "exitHooks.java" .line 18 .prologue_end .line 18 0| move v0, v8 .local v0, "value", int 1| sget-object v1, java.lang.System.out .............................. end block 1 .............................. ............................. begin block 2 ............................. 3| const-string v2, ">>> onExit(int: %d)\n" .............................. end block 2 .............................. ............................. begin block 3 ............................. 5| const/4 v3, #+1 (0x00000001 | 1.40130e-45) 6| new-array v3, v3, java.lang.Object[] .............................. end block 3 .............................. ............................. begin block 4 ............................. 8| move-object v7, v3 9| move-object v3, v7 10| move-object v4, v7 11| const/4 v5, #+0 (0x00000000 | 0.00000) 12| move v6, v0 13| invoke-static {v6}, java.lang.Integer.valueOf(int):java.lang.Integer .............................. end block 4 .............................. ............................. begin block 5 ............................. 16| move-result-object v6 17| aput-object v6, v4, v5 .............................. end block 5 .............................. ............................. begin block 6 ............................. 19| invoke-virtual {v1,v2,v3}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream .............................. end block 6 .............................. ............................. begin block 7 ............................. 22| move-result-object v1 .line 19 23| move v1, v0 24| const/16 v2, #+10 (0x0000000a | 1.40130e-44) 26| mul-int/lit8 v1, v1, #+10 (0x0000000a | 1.40130e-44) 28| move v0, v1 .end_local v0 29| return v0 .............................. end block 7 .............................. } method Tracer.onExit(java.lang.Object):java.lang.Object { ............................. begin block 1 ............................. .params "?" .src "exitHooks.java" .line 6 .prologue_end .line 6 0| move-object v0, v8 .local v0, "value", java.lang.Object 1| sget-object v1, java.lang.System.out .............................. end block 1 .............................. ............................. begin block 2 ............................. 3| const-string v2, ">>> onExit(Object: %s)\n" .............................. end block 2 .............................. ............................. begin block 3 ............................. 5| const/4 v3, #+1 (0x00000001 | 1.40130e-45) 6| new-array v3, v3, java.lang.Object[] .............................. end block 3 .............................. ............................. begin block 4 ............................. 8| move-object v7, v3 9| move-object v3, v7 10| move-object v4, v7 11| const/4 v5, #+0 (0x00000000 | 0.00000) 12| move-object v6, v0 13| aput-object v6, v4, v5 .............................. end block 4 .............................. ............................. begin block 5 ............................. 15| invoke-virtual {v1,v2,v3}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream .............................. end block 5 .............................. ............................. begin block 6 ............................. 18| move-result-object v1 .line 7 19| move-object v1, v0 20| move-object v0, v1 .end_local v0 21| return-object v0 .............................. end block 6 .............................. } method Tracer.onExit():void { ............................. begin block 1 ............................. .src "exitHooks.java" .line 24 .prologue_end .line 24 0| sget-object v0, java.lang.System.out .............................. end block 1 .............................. ............................. begin block 2 ............................. 2| const-string v1, ">>> onExit(void)\n" .............................. end block 2 .............................. ............................. begin block 3 ............................. 4| const/4 v2, #+0 (0x00000000 | 0.00000) 5| new-array v2, v2, java.lang.Object[] .............................. end block 3 .............................. ............................. begin block 4 ............................. 7| invoke-virtual {v0,v1,v2}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream .............................. end block 4 .............................. ............................. begin block 5 ............................. 10| move-result-object v0 .line 25 11| return-void .............................. end block 5 .............................. }