anchor.diff:  render_field_merger({expr, Expr}) ->
       Expr;
   render_field_merger({merge, {{PF, NF}, Tr, MergeFn}}) ->
  -    ?expr('merge'('PF', 'NF'),
  +    ?expr(if 'PF' /= undefined, 'NF' /= undefined -> 'merge'('PF', 'NF');
  +             'PF' == undefined -> 'NF';
  +             'NF' == undefined -> 'PF'
  +          end,
             [replace_tree('PF', PF),
              replace_tree('NF', NF),
              replace_term('merge', Tr(merge, MergeFn))]);
  
positive.code:       mk_fn(merge_msg_, MsgName),
        fun(_Prev, New) -> New end);
  format_msg_merger(MsgName, MsgDef, AnRes, Opts) ->
      MsgUndefFnClauses = compute_msg_merger_undef_clauses(MsgName, AnRes, Opts),
      {PrevMatch, NewMatch, ExtraInfo} =
          format_msg_merger_fnclause_match(MsgName, MsgDef, Opts),
      {MandatoryMergings, OptMergings} = compute_msg_field_mergers(
                                           ExtraInfo, MsgName, AnRes),
      gpb_codegen:format_fn(
        mk_fn(merge_msg_, MsgName),
        fun('<msg-undefined-handling>', _) -> '<return-the-defined-msg>';
           ('Prev', 'New')                 -> '<merge-it>'
        end,
        [replace_tree('Prev',  PrevMatch),
         replace_tree('New',   NewMatch),
  
negative.code:          '<merge-it>',
           do_exprs(fun render_omissible_merger/2,
                    render_field_mergers(MsgName, MandatoryMergings, Opts),
                    OptMergings))]).
  
  format_msg_merger_fnclause_match(_MsgName, [], _Opts) ->
      {?expr(PF), ?expr(_), no_fields};
  