method A.<init>():void
{
............................. begin block 1 .............................
	.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
.............................. end block 1 ..............................
}

method B.<init>():void
{
............................. begin block 1 .............................
	.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
.............................. end block 1 ..............................
}

method TryCatch.<init>():void
{
............................. begin block 1 .............................
	.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
.............................. end block 1 ..............................
}

method TryCatch.foo(int):int
{
............................. begin block 1 .............................
	.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
.............................. end block 1 ..............................
............................. begin block 2 .............................
	.line 28
	    4| move v1, v0
	    5| packed-switch v1, Label_5
.............................. end block 2 ..............................
............................. begin block 3 .............................
	.line 31
	    8| const/4 v1, #+1 (0x00000001 | 1.40130e-45)
	    9| move v0, v1
.............................. end block 3 ..............................
............................. begin block 4 .............................
Label_1:
	.line 34
	.end_local v0
	   10| return v0
.............................. end block 4 ..............................
............................. begin block 5 .............................
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
.............................. end block 5 ..............................
............................. begin block 6 .............................
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
.............................. end block 6 ..............................
............................. begin block 7 .............................
Label_4:
	.line 34
	   29| const/4 v1, #+0 (0x00000000 | 0.00000)
	   30| move v0, v1
	   31| goto Label_1
.............................. end block 7 ..............................
Label_5: <aligned>
	.line 28
	   32| packed-switch-payload
		    1: Label_2
		    2: Label_3
}

method TryCatch.main(java.lang.String[]):void
{
............................. begin block 1 .............................
	.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)
.............................. end block 1 ..............................
	.try_begin_1
............................. begin block 2 .............................
	    2| invoke-static {v3}, TryCatch.foo(int):int
.............................. end block 2 ..............................
	.try_end_1
	  catch(B) : Label_3
	  catch(A) : Label_4
	  catch(...) : Label_5
............................. begin block 3 .............................
	    5| move-result v3
.............................. end block 3 ..............................
............................. begin block 4 .............................
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
.............................. end block 4 ..............................
............................. begin block 5 .............................
Label_2:
	.line 23
	.line 24
	   17| return-void
.............................. end block 5 ..............................
............................. begin block 6 .............................
Label_3:
	.line 16
	   18| move-exception v3
	   19| move-object v1, v3
.............................. end block 6 ..............................
	.try_begin_2
............................. begin block 7 .............................
	.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
.............................. end block 7 ..............................
	.try_end_2
	  catch(A) : Label_4
	  catch(...) : Label_5
............................. begin block 8 .............................
	   30| move-result-object v3
	   31| goto Label_1
.............................. end block 8 ..............................
............................. begin block 9 .............................
Label_4:
	.line 19
	.end_local v1
	   32| move-exception v3
	   33| move-object v1, v3
.............................. end block 9 ..............................
	.try_begin_3
............................. begin block 10 .............................
	.line 20
	.local v1, "ex", A
	   34| sget-object v3, java.lang.System.out
	   36| const-string v4, "catch: A\n"
	   38| const/4 v5, #+0 (0x00000000 | 0.00000)
	   39| new-array v5, v5, java.lang.Object[]
	   41| invoke-virtual {v3,v4,v5}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream
.............................. end block 10 ..............................
	.try_end_3
	  catch(...) : Label_5
............................. begin block 11 .............................
	   44| move-result-object v3
	.line 22
	   45| sget-object v3, java.lang.System.out
	   47| const-string v4, "finally\n"
	   49| const/4 v5, #+0 (0x00000000 | 0.00000)
	   50| new-array v5, v5, java.lang.Object[]
	   52| invoke-virtual {v3,v4,v5}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream
	   55| move-result-object v3
	.line 23
	   56| goto Label_2
.............................. end block 11 ..............................
............................. begin block 12 .............................
Label_5:
	.line 22
	.end_local v1
	   57| move-exception v3
	   58| move-object v2, v3
	   59| sget-object v3, java.lang.System.out
	   61| const-string v4, "finally\n"
	   63| const/4 v5, #+0 (0x00000000 | 0.00000)
	   64| new-array v5, v5, java.lang.Object[]
	   66| invoke-virtual {v3,v4,v5}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream
	   69| move-result-object v3
	   70| move-object v3, v2
	   71| throw v3
.............................. end block 12 ..............................
}