anchor.diff:  parse1(#lp{l=none}=Lp, [T|_]=Ts) ->             %Guarantee a start line
       parse1(Lp#lp{l=line(T)}, Ts);
   parse1(#lp{l=L,st=St0,vs=Vs0}, Ts) ->
  -    case parse2(Ts, St0, Vs0) of
  +    try
  +        parse2(Ts, St0, Vs0) of
           {done,Rest,[],[V]} -> {ok,L,V,Rest};
           {more,[],St1,Vs1} -> {more,#lp{l=L,st=St1,vs=Vs1}};
           {error,Line,Error,Rest,_,_} ->
               %% Can't really continue from errors here.
               {error,{Line,?MODULE,Error},Rest}
  +    catch
  +        throw:{user_error,Error} ->
  +            {error,Error,[]}
       end.
   
   %% parse2(Tokens, StateStack, ValueStack) ->
  
positive.code: table(?TAIL, string) -> [?EXPR,?TAIL,{reduce,16}];
  table(?TAIL, binary) -> [?EXPR,?TAIL,{reduce,16}];
  table(?TAIL, '#\'') -> [?EXPR,?TAIL,{reduce,16}];
  table(?TAIL, '\'') -> [?EXPR,?TAIL,{reduce,16}];
  table(?TAIL, '`') -> [?EXPR,?TAIL,{reduce,16}];
  table(?TAIL, ',') -> [?EXPR,?TAIL,{reduce,16}];
  
negative.code:             ['fun', M, F, A]
      end.
  
  %% make_bin(Line, Segments) -> Binary.
  %%  Make a binary from the segments.
  
  make_bin(Line, Segs) ->
      ?CATCH(lfe_eval:expr([binary|Segs]),
             return_error(Line, "bad binary")).
  
  %% make_map(Line, Elements) -> Map.
  %%  Make a map from the key/value elements.
  
  make_map(Line, Es) ->
      ?CATCH(maps:from_list(pair_list(Es)),
             return_error(Line, "bad map")).
  
  %% pair_list(List) -> [{A,B}].
  %%  Generate a list of tuple pairs from the elements. An error if odd
  %%  number of elements in list.
  
  pair_list([A,B|L]) -> [{A,B}|pair_list(L)];
  pair_list([]) -> [].
  
  %% eval_expr(Line, Expr) -> Val.
  %%  Evaluate #. expression.
  
  eval_expr(Line, Expr) ->
      ?CATCH(lfe_eval:expr(Expr),
             return_error(Line, "bad #. expression")).
  
  %% format_error(Error) -> String.
  %%  Format errors to printable string.
  