1540 |
1540 |
1541 /** Add a catch clause to code. |
1541 /** Add a catch clause to code. |
1542 */ |
1542 */ |
1543 public void addCatch( |
1543 public void addCatch( |
1544 char startPc, char endPc, char handlerPc, char catchType) { |
1544 char startPc, char endPc, char handlerPc, char catchType) { |
1545 catchInfo.append(new char[]{startPc, endPc, handlerPc, catchType}); |
1545 catchInfo.append(new char[]{startPc, endPc, handlerPc, catchType}); |
|
1546 } |
|
1547 |
|
1548 |
|
1549 public void compressCatchTable() { |
|
1550 ListBuffer<char[]> compressedCatchInfo = ListBuffer.lb(); |
|
1551 List<Integer> handlerPcs = List.nil(); |
|
1552 for (char[] catchEntry : catchInfo.elems) { |
|
1553 handlerPcs = handlerPcs.prepend((int)catchEntry[2]); |
|
1554 } |
|
1555 for (char[] catchEntry : catchInfo.elems) { |
|
1556 int startpc = catchEntry[0]; |
|
1557 int endpc = catchEntry[1]; |
|
1558 if (startpc == endpc || |
|
1559 (startpc == (endpc - 1) && |
|
1560 handlerPcs.contains(startpc))) { |
|
1561 continue; |
|
1562 } else { |
|
1563 compressedCatchInfo.append(catchEntry); |
|
1564 } |
|
1565 } |
|
1566 catchInfo = compressedCatchInfo; |
1546 } |
1567 } |
1547 |
1568 |
1548 |
1569 |
1549 /* ************************************************************************** |
1570 /* ************************************************************************** |
1550 * Line numbers |
1571 * Line numbers |