src/share/classes/com/sun/tools/javac/jvm/Code.java

changeset 1109
3cdfa97e1be9
parent 989
4c03383f6529
child 1326
30c36e23f154
equal deleted inserted replaced
1108:b5d0b8effc85 1109:3cdfa97e1be9
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

mercurial