anchor.diff:                                     replace_tree('Msg', PrevValue),
                                      replace_term('merge_msg_X',
                                                   Tr(merge, MergeFn)),
  -                                   replace_tree('New', NewValue)])
  +                                   replace_tree('New', NewValue),
  +                                   replace_tree('TrUserData', TrUserDataVar)])
                       end
               end
       end;
   merge_field_expr({FieldDef, {true, CFName}}, PrevValue, NewValue,
  -                 MsgName, Tr, AnRes, Opts)->
  +                 MsgName, Tr, TrUserDataVar, AnRes, Opts)->
       #?gpb_field{name=FName, type=Type} = FieldDef,
       case Type of
           {msg, FMsgName} ->
  
positive.code:         fun(DecodeExprs, Rest2Var) ->
                  ReadFieldDefFn = mk_fn(dfp_read_field_def_, MsgName),
                  Params2 = updated_merged_params(MsgName, XFieldDef, AnRes,
                                                  FVar, PrevValue, Params, Opts),
                  C = ?exprs('<call-read-field>'('<Rest2>', 0, 0, '<Params2>'),
                             [replace_term('<call-read-field>', ReadFieldDefFn),
                              replace_tree('<Rest2>', Rest2Var),
                              splice_trees('<Params2>', Params2)]),
                  DecodeExprs ++ C
          end,
      Tr = mk_find_tr_fn_elem(MsgName, FieldDef, IsOneof, AnRes),
      Body = decode_int_value(FVar, Bindings, FieldDef, Tr, Opts, BodyTailFn),
      gpb_codegen:format_fn(
        mk_fn(d_field_, MsgName, FName),
        fun(<<1:1, X:7, Rest/binary>>, N, Acc, '<Params>') when N < ?NB ->
                call_self(Rest, N + 7, X bsl N + Acc, '<Params>');
           (<<0:1, X:7, Rest/binary>>, N, Acc, '<InParams>') ->
                '<body>'
        end,
        [splice_trees('<Params>', Params),
  
negative.code:       end,
        MsgDef).
  
  decoder_finalize_result(Params, FFields, MsgName, MsgDef,
                          TrUserDataVar, AnRes, Opts) ->
      case get_field_pass(MsgName, AnRes) of
          pass_as_params ->
              case get_mapping_and_unset_by_opts(Opts) of
                  X when X == records;
                         X == {maps, present_undefined} ->
                      decoder_finalize_params_all_present(Params, MsgName, MsgDef,
                                                          TrUserDataVar,
                                                          AnRes, Opts);
                  {maps, omitted} ->
                      decoder_finalize_params_opt_omitted(Params, MsgName, MsgDef,
                                                          TrUserDataVar,
                                                          AnRes, Opts)
              end;
          pass_as_record ->
  