anchor.diff:  expr({tuple,_,Es}, Bs0, Lf, Ef, RBs) ->
       {Vs,Bs} = expr_list(Es, Bs0, Lf, Ef),
       ret_expr(list_to_tuple(Vs), Bs, RBs);
  -expr({record_field,_,_,_}=Mod, Bs, _Lf, _Ef, RBs) ->
  -    case expand_module_name(Mod, Bs) of
  -	{atom,_,A} ->
  -	    ret_expr(A, Bs, RBs);    %% This is the "x.y" syntax
  -	_ ->
  -	    erlang:raise(error, {badexpr, '.'}, stacktrace())
  -    end;
   expr({record_field,_,_,Name,_}, _Bs, _Lf, _Ef, _RBs) ->
       erlang:raise(error, {undef_record,Name}, stacktrace());
   expr({record_index,_,Name,_}, _Bs, _Lf, _Ef, _RBs) ->
  
positive.code:      Bs, Lf, Ef, RBs) when length(As0) =< 1 ->
      expr({call,L1,{remote,L2,Mod,Func},As}, Bs, Lf, Ef, RBs);
  expr({call,_,{remote,_,Mod,Func},As0}, Bs0, Lf, Ef, RBs) ->
      Mod1 = expand_module_name(Mod, Bs0),
      {value,M,Bs1} = expr(Mod1, Bs0, Lf, Ef, none),
      {value,F,Bs2} = expr(Func, Bs0, Lf, Ef, none),
      {As,Bs3} = expr_list(As0, merge_bindings(Bs1, Bs2), Lf, Ef),
      %% M could be a parameterized module (not an atom).
  
negative.code: 
  line(Expr) -> element(2, Expr).
  
  %% {?MODULE,expr,3} is still the stacktrace, despite the
  %% fact that expr() now takes two, three or four arguments...
  stacktrace() -> [{?MODULE,expr,3}].
  