final int numSlots = fact.getNumSlots(); final BasicBlock destBlock = edge.getDest();
	public void meetInto(IsNullValueFrame fact, Edge edge, IsNullValueFrame result)		throws DataflowAnalysisException {		if (fact.isValid()) {			// Determine if the edge conveys any information about the			// null/non-null status of operands in the incoming frame.			final int numSlots = fact.getNumSlots();			final BasicBlock destBlock = edge.getDest();			int nullInfo = getNullInfoFromEdge(edge);			switch (nullInfo) {			case TOS_NULL:				fact = replaceValues(fact, numSlots - 1, destBlock, IsNullValue.nullValue());				break;			case TOS_NON_NULL:				fact = replaceValues(fact, numSlots - 1, destBlock, IsNullValue.nonNullValue());				break;			case REF_OPERAND_NON_NULL:				{					// For all of the instructions which have a null-checked					// reference operand, it is pushed onto the stack before					// all of the other operands to the instruction.					Instruction firstInDest = edge.getDest().getFirstInstruction().getInstruction();					int numSlotsConsumed = firstInDest.consumeStack(methodGen.getConstantPool());					if (numSlotsConsumed == Constants.UNPREDICTABLE)						throw new DataflowAnalysisException("Unpredictable stack consumption for " + firstInDest);					fact = replaceValues(fact, numSlots - numSlotsConsumed, destBlock, IsNullValue.nonNullValue());				}				break;			case NO_INFO:				break;			default:				assert false;			}		}		// Normal dataflow merge		result.mergeWith(fact);	}