public Type intersection(Type type) {
		if (type == tError)
			return type;
		if (type == tUnknown)
			return this;

		int mergeTypes;
		int mergeHints = 0;
		if (type.typecode != TC_INTEGER)
			mergeTypes = 0;
		else {
			IntegerType other = (IntegerType) type;
			mergeTypes = possTypes & other.possTypes;
			mergeHints = hintTypes & other.hintTypes;

			if (mergeTypes == possTypes && mergeHints == hintTypes)
				return this;
			if (mergeTypes == other.possTypes && mergeHints == other.hintTypes)
				return other;
		}
		Type result = mergeTypes == 0 ? tError : new IntegerType(mergeTypes,
				mergeHints);
		if ((GlobalOptions.debuggingFlags & GlobalOptions.DEBUG_TYPES) != 0) {
			GlobalOptions.err.println("intersecting " + this + " and " + type
					+ " to " + result);
		}
		return result;
	}