code: private Type.Field[] determinePivotFields(Tuple<Type.Field> lhsFields, Tuple<Type.Field> rhsFields,
  			LifetimeRelation lifetimes, LinkageStack stack) {
  		Type.Field[] pivots = new Type.Field[lhsFields.size()];
  		//
  		for (int i = 0; i != lhsFields.size(); ++i) {
  			Type.Field lhsField = lhsFields.get(i);
  			Identifier lhsFieldName = lhsField.getName();
  			for (int j = 0; j != rhsFields.size(); ++j) {
  				Type.Field rhsField = rhsFields.get(j);
  				Identifier rhsFieldName = rhsField.getName();
  				if (lhsFieldName.equals(rhsFieldName)) {
  					// Matched field, now compute its type.
  					Type type = apply(lhsField.getType(), rhsField.getType(), lifetimes, stack);
  					// Check whether is a pivot or not
  					if (!(type instanceof Type.Void)) {
  						// Yes, is a pivot
  						pivots[i] = new Type.Field(lhsFieldName, type);
  					}
  					break;
  				}
  			}
  		}
  		return pivots;
  	}
docs: Find all pivots between the lhs and rhs fields, and calculate their types.
  
  @param lhsFields
  @param rhsFields
  @param lifetimes
  @param stack
  @return