tmpFact = replaceValues(fact, tmpFact, replaceMe, vnaFrame, targetVnaFrame, IsNullValue.noKaboomNonNullValue());
tmpFact = replaceValues(fact, tmpFact, replaceMe, vnaFrame, targetVnaFrame, IsNullValue.noKaboomNonNullValue( new Location(kaBoomLocation, targetBlock) ));
	public void meetInto(IsNullValueFrame fact, Edge edge, IsNullValueFrame result)	        throws DataflowAnalysisException {		if (fact.isValid()) {			IsNullValueFrame tmpFact = null;			final int numSlots = fact.getNumSlots();			if (!NO_SPLIT_DOWNGRADE_NSP) {				// Downgrade NSP to DNR on non-exception control splits				if (!edge.isExceptionEdge() && numNonExceptionSuccessorMap[edge.getSource().getId()] > 1) {					tmpFact = modifyFrame(fact, tmpFact);					for (int i = 0; i < numSlots; ++i) {//						IsNullValue value = tmpFact.getValue(i);//						if (value.equals(IsNullValue.nullOnSimplePathValue()))//							tmpFact.setValue(i, IsNullValue.nullOnComplexPathValue());						IsNullValue value = tmpFact.getValue(i);						value = downgradeOnControlSplit(value);						tmpFact.setValue(i, value);					}				}			}			if (!NO_SWITCH_DEFAULT_AS_EXCEPTION) {				if (edge.getType() == SWITCH_DEFAULT_EDGE) {					tmpFact = modifyFrame(fact, tmpFact);					tmpFact.toExceptionValues();				}			}			final BasicBlock destBlock = edge.getTarget();			if (destBlock.isExceptionHandler()) {				// Exception handler - clear stack and push a non-null value				// to represent the exception.				tmpFact = modifyFrame(fact, tmpFact);				tmpFact.clearStack();				// Downgrade NULL and NSP to DNR if the handler is for				// CloneNotSupportedException or InterruptedException				CodeExceptionGen handler = destBlock.getExceptionGen();				ObjectType catchType = handler.getCatchType();				if (catchType != null) {					String catchClass = catchType.getClassName();					if (false && (catchClass.equals("java.lang.CloneNotSupportedException") ||					        catchClass.equals("java.lang.InterruptedException"))) {						for (int i = 0; i < tmpFact.getNumSlots(); ++i) {							IsNullValue value = tmpFact.getValue(i);							if (value.isDefinitelyNull() || value.isNullOnSomePath())								tmpFact.setValue(i, IsNullValue.nullOnComplexPathValue());						}					}				}				// Mark all values as having occurred on an exception path				tmpFact.toExceptionValues();				// Push the exception value				tmpFact.pushValue(IsNullValue.nonNullValue());			} else {				final int edgeType = edge.getType();				final BasicBlock sourceBlock = edge.getSource();				final ValueNumberFrame targetVnaFrame = vnaDataflow.getStartFact(destBlock);				assert targetVnaFrame != null;				// Determine if the edge conveys any information about the				// null/non-null status of operands in the incoming frame.				if (edgeType == IFCMP_EDGE || edgeType == FALL_THROUGH_EDGE) {					IsNullConditionDecision decision = getResultFact(edge.getSource()).getDecision();					if (decision != null) {						if (!decision.isEdgeFeasible(edgeType)) {							// The incoming edge is infeasible; just use TOP							// as the start fact for this block.							tmpFact = createFact();							tmpFact.setTop();						} else if (decision.getValue() != null) {							// A value has been determined for this edge.							// Use the value to update the is-null information in							// the start fact for this block.							final Location atIf = new Location(sourceBlock.getLastInstruction(), sourceBlock);							final IsNullValueFrame prevIsNullValueFrame = getFactAtLocation(atIf);							final ValueNumberFrame prevVnaFrame = vnaDataflow.getFactAtLocation(atIf);							tmpFact = replaceValues(fact, tmpFact, decision.getValue(), prevVnaFrame,							        targetVnaFrame, decision.getDecision(edgeType));						}					}				}				// If this is a fall-through edge from a null check,				// then we know the value checked is not null.				if (sourceBlock.isNullCheck() && edgeType == FALL_THROUGH_EDGE) {					ValueNumberFrame vnaFrame = vnaDataflow.getStartFact(destBlock);					if (vnaFrame == null)						throw new IllegalStateException("no vna frame at block entry?");					Instruction firstInDest = edge.getTarget().getFirstInstruction().getInstruction();								IsNullValue instance = fact.getInstance(firstInDest, methodGen.getConstantPool());															if (instance.isDefinitelyNull()) {						// If we know the variable is null, this edge is infeasible						tmpFact = createFact();						tmpFact.setTop();					}					else if (!instance.isDefinitelyNotNull()) {						// If we're not sure that the instance is definitely non-null,						// update the is-null information for the dereferenced value.						ValueNumber replaceMe = vnaFrame.getInstance(firstInDest, methodGen.getConstantPool());						tmpFact = replaceValues(fact, tmpFact, replaceMe, vnaFrame, targetVnaFrame, IsNullValue.noKaboomNonNullValue());					}				}			}			if (tmpFact != null)				fact = tmpFact;		}		// Normal dataflow merge		mergeInto(fact, result);	}