anchor.diff:         fun(Bin) ->
                  '<decode-field-def>'(Bin, 0, 0, '<initial-params>')
          end,
  -       [{replace_term, '<decode-field-def>', DecodeFieldDefFnName},
  -        {splice_trees, '<initial-params>',
  -         msg_decoder_initial_params(MsgName, MsgDef, AnRes)}]),
  +       [replace_term('<decode-field-def>', DecodeFieldDefFnName),
  +        splice_trees('<initial-params>',
  +                     msg_decoder_initial_params(MsgName, MsgDef, AnRes))]),
        "\n\n",
        gpb_codegen:format_fn(
  -      DecodeFieldDefFnName,
  -      fun(<<1:1, X:7, Rest/binary>>, N, Acc, '<Params>') ->
  -              call_self(Rest, N+7, X bsl N + Acc, '<Params>');
  -         (<<0:1, X:7, Rest/binary>>, N, Acc, '<Params>') ->
  -              '<Key>' = X bsl N + Acc,
  -              '<calls-to-field-decoding-or-skip>';
  -         (<<>>, 0, 0, '<Params>') ->
  -              '<finalize-result>'
  -      end,
  -      [{splice_trees, '<Params>', Params},
  -       {replace_tree, '<Key>', Key},
  -       {replace_tree, '<calls-to-field-decoding-or-skip>',
  -        decoder_field_calls(Bindings, MsgName, MsgDef, AnRes)},
  -       {replace_tree, '<finalize-result>',
  -        decoder_finalize_result(Params, MsgName, MsgDef, AnRes)}]),
  +       DecodeFieldDefFnName,
  +       fun(<<1:1, X:7, Rest/binary>>, N, Acc, '<Params>') ->
  +               call_self(Rest, N+7, X bsl N + Acc, '<Params>');
  +          (<<0:1, X:7, Rest/binary>>, N, Acc, '<Params>') ->
  +               '<Key>' = X bsl N + Acc,
  +               '<calls-to-field-decoding-or-skip>';
  +          (<<>>, 0, 0, '<Params>') ->
  +               '<finalize-result>'
  +       end,
  +       [splice_trees('<Params>', Params),
  +        replace_tree('<Key>', Key),
  +        replace_tree('<calls-to-field-decoding-or-skip>',
  +                     decoder_field_calls(Bindings, MsgName, MsgDef, AnRes)),
  +        replace_tree('<finalize-result>',
  +                     decoder_finalize_result(Params, MsgName, MsgDef, AnRes))]),
        "\n\n"].
   
   msg_decoder_initial_params(MsgName, MsgDef, AnRes) ->
  
positive.code:            _ ->
                 '<skip-calls>'
         end,
         [{replace_tree,   '<Key>', fetch_binding('<Key>', Bindings)},
          {splice_clauses, '<field-clauses>', FieldClauses},
          {replace_tree,   '<skip-calls>', SkipCalls}]).
  
  decoder_skip_calls(Bindings, MsgName, AnRes) ->
      WiretypeExpr = fetch_binding('<wiretype-expr>', Bindings),
  
negative.code:                            required -> Param;
                             optional -> Param;
                             repeated -> ?expr(lists:reverse('<Param>'),
                                               [replace_tree('<Param>', Param)])
                         end,
                     {FName, FValueExpr}
                 end
  