anchor.diff: -%% Copyright (c) 2008-2013 Robert Virding
  +%% Copyright (c) 2009-2015 Robert Virding
   %%
   %% Licensed under the Apache License, Version 2.0 (the "License");
   %% you may not use this file except in compliance with the License.
  
positive.code:     ?CATCH(lfe_eval:expr(Expr),
             return_error(Line, "bad #. expression")).
  
  %% format_error(Error) -> String.
  %%  Format errors to printable string.
  
  format_error(missing_token) -> "missing token";
  format_error({illegal,What}) ->
      lfe_io:fwrite1("illegal ~p", [What]);
  format_error(Error) ->
      %% A useful catch all.
      case io_lib:deep_char_list(Error) of
          true -> Error;
          false -> lfe_io:print1(Error)
      end.
  
  %% return_error(Error).
  %%  To be used in grammar files to throw an error message to the
  %%  parser toplevel.
  
  -compile({nowarn_unused_function, return_error/2}).
  -spec return_error(integer(), any()) -> no_return().
  
  return_error(Line, Message) ->
      throw({user_error, {Line, ?MODULE, Message}}).
  
negative.code: %% See the License for the specific language governing permissions and
  %% limitations under the License.
  
  -module(lfe_parse).
  
  -export([format_error/1]).
  
  %% The root symbol entry points
  -export([form/1,form/2]).
  
  %% User code. This is placed here to allow extra attributes.
  
  -define(CATCH(E, Error), try E catch _:_ -> Error end).
  
  %% For backwards compatibility
  -export([sexpr/1,sexpr/2]).
  
  sexpr(Ts) -> form(Ts).
  sexpr(Cont, Ts) -> form(Cont, Ts).
  
  %% make_fun(String) -> FunList.
  %%  Convert a fun string to a fun sexpr.
  