1 2 method A.<init>():void 3 { 4 ............................. begin block 1 ............................. 5 .src "tryCatch.java" 6 .line 2 7 .prologue_end 8 .line 2 9 0| move-object v0, v2 10 .local v0, "this", A 11 1| move-object v1, v0 12 2| invoke-direct {v1}, java.lang.Throwable.<init>():void 13 .............................. end block 1 .............................. 14 ............................. begin block 2 ............................. 15 5| return-void 16 .............................. end block 2 .............................. 17 } 18 19 method B.<init>():void 20 { 21 ............................. begin block 1 ............................. 22 .src "tryCatch.java" 23 .line 6 24 .prologue_end 25 .line 6 26 0| move-object v0, v2 27 .local v0, "this", B 28 1| move-object v1, v0 29 2| invoke-direct {v1}, java.lang.Throwable.<init>():void 30 .............................. end block 1 .............................. 31 ............................. begin block 2 ............................. 32 5| return-void 33 .............................. end block 2 .............................. 34 } 35 36 method TryCatch.<init>():void 37 { 38 ............................. begin block 1 ............................. 39 .src "tryCatch.java" 40 .line 10 41 .prologue_end 42 .line 10 43 0| move-object v0, v2 44 .local v0, "this", TryCatch 45 1| move-object v1, v0 46 2| invoke-direct {v1}, java.lang.Object.<init>():void 47 .............................. end block 1 .............................. 48 ............................. begin block 2 ............................. 49 5| return-void 50 .............................. end block 2 .............................. 51 } 52 53 method TryCatch.foo(int):int 54 { 55 ............................. begin block 1 ............................. 56 .params "?" 57 .src "tryCatch.java" 58 .line 27 59 .prologue_end 60 .line 27 61 0| move v0, v4 62 .local v0, "x", int 63 1| move v1, v0 64 2| if-lez v1, Label_4 65 .............................. end block 1 .............................. 66 ............................. begin block 2 ............................. 67 .line 28 68 4| move v1, v0 69 5| packed-switch v1, Label_5 70 .............................. end block 2 .............................. 71 ............................. begin block 3 ............................. 72 .line 31 73 8| const/4 v1, #+1 (0x00000001 | 1.40130e-45) 74 9| move v0, v1 75 .............................. end block 3 .............................. 76 ............................. begin block 4 ............................. 77 Label_1: 78 .line 34 79 .end_local v0 80 10| return v0 81 .............................. end block 4 .............................. 82 ............................. begin block 5 ............................. 83 Label_2: 84 .line 29 85 .restart_local v0 86 11| new-instance v1, A 87 .............................. end block 5 .............................. 88 ............................. begin block 6 ............................. 89 13| move-object v3, v1 90 14| move-object v1, v3 91 15| move-object v2, v3 92 16| invoke-direct {v2}, A.<init>():void 93 .............................. end block 6 .............................. 94 ............................. begin block 7 ............................. 95 19| throw v1 96 .............................. end block 7 .............................. 97 ............................. begin block 8 ............................. 98 Label_3: 99 .line 30 100 20| new-instance v1, B 101 .............................. end block 8 .............................. 102 ............................. begin block 9 ............................. 103 22| move-object v3, v1 104 23| move-object v1, v3 105 24| move-object v2, v3 106 25| invoke-direct {v2}, B.<init>():void 107 .............................. end block 9 .............................. 108 ............................. begin block 10 ............................. 109 28| throw v1 110 .............................. end block 10 .............................. 111 ............................. begin block 11 ............................. 112 Label_4: 113 .line 34 114 29| const/4 v1, #+0 (0x00000000 | 0.00000) 115 30| move v0, v1 116 31| goto Label_1 117 .............................. end block 11 .............................. 118 Label_5: <aligned> 119 .line 28 120 32| packed-switch-payload 121 1: Label_2 122 2: Label_3 123 } 124 125 method TryCatch.main(java.lang.String[]):void 126 { 127 ............................. begin block 1 ............................. 128 .params "?" 129 .src "tryCatch.java" 130 .line 15 131 .prologue_end 132 .line 15 133 0| move-object v0, v6 134 .local v0, "args", java.lang.String[] 135 1| const/4 v3, #+0 (0x00000000 | 0.00000) 136 .............................. end block 1 .............................. 137 .try_begin_1 138 ............................. begin block 2 ............................. 139 2| invoke-static {v3}, TryCatch.foo(int):int 140 .............................. end block 2 .............................. 141 .try_end_1 142 catch(B) : Label_3 143 catch(A) : Label_4 144 catch(...) : Label_5 145 ............................. begin block 3 ............................. 146 5| move-result v3 147 .............................. end block 3 .............................. 148 ............................. begin block 4 ............................. 149 Label_1: 150 .line 18 151 .line 22 152 6| sget-object v3, java.lang.System.out 153 .............................. end block 4 .............................. 154 ............................. begin block 5 ............................. 155 8| const-string v4, "finally\n" 156 .............................. end block 5 .............................. 157 ............................. begin block 6 ............................. 158 10| const/4 v5, #+0 (0x00000000 | 0.00000) 159 11| new-array v5, v5, java.lang.Object[] 160 .............................. end block 6 .............................. 161 ............................. begin block 7 ............................. 162 13| invoke-virtual {v3,v4,v5}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream 163 .............................. end block 7 .............................. 164 ............................. begin block 8 ............................. 165 16| move-result-object v3 166 .............................. end block 8 .............................. 167 ............................. begin block 9 ............................. 168 Label_2: 169 .line 23 170 .line 24 171 17| return-void 172 .............................. end block 9 .............................. 173 ............................. begin block 10 ............................. 174 Label_3: 175 .line 16 176 18| move-exception v3 177 19| move-object v1, v3 178 .............................. end block 10 .............................. 179 .try_begin_2 180 ............................. begin block 11 ............................. 181 .line 17 182 .local v1, "ex", B 183 20| sget-object v3, java.lang.System.out 184 .............................. end block 11 .............................. 185 ............................. begin block 12 ............................. 186 22| const-string v4, "catch: B\n" 187 .............................. end block 12 .............................. 188 ............................. begin block 13 ............................. 189 24| const/4 v5, #+0 (0x00000000 | 0.00000) 190 25| new-array v5, v5, java.lang.Object[] 191 .............................. end block 13 .............................. 192 ............................. begin block 14 ............................. 193 27| invoke-virtual {v3,v4,v5}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream 194 .............................. end block 14 .............................. 195 .try_end_2 196 catch(A) : Label_4 197 catch(...) : Label_5 198 ............................. begin block 15 ............................. 199 30| move-result-object v3 200 31| goto Label_1 201 .............................. end block 15 .............................. 202 ............................. begin block 16 ............................. 203 Label_4: 204 .line 19 205 .end_local v1 206 32| move-exception v3 207 33| move-object v1, v3 208 .............................. end block 16 .............................. 209 .try_begin_3 210 ............................. begin block 17 ............................. 211 .line 20 212 .local v1, "ex", A 213 34| sget-object v3, java.lang.System.out 214 .............................. end block 17 .............................. 215 ............................. begin block 18 ............................. 216 36| const-string v4, "catch: A\n" 217 .............................. end block 18 .............................. 218 ............................. begin block 19 ............................. 219 38| const/4 v5, #+0 (0x00000000 | 0.00000) 220 39| new-array v5, v5, java.lang.Object[] 221 .............................. end block 19 .............................. 222 ............................. begin block 20 ............................. 223 41| invoke-virtual {v3,v4,v5}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream 224 .............................. end block 20 .............................. 225 .try_end_3 226 catch(...) : Label_5 227 ............................. begin block 21 ............................. 228 44| move-result-object v3 229 .line 22 230 45| sget-object v3, java.lang.System.out 231 .............................. end block 21 .............................. 232 ............................. begin block 22 ............................. 233 47| const-string v4, "finally\n" 234 .............................. end block 22 .............................. 235 ............................. begin block 23 ............................. 236 49| const/4 v5, #+0 (0x00000000 | 0.00000) 237 50| new-array v5, v5, java.lang.Object[] 238 .............................. end block 23 .............................. 239 ............................. begin block 24 ............................. 240 52| invoke-virtual {v3,v4,v5}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream 241 .............................. end block 24 .............................. 242 ............................. begin block 25 ............................. 243 55| move-result-object v3 244 .line 23 245 56| goto Label_2 246 .............................. end block 25 .............................. 247 ............................. begin block 26 ............................. 248 Label_5: 249 .line 22 250 .end_local v1 251 57| move-exception v3 252 58| move-object v2, v3 253 59| sget-object v3, java.lang.System.out 254 .............................. end block 26 .............................. 255 ............................. begin block 27 ............................. 256 61| const-string v4, "finally\n" 257 .............................. end block 27 .............................. 258 ............................. begin block 28 ............................. 259 63| const/4 v5, #+0 (0x00000000 | 0.00000) 260 64| new-array v5, v5, java.lang.Object[] 261 .............................. end block 28 .............................. 262 ............................. begin block 29 ............................. 263 66| invoke-virtual {v3,v4,v5}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream 264 .............................. end block 29 .............................. 265 ............................. begin block 30 ............................. 266 69| move-result-object v3 267 70| move-object v3, v2 268 71| throw v3 269 .............................. end block 30 .............................. 270 } 271