anchor.diff:      #field{name=FName, rnum=RNum, opts=FOpts} = FieldDef,
       FieldDefAsNonpacked = FieldDef#field{opts = FOpts -- [packed]},
       Zeros = compute_decoder_call_fill(FieldDefAsNonpacked, no_fill),
  -    DecodePackWrapFn = mk_fn(d_field_, MsgName, FName),
       Params = decoder_params(MsgName, AnRes),
       Param = case get_field_pass(MsgName, AnRes) of
                   pass_as_params ->
  
positive.code:      gpb_codegen:format_fn(
        DecodeFieldDefFnName,
        fun(<<1:1, X:7, Rest/binary>>, N, Acc, '<Params>') ->
                '<call-recursively>'(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>';
  
negative.code:                                        [{FName, ?expr(NewSeq)}])]
                  end,
      [gpb_codegen:format_fn(
         mk_fn(d_field_, MsgName, FName),
         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, '<InParams>') ->
                 Len = X bsl N + Acc,
                 <<PackedBytes:Len/binary, Rest2/binary>> = Rest,
                 NewSeq = decode_packed(PackedBytes, '<Zeros>', '<Param>'),
                 '<call-read-field>'(Rest2, 0, 0, '<OutParams>')
         end,
         [splice_trees('<Params>', Params),
          splice_trees('<InParams>', Params),
          replace_term(decode_packed, mk_fn(d_packed_field_, MsgName, FName)),
          splice_trees('<Zeros>', Zeros),
  