anchor.diff:      match_tuple(Elts, Tuple, 1, Bs, BBs);
   match1({tuple,_,_}, _, _Bs, _BBs) ->
       throw(nomatch);
  +match1({map,_,Fs}, Map, Bs, BBs) ->
  +    match_map(Fs, Map, Bs, BBs);
  +
   match1({bin, _, Fs}, <<_/bitstring>>=B, Bs0, BBs) ->
       eval_bits:match_bits(Fs, B, Bs0, BBs,
   			 match_fun(BBs),
  
positive.code: match_tuple([], _, _, Bs, _BBs) ->
      {match,Bs}.
  
  %% match_list(PatternList, TermList, Bindings) ->
  %%	{match,NewBindings} | nomatch
  %%  Try to match a list of patterns against a list of terms with the
  
negative.code:     erlang:raise(error, {undef_record,Name}, stacktrace());
  expr({record,_,_,Name,_}, _Bs, _Lf, _Ef, _RBs) ->
      erlang:raise(error, {undef_record,Name}, stacktrace());
  
  %% map
  expr({map_field,_,EK, EV}, Bs0, Lf, Ef, RBs) ->
      {value,K,Bs1} = expr(EK, Bs0, Lf, Ef, none),
      {value,V,Bs2} = expr(EV, Bs0, Lf, Ef, none),
      ret_expr({K,V}, merge_bindings(Bs1,Bs2), RBs);
  expr({map,_, Binding,Es}, Bs0, Lf, Ef, RBs) ->
      {value, Map0, Bs1} = expr(Binding, Bs0, Lf, Ef, RBs),
      {Vs,Bs} = expr_list(Es, Bs1, Lf, Ef),
      ret_expr(lists:foldl(fun({K,V}, Mi) -> map:put(K,V,Mi) end, Map0, Vs), Bs, RBs);
  expr({map,_,Es}, Bs0, Lf, Ef, RBs) ->
      {Vs,Bs} = expr_list(Es, Bs0, Lf, Ef),
      ret_expr(lists:foldl(fun({K,V}, Mi) -> map:put(K,V,Mi) end, map:new(), Vs), Bs, RBs);
  
  
  expr({block,_,Es}, Bs, Lf, Ef, RBs) ->
      exprs(Es, Bs, Lf, Ef, RBs);
  expr({'if',_,Cs}, Bs, Lf, Ef, RBs) ->
  