Subroutine s = (Subroutine) subTable.get(new Integer(target)); if (s == null) { s = new Subroutine(target, pos); subTable.put(new Integer(target), s); scan(target, iter, s); } else { s.addCaller(pos);
throw new BadBytecode("Ret on no subroutine! [pos = " + pos + "]"); Iterator callerIter = subroutine.callers().iterator(); while (callerIter.hasNext()) { int caller = ((Integer) callerIter.next()).intValue(); for (Iterator i = subroutine.accessed().iterator(); i.hasNext(); ) { int index = ((Integer)i.next()).intValue(); Type oldType = old.getLocal(index);
for (int i = 0; i < frame.localsLength(); i++) { if (!sub.isAccessed(i)) { Type oldType = old.getLocal(i); Type newType = frame.getLocal(i);
for (int i = 0; i < frame.localsLength(); i++) { if (!sub.isAccessed(i)) { Type oldType = old.getLocal(i); Type newType = frame.getLocal(i);
private void mergeRet(IntQueue queue, CodeIterator iter, int pos, Frame frame, Subroutine subroutine) throws BadBytecode { if (subroutine == null) throw new BadBytecode("Ret on no subroutine! [pos = " + pos + "]"); for (int caller:subroutine.callers()) { int returnLoc = getNext(iter, caller, pos); boolean changed = false; Frame old = frames[returnLoc]; if (old == null) { old = frames[returnLoc] = frame.copyStack(); changed = true; } else { changed = old.mergeStack(frame); } for (int index:subroutine.accessed()) { Type oldType = old.getLocal(index); Type newType = frame.getLocal(index); if (oldType != newType) { old.setLocal(index, newType); changed = true; } } if (! old.isRetMerged()) { old.setRetMerged(true); changed = true; } if (changed && old.isJsrMerged()) queue.add(returnLoc); } }
Subroutine s = subTable.get(target); if (s == null) { s = new Subroutine(target, pos); subTable.put(target, s); scan(target, iter, s); } else { s.addCaller(pos);
for (int i = 0; i < frame.localsLength(); i++) { if (!sub.isAccessed(i)) { Type oldType = old.getLocal(i); Type newType = frame.getLocal(i);
throw new BadBytecode("Ret on no subroutine! [pos = " + pos + "]"); Iterator callerIter = subroutine.callers().iterator(); while (callerIter.hasNext()) { int caller = ((Integer) callerIter.next()).intValue(); for (Iterator i = subroutine.accessed().iterator(); i.hasNext(); ) { int index = ((Integer)i.next()).intValue(); Type oldType = old.getLocal(index);
Subroutine s = (Subroutine) subTable.get(new Integer(target)); if (s == null) { s = new Subroutine(target, pos); subTable.put(new Integer(target), s); scan(target, iter, s); } else { s.addCaller(pos);
for (int i = 0; i < frame.localsLength(); i++) { if (!sub.isAccessed(i)) { Type oldType = old.getLocal(i); Type newType = frame.getLocal(i);
throw new BadBytecode("Ret on no subroutine! [pos = " + pos + "]"); Iterator callerIter = subroutine.callers().iterator(); while (callerIter.hasNext()) { int caller = ((Integer) callerIter.next()).intValue(); for (Iterator i = subroutine.accessed().iterator(); i.hasNext(); ) { int index = ((Integer)i.next()).intValue(); Type oldType = old.getLocal(index);
Subroutine s = (Subroutine) subTable.get(new Integer(target)); if (s == null) { s = new Subroutine(target, pos); subTable.put(new Integer(target), s); scan(target, iter, s); } else { s.addCaller(pos);
for (int i = 0; i < frame.localsLength(); i++) { if (!sub.isAccessed(i)) { Type oldType = old.getLocal(i); Type newType = frame.getLocal(i);
throw new BadBytecode("Ret on no subroutine! [pos = " + pos + "]"); Iterator callerIter = subroutine.callers().iterator(); while (callerIter.hasNext()) { int caller = ((Integer) callerIter.next()).intValue(); for (Iterator i = subroutine.accessed().iterator(); i.hasNext(); ) { int index = ((Integer)i.next()).intValue(); Type oldType = old.getLocal(index);
Subroutine s = (Subroutine) subTable.get(new Integer(target)); if (s == null) { s = new Subroutine(target, pos); subTable.put(new Integer(target), s); scan(target, iter, s); } else { s.addCaller(pos);