anchor.diff:  	    erlang:error({expand_macro,[Mac|Args],Error})
       end.
   
  +%% exp_predef_macro(Call, Env, State) -> {Exp,State}.
  +%%  Evaluate predefined macro definition catching errors.
  +
  +exp_predef_macro(Call, Env, St) ->
  +    try
  +	exp_predef(Call, Env, St)
  +    catch
  +	error:Error ->
  +	    erlang:error({expand_macro,Call,Error})
  +    end.
  +
   %% exp_predef(Form, Env, State) -> {yes,Form,State} | no.
   %%  Handle the builtin predefined macros but only one at top-level and
   %%  only once.  Expand must be called on result to fully expand
  
positive.code:     case lfe_lib:is_core_form(Name) of
  	true -> no;				%Don't expand core forms
  	false ->
  	    case get_mbinding(Name, Env) of
  		{yes,Def} ->
  		    %% User macro bindings.
  		    {Exp,_} = exp_macro(Call, Def, Env, #mac{expand=false}),
  		    {yes,Exp};
  		no ->
  		    %% Default macro bindings.
  		    case exp_predef(Call, Env, #mac{}) of
  			{yes,Exp,_} -> {yes,Exp};
  			no -> no
  		    end
  
negative.code: exp_predef([cadr,E], _, St) -> {yes,[car,[cdr,E]],St};
  exp_predef([cdar,E], _, St) -> {yes,[cdr,[car,E]],St};
  exp_predef([cddr,E], _, St) -> {yes,[cdr,[cdr,E]],St};
  %% Arithmetic operations and comparison operations.
  %% Be careful to make these behave as if they were a function and
  %% strictly evalated all their arguments.
  exp_predef(['+'|Es], _, St0) ->
      case Es of
  	[] -> {yes,0,St0};			%Identity
  	_ ->
  	    {Exp,St1} = expand_arith(Es, '+', St0),
  	    {yes,Exp,St1}
      end;
  exp_predef(['-'|Es], _, St0) ->
      case Es of
  	[_|_] ->				%Non-empty argument list
  	    {Exp,St1} = expand_arith(Es, '-', St0),
  	    {yes,Exp,St1}
      end;
  exp_predef(['*'|Es], _, St0) ->
      case Es of
  	[] -> {yes,1,St0};			%Identity
  	[_] -> {yes,exp_bif('*', [1|Es]),St0};	%Check if number
  	_ ->
  	    {Exp,St1} = expand_arith(Es, '*', St0),
  	    {yes,Exp,St1}
      end;
  exp_predef(['/'|Es], _, St0) ->
      case Es of
  	[_] -> {yes,exp_bif('/', [1|Es]),St0};	%According to definition
  	_ ->
  	    {Exp,St1} = expand_arith(Es, '/', St0),
  	    {yes,Exp,St1}
      end;
  exp_predef([Op|Es], _, St0)			%Logical operators
    when Op == '>'; Op == '>='; Op == '<'; Op == '=<';
         Op == '=='; Op == '/='; Op == '=:='; Op == '=/=' ->
      case Es of
  	[_|_] ->
  	    {Exp,St1} = expand_comp(Es, Op, St0),
  	    {yes,Exp,St1}
      end;
  exp_predef([backquote,Bq], _, St) ->		%We do this here.
      {yes,bq_expand(Bq),St};
  exp_predef(['++'|Abody], _, St) ->
  