public Type mergeValues(Type a, Type b) {
public Type mergeValues(int slot, Type a, Type b) {
	public Type mergeValues(Type a, Type b) {		byte aType = a.getType(), bType = b.getType();		if (aType == T_TOP)			// Top is the identity element			return b;		else if (bType == T_TOP)	// Top is the identity element			return a;		else if (aType == T_BOTTOM || bType == T_BOTTOM)	// Bottom meet anything is bottom			return getBottomType();		else if (isObjectType(aType) && isObjectType(bType)) {	// Two object types!			// Handle the Null type, which serves as a special "top"			// value for object types.			if (aType == T_NULL)				return b;			else if (bType == T_NULL)				return a;			// Two concrete object types.			// According to the JVM spec, 2nd edition, 4.9.2,			// the result of merging types is the "first common superclass".			// Interfaces are NOT considered!			// This will use the Repository to look up classes.			ReferenceType aRef = (ReferenceType) a;			ReferenceType bRef = (ReferenceType) b;			//return aRef.getFirstCommonSuperclass(bRef); // FIXME: start using this when we upgrade to BCEL 5.1			return aRef.firstCommonSuperclass(bRef);		} else if (isObjectType(aType) || isObjectType(bType))	// Object meet non-object is bottom			return getBottomType();		else if (aType == bType)	// Same non-object type?			return a;		else if (isIntegerType(aType) && isIntegerType(bType)) // Two different integer types - use T_INT			return Type.INT;		else						// Default - types are incompatible			return getBottomType();	}