if (!(ins instanceof ExceptionThrower)) return false;   if (ins instanceof ReturnInstruction && !methodGen.isSynchronized()) return false;    if (NO_STATIC_FIELD_EXCEPTIONS && (opcode == Constants.GETSTATIC || opcode == Constants.PUTSTATIC)) return false;   if (NO_LOAD_CONSTANT_EXCEPTIONS && (opcode == Constants.LDC || opcode == Constants.LDC_W || opcode == Constants.LDC2_W)) return false;  return true;
if (peiIsCached.get(opcode)) return peiIsTrue.get(opcode); boolean result = calculateIsPEI(handle); if (result) peiIsTrue.set(opcode); peiIsCached.set(opcode); return result;
	private boolean isPEI(InstructionHandle handle) {		Instruction ins = handle.getInstruction();		short opcode = ins.getOpcode();		if (!(ins instanceof ExceptionThrower))			return false;		// Return instructions can throw exceptions only if the method is synchronized		if (ins instanceof ReturnInstruction && !methodGen.isSynchronized())			return false;		// We're really not interested in exceptions that could hypothetically be		// thrown by static field accesses.		if (NO_STATIC_FIELD_EXCEPTIONS &&		        (opcode == Constants.GETSTATIC || opcode == Constants.PUTSTATIC))			return false;		// Exceptions from LDC instructions seem a bit far fetched as well.		if (NO_LOAD_CONSTANT_EXCEPTIONS &&		        (opcode == Constants.LDC || opcode == Constants.LDC_W || opcode == Constants.LDC2_W))			return false;		return true;	}