}
	public void sawOpcode(int seen) {		if (false) System.out.println(getPC() + " " + OPCODE_NAMES[seen] + " " + stack);		stack.mergeJumps(this);		switch (seen) {		case GOTO:			if (getBranchOffset() < 0) {				BackwardsBranch bb = new BackwardsBranch(stack, getPC(), getBranchTarget());				if (bb.invariantRegisters.size() > 0) backwardBranches.add(bb);			}			break;		case ARETURN:		case IRETURN:		case RETURN:		case DRETURN:		case FRETURN:		case LRETURN:			addForwardJump(getPC(), Integer.MAX_VALUE);			break;		case IF_ICMPNE:		case IF_ICMPEQ:		case IF_ICMPGT:		case IF_ICMPLE:		case IF_ICMPLT:		case IF_ICMPGE:			OpcodeStack.Item item0 = stack.getStackItem(0);			OpcodeStack.Item item1 = stack.getStackItem(1);			if (getBranchOffset() > 0) {				forwardConditionalBranches.add(new ForwardConditionalBranch(item0, item1, getPC(), getBranchTarget()));				break;			}			if (getFurthestJump(getBranchTarget()) > getPC())				break;			if (constantSince(item0, getBranchTarget())					&& constantSince(item1, getBranchTarget())) {				BugInstance bug = new BugInstance(this, "IL_INFINITE_LOOP",						HIGH_PRIORITY).addClassAndMethod(this).addSourceLine(						this, getPC());				int reg0 = item0.getRegisterNumber();				if (reg0 >= 0)					bug.add(LocalVariableAnnotation.getLocalVariableAnnotation(getMethod(), reg0, getPC(), getBranchTarget()));				int reg1 = item1.getRegisterNumber();				if (reg1 >= 0)					bug.add(LocalVariableAnnotation.getLocalVariableAnnotation(getMethod(), reg1, getPC(), getBranchTarget()));				bugReporter.reportBug(bug);			}			break;		}		stack.sawOpcode(this, seen);	}