anchor.diff:  %%       but apply the RtTransforms to the syntax tree.
   %%   </dd>
   %% </dl>
  +%%
  +%% Note that there is also a runtime dependency to this module
  +%% for code produced with this module.
   %% @end
  +
  +-module(gpb_codegen).
  +-export([parse_transform/2]).
  +-export([runtime_fn_transform/2, runtime_fn_transform/3]).
  +-export([runtime_expr_transform/1, runtime_expr_transform/2]).
  +
  +%% Exported just to be able to give a (more informative) error than undef
  +-export([mk_fn/2, mk_fn/3, format_fn/2, format_fn/3]).
  +-export([expr/1, expr/2, case_clause/1, case_clause/2]).
  +
  +-define(ff(Fmt, Args), lists:flatten(io_lib:format(Fmt, Args))).
  +
  +%%@hidden
   parse_transform(Forms, Opts) ->
       %% Sometimes the backtrace depth is too small, causing
       %% truncated stack traces, making it hard to see where things got awry
  
positive.code:     Res = transform_forms(Forms, Opts),
      erlang:system_flag(backtrace_depth, Old),
      Res.
  
  transform_forms(Forms, Opts) ->
      Mapper = mk_transform_fn(Forms),
  
negative.code: %%% License along with this library; if not, write to the Free
  %%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  
  %% @doc This is a parse tranform, called by the parser/compiler,
  %% together with runtime support for successive transformation of
  %% syntax trees.
  %%
  %% Include the file `gpb_codegen.hrl' or specify
  %% `-compile({parse_transform,gpb_codegen}).'
  