anchor.diff:           Selector = (FNum bsl 3) bor Wiretype,
            gpb_codegen:case_clause(
              case x of
  -               '<selector>' -> '<call>'('<Rest>', '<Fill>', '<Params>')
  +               '<selector>' -> '<call>'('<Rest>', 0, 0, '<Params>')
              end,
              [replace_term('<selector>', Selector),
               replace_term('<call>', mk_fn(d_field_, MsgName, FName)),
               replace_tree('<Rest>', RestExpr),
  -            splice_trees('<Fill>', Fill),
               splice_trees('<Params>', Params)])
        end
        || #field{fnum=FNum, type=Type, name=FName}=FieldDef <- MsgDef].
  -
  -compute_decoder_call_fill(#field{type=Type}=FieldDef, Fill) ->
  -    ZeroZero = [?expr(0), ?expr(0)],
  -    case is_packed(FieldDef) of
  -        false ->
  -            case Type of
  -                sint32   -> ZeroZero; %% varint-based
  -                sint64   -> ZeroZero; %% varint-based
  -                int32    -> ZeroZero; %% varint-based
  -                int64    -> ZeroZero; %% varint-based
  -                uint32   -> ZeroZero; %% varint-based
  -                uint64   -> ZeroZero; %% varint-based
  -                bool     -> ZeroZero; %% varint-based
  -                {enum,_} -> ZeroZero; %% varint-based
  -                fixed32  -> if Fill == fill -> ZeroZero; true -> "" end;
  -                sfixed32 -> if Fill == fill -> ZeroZero; true -> "" end;
  -                float    -> if Fill == fill -> ZeroZero; true -> "" end;
  -                fixed64  -> if Fill == fill -> ZeroZero; true -> "" end;
  -                sfixed64 -> if Fill == fill -> ZeroZero; true -> "" end;
  -                double   -> if Fill == fill -> ZeroZero; true -> "" end;
  -                string   -> ZeroZero; %% varint-based
  -                bytes    -> ZeroZero; %% varint-based
  -                {msg,_}  -> ZeroZero  %% varint-based
  -            end;
  -        true ->
  -            ZeroZero %% length of packed bytes is varint-based
  -    end.
   
   decoder_finalize_result(Params, MsgName, MsgDef, AnRes) ->
       case get_field_pass(MsgName, AnRes) of
  
positive.code:      %% skip_64_<MsgName>/2,4
       [[gpb_codegen:format_fn(
           mk_fn(skip_, NumBits, MsgName),
           fun(<<_:'<NumBits>', Rest/binary>>, '<Fill>', '<Params>') ->
                   '<call-read-field>'(Rest, '<Zeros>', '<Params>')
           end,
           [replace_term('<call-read-field>', ReadFieldFnName),
            replace_term('<NumBits>', NumBits),
            splice_trees('<Fill>', Fill),
            splice_trees('<Zeros>', Zeros),
            splice_trees('<Params>', Params)]),
         "\n\n"]
        || NumBits <- [32, 64]]].
  
negative.code:         _        -> format_dpacked_vi(MsgName, Field, Opts)
      end.
  
  format_dpacked_nonvi(MsgName, #field{name=FName}, BitLen, BitTypes)     ->
      [gpb_codegen:format_fn(
         mk_fn(d_packed_field_, MsgName, FName),
         fun(<<Value:'<N>'/'<T>', Rest/binary>>, Z1, Z2, AccSeq) ->
                 call_self(Rest, Z1, Z2, [Value | AccSeq]);
            (<<>>, _, _, AccSeq) ->
                 AccSeq
         end,
         [replace_term('<N>', BitLen),
  