int combinedFlags; if (result < NN) combinedFlags =  aFlags & bFlags; else combinedFlags =  bFlags & (aFlags | EXCEPTION);
	public static IsNullValue merge(IsNullValue a, IsNullValue b) {		if (a == b) return a;		int aFlags = a.getFlags();		int bFlags = b.getFlags();				a = a.toBaseValue();		b = b.toBaseValue();		// Left hand value should be >=, since it is used		// as the first dimension of the matrix to index.		if (a.kind < b.kind) {			IsNullValue tmp = a;			a = b;			b = tmp;			int tmpFlags = aFlags;			aFlags = bFlags;			bFlags = tmpFlags;		}		assert a.kind >= b.kind;		int result = mergeMatrix[a.kind][b.kind];		int combinedFlags;		if (result < NN) combinedFlags =  aFlags & bFlags;		else combinedFlags =  bFlags & (aFlags | EXCEPTION);		IsNullValue resultValue = instanceByFlagsList[combinedFlags >> FLAG_SHIFT][result];		return resultValue;	}