result.mergeWith(fact);
if (result.isTop()) result.copyFrom(fact); else if (result.isValid()) { if (result.getNumSlots() != fact.getNumSlots()) { result.setBottom(); return; }                       int numSlots = result.getNumSlots(); for (int i = 0; i < numSlots; ++i) { ValueNumber mergedValue = result.getMergedValue(i);     if (mergedValue == null) { ValueNumber oldVal = result.getValue(i); ValueNumber newVal = fact.getValue(i);  if (!oldVal.equals(newVal)) {    mergedValue = factory.createFreshValue(); result.setMergedValue(i, mergedValue); result.setValue(i, mergedValue); } } } }
	public void meetInto(ValueNumberFrame fact, Edge edge, ValueNumberFrame result) throws DataflowAnalysisException {		if (edge.getDest().isExceptionHandler() && fact.isValid()) {			// Special case: when merging predecessor facts for entry to			// an exception handler, we clear the stack and push a			// single entry for the exception object.  That way, the locals			// can still be merged.			// Get the value number for the exception			BasicBlock handlerBlock = edge.getDest();			ValueNumber exceptionValueNumber = getExceptionValueNumber(handlerBlock);			// Set up the stack frame			ValueNumberFrame tmpFact = createFact();			tmpFact.copyFrom(fact);			tmpFact.clearStack();			tmpFact.pushValue(factory.createFreshValue());			fact = tmpFact;		}		result.mergeWith(fact);	}