* }
* </pre>
*/
public void testImplicitExitInTryCatch() {
{
Label T1 = new Label();
Label C1 = new Label();
Label S1 = new Label();
Label L = new Label();
Label C2 = new Label();
Label S2 = new Label();
Label W = new Label();
Label X = new Label();
Label OT = new Label();
Label OC = new Label();
// variable numbers:
int b = 1;
int e1 = 2;
int e2 = 3;
int r1 = 4;
int r2 = 5;
setCurrent(jsr);
ICONST_0();
ISTORE(1);
// OT: outermost try
LABEL(OT);
// T1: first try:
LABEL(T1);
JSR(S1);
RETURN();
// C1: exception handler for first try
LABEL(C1);
ASTORE(e1);
JSR(S1);
ALOAD(e1);
ATHROW();
// S1: first finally handler
LABEL(S1);
ASTORE(r1);
GOTO(W);
// L: body of while loop, also second try
LABEL(L);
JSR(S2);
RETURN();
// C2: exception handler for second try
LABEL(C2);
ASTORE(e2);
JSR(S2);
ALOAD(e2);
ATHROW();
// S2: second finally handler
LABEL(S2);
ASTORE(r2);
ILOAD(b);
IFNE(X);
RET(r2);
// W: test for the while loop
LABEL(W);
ILOAD(b);
IFNE(L); // falls through to X
// X: exit from finally{} block
LABEL(X);
RET(r1);
// OC: outermost catch
LABEL(OC);
IINC(b, 3);
RETURN();
TRYCATCH(T1, C1, C1);
TRYCATCH(L, C2, C2);
TRYCATCH(OT, OC, OC);
END(1, 6);
}
{
Label T1 = new Label();
Label C1 = new Label();
Label S1_1a = new Label();
Label S1_1b = new Label();
Label S1_2a = new Label();
Label S1_2b = new Label();
Label L_1 = new Label();
Label L_2 = new Label();
Label C2_1 = new Label();
Label C2_2 = new Label();
Label S2_1_1a = new Label();
Label S2_1_1b = new Label();
Label S2_1_2a = new Label();
Label S2_1_2b = new Label();
Label S2_2_1a = new Label();
Label S2_2_1b = new Label();
Label S2_2_2a = new Label();
Label S2_2_2b = new Label();
Label W_1 = new Label();
Label W_2 = new Label();
Label X_1 = new Label();
Label X_2 = new Label();
Label OT_1 = S1_1a;
Label OT_2 = S1_2a;
Label OT_1_1 = S2_1_1a;
Label OT_1_2 = S2_1_2a;
Label OT_2_1 = S2_2_1a;
Label OT_2_2 = S2_2_2a;
Label OC = new Label();
Label OC_1 = new Label();
Label OC_2 = new Label();
Label OC_1_1 = new Label();
Label OC_1_2 = new Label();
Label OC_2_1 = new Label();
Label OC_2_2 = new Label();
// variable numbers:
int b = 1;
int e1 = 2;
int e2 = 3;