anchor.diff:            [NameAst,SuperClassAst,Body] = _Children}, #{ self := Self } = Env) ->
     {_,_,const,_,[_,Name]} = NameAst,
     NameEnv = eval_ast(NameAst,Env),
  -  #{ret_val := ClassConst} = NameEnv,
  +  ClassConst = erruby_rb:ret_val(NameEnv),
     SuperClassEnv = eval_ast(SuperClassAst,NameEnv),
  -  #{ret_val := SuperClassConst} = SuperClassEnv,
  +  SuperClassConst = erruby_rb:ret_val(SuperClassEnv),
     %TODO should fail when SuperClassConst is not defined
     Class = case ClassConst of
               not_found -> {ok, NewClass} = erruby_class:new_class(SuperClassConst),
  
positive.code:   erruby_boolean:new_false(Env);
  
  eval_ast({ast, type, array, children, Args}, Env) ->
    [_ |Envs] = scanl(fun eval_ast/2, Env, Args),
    EvaledArgs = lists:map( fun erruby_rb:ret_val/1, Envs),
    LastEnv = lists:last(Envs),
    erruby_array:new_array(LastEnv, EvaledArgs);
  
  eval_ast({ast, type, int, children, [N]}, Env) ->
  
negative.code:     {ast, type, const, children, _} -> eval_ast(ParentConstAst, Env)
    end.
  
  eval_args(ArgAsts, Env) ->
    [_ |Envs] = scanl(fun eval_ast/2, Env, ArgAsts),
    EvaledArgs = lists:map( fun erruby_rb:ret_val/1, Envs),
    LastEnv = case Envs of
                [] -> Env;
                _ -> lists:last(Envs)
              end,
    {EvaledArgs, LastEnv}.
  
  
  yield(Env, Args)->
    Block = find_block(Env),
    #{body := Body, args := {ast, type, args, children, ArgNamesAst}} = Block,
  