blob: b49da682689468fb332ccbf5e6f11b656011ba6a [file] [log] [blame]
method A.<init>():void
{
.src "tryCatch.java"
.line 2
.prologue_end
.line 2
0| move-object v0, v2
.local v0, "this", A
1| move-object v1, v0
2| invoke-direct {v1}, java.lang.Throwable.<init>():void
5| return-void
}
method B.<init>():void
{
.src "tryCatch.java"
.line 6
.prologue_end
.line 6
0| move-object v0, v2
.local v0, "this", B
1| move-object v1, v0
2| invoke-direct {v1}, java.lang.Throwable.<init>():void
5| return-void
}
method TryCatch.<init>():void
{
.src "tryCatch.java"
.line 10
.prologue_end
.line 10
0| move-object v0, v2
.local v0, "this", TryCatch
1| move-object v1, v0
2| invoke-direct {v1}, java.lang.Object.<init>():void
5| return-void
}
method TryCatch.foo(int):int
{
.params "?"
.src "tryCatch.java"
.line 27
.prologue_end
.line 27
0| move v0, v4
.local v0, "x", int
1| move v1, v0
2| if-lez v1, Label_4
.line 28
4| move v1, v0
5| packed-switch v1, Label_5
.line 31
8| const/4 v1, #+1 (0x00000001 | 1.40130e-45)
9| move v0, v1
Label_1:
.line 34
.end_local v0
10| return v0
Label_2:
.line 29
.restart_local v0
11| new-instance v1, A
13| move-object v3, v1
14| move-object v1, v3
15| move-object v2, v3
16| invoke-direct {v2}, A.<init>():void
19| throw v1
Label_3:
.line 30
20| new-instance v1, B
22| move-object v3, v1
23| move-object v1, v3
24| move-object v2, v3
25| invoke-direct {v2}, B.<init>():void
28| throw v1
Label_4:
.line 34
29| const/4 v1, #+0 (0x00000000 | 0.00000)
30| move v0, v1
31| goto/16 Label_1
33| nop
Label_5: <aligned>
.line 28
34| packed-switch-payload
1: Label_2
2: Label_3
}
method TryCatch.main(java.lang.String[]):void
{
.params "?"
.src "tryCatch.java"
.line 15
.prologue_end
.line 15
0| move-object v0, v6
.local v0, "args", java.lang.String[]
1| const/4 v3, #+0 (0x00000000 | 0.00000)
.try_begin_1
2| invoke-static {v3}, TryCatch.foo(int):int
.try_end_1
catch(B) : Label_3
catch(A) : Label_4
catch(...) : Label_5
5| move-result v3
Label_1:
.line 18
.line 22
6| sget-object v3, java.lang.System.out
8| const-string v4, "finally\n"
10| const/4 v5, #+0 (0x00000000 | 0.00000)
11| new-array v5, v5, java.lang.Object[]
13| invoke-virtual {v3,v4,v5}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream
16| move-result-object v3
Label_2:
.line 23
.line 24
17| return-void
Label_3:
.line 16
18| move-exception v3
19| move-object v1, v3
.try_begin_2
.line 17
.local v1, "ex", B
20| sget-object v3, java.lang.System.out
22| const-string v4, "catch: B\n"
24| const/4 v5, #+0 (0x00000000 | 0.00000)
25| new-array v5, v5, java.lang.Object[]
27| invoke-virtual {v3,v4,v5}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream
.try_end_2
catch(A) : Label_4
catch(...) : Label_5
30| move-result-object v3
31| goto/16 Label_1
Label_4:
.line 19
.end_local v1
33| move-exception v3
34| move-object v1, v3
.try_begin_3
.line 20
.local v1, "ex", A
35| sget-object v3, java.lang.System.out
37| const-string v4, "catch: A\n"
39| const/4 v5, #+0 (0x00000000 | 0.00000)
40| new-array v5, v5, java.lang.Object[]
42| invoke-virtual {v3,v4,v5}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream
.try_end_3
catch(...) : Label_5
45| move-result-object v3
.line 22
46| sget-object v3, java.lang.System.out
48| const-string v4, "finally\n"
50| const/4 v5, #+0 (0x00000000 | 0.00000)
51| new-array v5, v5, java.lang.Object[]
53| invoke-virtual {v3,v4,v5}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream
56| move-result-object v3
.line 23
57| goto/16 Label_2
Label_5:
.line 22
.end_local v1
59| move-exception v3
60| move-object v2, v3
61| sget-object v3, java.lang.System.out
63| const-string v4, "finally\n"
65| const/4 v5, #+0 (0x00000000 | 0.00000)
66| new-array v5, v5, java.lang.Object[]
68| invoke-virtual {v3,v4,v5}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream
71| move-result-object v3
72| move-object v3, v2
73| throw v3
}