tmpFact.pushValue(catchType); fact = tmpFact;
	public void meetInto(TypeFrame fact, Edge edge, TypeFrame result) throws DataflowAnalysisException {		BasicBlock basicBlock = edge.getTarget();		if (basicBlock.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.			CodeExceptionGen exceptionGen = basicBlock.getExceptionGen();			TypeFrame tmpFact = createFact();			tmpFact.copyFrom(fact);			tmpFact.clearStack();			// Determine the type of exception(s) caught.			Type catchType = null;			if (ACCURATE_EXCEPTIONS) {				try {					// Ideally, the exceptions that can be propagated					// on this edge has already been computed.					CachedExceptionSet cachedExceptionSet = getCachedExceptionSet(edge.getSource());					ExceptionSet edgeExceptionSet = cachedExceptionSet.getEdgeExceptionSet(edge);					if (!edgeExceptionSet.isEmpty()) {						//System.out.println("Using computed edge exception set!");						catchType = ExceptionObjectType.fromExceptionSet(edgeExceptionSet);					}				} catch (ClassNotFoundException e) {					lookupFailureCallback.reportMissingClass(e);				}			}			if (catchType == null) {				// No information about propagated exceptions, so				// pick a type conservatively using the handler catch type.				catchType = exceptionGen.getCatchType();				if (catchType == null)					catchType = Type.THROWABLE; // handle catches anything throwable			}			tmpFact.pushValue(catchType);			fact = tmpFact;		}		mergeInto(fact, result);	}