anchor.diff: -%% Copyright (c) 2013-2016 Robert Virding
  +%% Copyright (c) 2013-2017 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: 
  %% trans_qm(Tokens) -> Tokens.
  %%  Translate variable argument names to atoms to get correct
  %%  translation later on: ?Sune -> ?'Sune' -> (Sune)
  
  trans_qm([{'?',_},{atom,_,_}=A,{'(',_}=P|Ts]) ->
      [A,P|trans_qm(Ts)];
  trans_qm([{'?',_},{var,L,V},{'(',_}=P|Ts]) ->
      [{atom,L,V},P|trans_qm(Ts)];
  trans_qm([{'?',L},{atom,_,_}=A|Ts]) ->
      [A,{'(',L},{')',L}|trans_qm(Ts)];
  trans_qm([{'?',L},{var,_,V}|Ts]) ->
      [{atom,L,V},{'(',L},{')',L}|trans_qm(Ts)];
  trans_qm([{'?',L},{'?',_},Arg|Ts]) ->
      %% Expand to call lfe_macro_include:stringify(quote(Arg)).
      [{atom,L,?MODULE},{':',L},{atom,L,stringify},{'(',L},
       {atom,L,quote},{'(',L},Arg,{')',L},
       {')',L}|
       trans_qm(Ts)];
  trans_qm([T|Ts]) -> [T|trans_qm(Ts)];
  trans_qm([]) -> [].
  
negative.code: 
  trans_macro_body([], Ts0) ->
      Ts1 = trans_qm(Ts0),
      %% io:format("parse: ~p\n",[Ts1 ++ [{dot,0}]]),
      {ok,[E]} = erl_parse:parse_exprs(Ts1 ++ [{dot,0}]),
      %% io:format("result: ~p\n",[E]),
      [?BQ(lfe_trans:from_expr(E))];
  trans_macro_body(As, Ts0) ->
      Ts1 = trans_qm(Ts0),
  