anchor.diff:  % Variables declared in args do affect the exprs and should be taken
   % into account. Clauses do not return variables list as second argument
   % because variables in one clause should not affect the other.
  -transform({clause, Line, Args, Guards, Exprs}, V, S) ->
  +transform({clause, Line, Args, Guards, Exprs}, F, V, S) ->
     { Var, Def, Mod } = S,
  -  { TArgs, V1 } = transform_tree(Args, V, { true, Def, Mod }),
  -  { TExprs, _ } = transform_tree(Exprs, umerge(V, V1), S),
  +  { TArgs, V1 } = transform_tree(Args, F, V, { true, Def, Mod }),
  +  { TExprs, _ } = transform_tree(Exprs, F, umerge(V, V1), S),
     { clause, Line, TArgs, Guards, TExprs };
   
   % Handles erlang function calls in the following format:
  
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: %
  % The target (Right) of the unary operation can be a match expression.
  % Variables defined inside these expressions needs to be added to the list.
  transform({unary_op, Line, Op, Right}, F, V, S) ->
    { TRight, V1} = transform(Right, F, V, S),
    { { op, Line, Op, TRight }, umerge(V, V1) };
  
  % Handle functions declarations. They preserve the current binding.
  