anchor.diff:  % It does not accummulate variables because variables in one
   % clause do not affect the other. Each clause starts with an
   % empty variable set as there is no binding.
  -pack_method_clause({clause, Line, Args, Guards, Exprs}, V, S) ->
  +pack_method_clause({clause, Line, Args, Guards, Exprs}, F, V, S) ->
     Clause = {clause, Line, [{var, Line, self}|Args], Guards, Exprs},
  -  transform(Clause, [self], S).
  +  transform(Clause, F, [self], S).
   
   % Build a list transforming each expression and accumulating
   % vars in one pass. It uses tail-recursive form.
  
positive.code: %
  % The Left and Right values of the binary operation can be a match expression.
  % Variables defined inside these expressions needs to be added to the list.
  transform({binary_op, Line, Op, Left, Right}, V, S) ->
    { TLeft, VL } = transform(Left, V, S),
    { TRight, VR } = transform(Right, V, S),
    Args = { cons, Line, TRight, {nil, Line} },
    { ?ELIXIR_WRAP_CALL(Line, elixir_dispatch, dispatch, [TLeft, {atom, Line, Op}, Args]), umerge3(V, VL, VR) };
  
  
negative.code: %
  % Each expression in the tuple can contain a match expression.
  % Variables defined inside these expressions needs to be added to the var list.
  transform({tuple, Line, Exprs }, F, V, S) ->
    { TExprs, VE } = transform_tree(Exprs, F, V, S),
    { {tuple, Line, TExprs}, umerge(V, VE) };
  
  % Handle list declarations.
  