while (numWordsProduced-- > 0) { frame.pushValue(IsNullValue.nonNullValue()); } } else if (IsNullValueAnalysis.UNKNOWN_VALUES_ARE_NSP) {   IsNullValueFrame frame = getFrame();  int numWordsConsumed = getNumWordsConsumed(obj); int numWordsProduced = getNumWordsProduced(obj);  try { while (numWordsConsumed-- > 0) frame.popValue(); } catch (DataflowAnalysisException e) { throw new InvalidBytecodeException("Stack underflow", e); }  if (numWordsProduced > 0) { Type type = obj.getType(getCPG()); if (type instanceof ReferenceType) { frame.pushValue(IsNullValue.nullOnSimplePathValue()); } else { while (numWordsProduced-- > 0) { frame.pushValue(IsNullValue.nonReportingNotNullValue()); } } } } else {  handleNormalInstruction(obj);
modelInstruction(obj, getNumWordsConsumed(obj), getNumWordsProduced(obj), pushValue);
	private void handleInvoke(InvokeInstruction obj) {		Type t = obj.getLoadClassType(getCPG());		Type r = obj.getReturnType(getCPG());		if (t.equals(Type.STRING) && r.equals(Type.STRING)) {			IsNullValueFrame frame = getFrame();			int numWordsConsumed = getNumWordsConsumed(obj);			int numWordsProduced = getNumWordsProduced(obj);			try {				while (numWordsConsumed-- > 0)					frame.popValue();			} catch (DataflowAnalysisException e) {				throw new InvalidBytecodeException("Stack underflow", e);			}						while (numWordsProduced-- > 0) {				frame.pushValue(IsNullValue.nonNullValue());			}			}		else if (IsNullValueAnalysis.UNKNOWN_VALUES_ARE_NSP) {			// Assume that any returned value (if a reference type)			// might be null.			IsNullValueFrame frame = getFrame();			int numWordsConsumed = getNumWordsConsumed(obj);			int numWordsProduced = getNumWordsProduced(obj);			try {				while (numWordsConsumed-- > 0)					frame.popValue();			} catch (DataflowAnalysisException e) {				throw new InvalidBytecodeException("Stack underflow", e);			}			if (numWordsProduced > 0) {				Type type = obj.getType(getCPG());				if (type instanceof ReferenceType) {					frame.pushValue(IsNullValue.nullOnSimplePathValue());				} else {					while (numWordsProduced-- > 0) {						frame.pushValue(IsNullValue.nonReportingNotNullValue());					}				}			}		} else {			// Assume returned values are non-reporting non-null.			handleNormalInstruction(obj);		}		if (!NO_ASSERT_HACK) {			if (assertionMethods.isAssertionCall(obj)) {				IsNullValueFrame frame = getFrame();				for (int i = 0; i < frame.getNumSlots(); ++i) {					IsNullValue value = frame.getValue(i);					if (value.isDefinitelyNull() || value.isNullOnSomePath()) {						frame.setValue(i, IsNullValue.nonReportingNotNullValue());					}				}			}		}	}