anchor.diff:  % Class declarations create a new scope
   transform(State, {class, Line, Name, Expressions}) ->
     Expressions2 = lists:map(fun(Expression) ->
  -      {ok, _, Expression2} = reia_visitor:transform(Expression, {normal, dict:new()}, fun transform/2),
  +      {ok, _, Expression2} = reia_visitor:transform(Expression, #state{bindings=dict:new()}, fun transform/2),
         Expression2
       end,
       Expressions
  
positive.code:   
  % Generate a method_call node to be processed by reia_class
  build_method_call(Line, Identifier, Arguments, Mode, Dict) ->  
    {ok, {_, Dict2}, IvarsIn}  = reia_visitor:transform(
      {identifier, Line, '__instance_variables'}, 
      {Mode, Dict}, 
      fun transform/2
    ),
    {ok, {_, Dict3}, IvarsOut} = reia_visitor:transform(
      {identifier, Line, '__instance_variables'}, 
      {match, Dict2}, 
      fun transform/2
    ),
    Node = {method_call, Line, Identifier, Arguments, IvarsIn, IvarsOut},
  
negative.code:     error ->
        case internal_variable(Name) of
          true ->
            transform(#state{mode=normal, bindings=dict:store(Name, 0, Dict)}, Node);
          false ->
            throw({error, {Line, lists:flatten(io_lib:format("unbound variable: '~s'", [Name]))}})
        end
    end;
    
  % On the LHS of match expressions, variables are assigned a new version
  transform(#state{mode=match, bindings=Dict}, {identifier, Line, Name}) ->
    {Dict2, Version2} = case dict:find(Name, Dict) of
      {ok, Version} ->
        {dict:store(Name, Version + 1, Dict), Version + 1};
  