anchor.diff:  	    wait_req_scan(St)
       end;
   scan_toks(Toks0, From, St) ->
  -    case catch expand_macros(Toks0, {St#epp.macs, St#epp.uses}) of
  +    case catch expand_macros(Toks0, St) of
   	Toks1 when is_list(Toks1) ->
   	    epp_reply(From, {ok,Toks1}),
   	    wait_req_scan(St#epp{macs=scan_module(Toks1, St#epp.macs)});
  
positive.code: 
  %% Macro expansion
  %% Note: io:scan_erl_form() does not return comments or white spaces.
  expand_macros([{'?',_Lq},{atom,_Lm,M}=MacT|Toks], Ms) ->
      expand_macros(MacT, M, Toks, Ms);
  %% Special macros
  expand_macros([{'?',_Lq},{var,Lm,'LINE'}=Tok|Toks], Ms) ->
      Line = erl_scan:line(Tok),
      [{integer,Lm,Line}|expand_macros(Toks, Ms)];
  expand_macros([{'?',_Lq},{var,_Lm,M}=MacT|Toks], Ms) ->
      expand_macros(MacT, M, Toks, Ms);
  %% Illegal macros
  expand_macros([{'?',_Lq},Token|_Toks], _Ms) ->
      T = case erl_scan:text(Token) of
              Text when is_list(Text) ->
                  Text;
  
negative.code:     [T|macro_expansion(Ts, T)];
  macro_expansion([], Anno0) -> throw({error,loc(Anno0),premature_end}).
  
  %% expand_macros(Tokens, St)
  %% expand_macro(Tokens, MacroToken, RestTokens)
  %%  Expand the macros in a list of tokens, making sure that an expansion
  %%  gets the same location as the macro call.
  
  expand_macros(MacT, M, Toks, St) ->
      #epp{macs=Ms,uses=U} = St,
      Lm = loc(MacT),
      Tinfo = element(2, MacT),
      case expand_macro1(Lm, M, Toks, Ms) of
  	{ok,{none,Exp}} ->
  	    check_uses([{M,none}], [], U, Lm),
  	    Toks1 = expand_macros(expand_macro(Exp, Tinfo, [], #{}), St),
  	    expand_macros(Toks1++Toks, St);
  	{ok,{As,Exp}} ->
  	    check_uses([{M,length(As)}], [], U, Lm),
  	    {Bs,Toks1} = bind_args(Toks, Lm, M, As, #{}),
  	    expand_macros(expand_macro(Exp, Tinfo, Toks1, Bs), St)
      end.
  
  expand_macro1(Lm, M, Toks, Ms) ->
  