anchor.diff:      {Ef,_} = expand(F, Env, #mac{expand=true}),
       Ef.
   
  -%% expand_forms(FileForms, Env) -> {FileForms,Env}.
  +%% expand_forms(FileForms, Env) ->
  +%%     {ok,FileForms,Env,Warnings} | {error,Errors,Warnings}.
   %%  Expand forms in "file format", {Form,LineNumber}.
   
   expand_forms(Fs, Env) ->
       do_forms(Fs, Env, true).
   
  -%% macro_forms(FileForms, Env) -> {FileForms,Env}.
  +%% macro_forms(FileForms, Env) ->
  +%%     {ok,FileForms,Env,Warnings} | {error,Errors,Warnings}.
   %%  Collect, and remove, all macro definitions in a list of forms. All
   %%  top level macro calls are also expanded and any new macro
   %%  definitions are collected.
  
positive.code:     end;
  pass([], Env, St) -> {[],Env,St}.
  
  %% pass_progn(Forms, Line, Env, State) -> {Forms,Env,State}.
  %%  Pass over a list of forms collecting and removing all macro
  %%  defintions. All forms must be expanded at top-level to check form,
  %%  but all can be expanded to full depth. Nesting of forms by progn
  %%  is preserved.
  
  pass_progn([['progn'|Pfs0]|Fs0], L, Env0, St0) ->
      {Pfs1,Env1,St1} = pass_progn(Pfs0, L, Env0, St0),
      {Fs1,Env2,St2} = pass_progn(Fs0, L, Env1, St1),
      {[['progn'|Pfs1]|Fs1],Env2,St2};
  pass_progn([['eval-when-compile'|Ewcs0]|Fs0], L, Env0, St0) ->
      {Ecws1,Env1,St1} = pass_ewc(Ewcs0, L, Env0, St0),
      {Fs1,Env2,St2} = pass_progn(Fs0, L, Env1, St1),
      {[['progn'|Ecws1]|Fs1],Env2,St2};
  pass_progn([['define-macro'|Def]=F|Fs0], L, Env0, St0) ->
      case pass_define_macro(Def, L, Env0, St0) of
  	{yes,Env1,St1} -> pass_progn(Fs0, L, Env1, St1);
  	{no,St1} ->
  	    %% Ignore it and pass it on to generate error later.
  	    {Fs1,Env1,St2} = pass_progn(Fs0, L, Env0, St1),
  	    {[F|Fs1],Env1,St2}
      end;
  pass_progn([F|Fs0], L, Env0, St0) ->
      %% First expand enough to test top form, if so process again.
      case pass_expand_expr(F, L, Env0, St0, St0#mac.expand) of
  	{yes,Exp,St1} ->			%Top form expanded
  	    pass_progn([Exp|Fs0], L, Env0, St1);
  	{no,F1,St1} -> 				%Expanded all if flag set
  	    {Fs1,Env1,St2} = pass_progn(Fs0, L, Env0, St1),
  	    {[F1|Fs1],Env1,St2}
      end;
  pass_progn([], _, Env, St) -> {[],Env,St}.
  
  %% pass_ewc(Forms, Line, Env, State) -> {Forms,Env,State}.
  %%  Pass over a list of forms collecting and removing all function
  %%  defintions. All forms must be expanded at top-level to check
  %%  form. Nesting of forms by progn is preserved. All functions are
  
negative.code: expand_expr_1(_, _) -> no.
  
  expand_expr([Name|_]=Call, Env) when is_atom(Name) ->
      St0 = #mac{expand=false,line=1},		%Default state
      case exp_macro(Call, Env, St0) of
  	{yes,Exp0,St1} ->
  	    {Exp1,_} = expand_expr_loop(Exp0, Env, St1),
  