anchor.diff:    %% Now that we have all the fn info we re-analyze the methods
     %% with the associated var, so that a recursive
     %% call can be correctly resolved.
  -  VarMeta = #{ 'variadic?'     => IsVariadic
  -             , max_fixed_arity => MaxFixedArity
  -             , variadic_arity  => VariadicArity
  -             },
  -  DefVar1 = clj_core:with_meta(DefVar, VarMeta),
  -  Env3    = clj_env:update_var(Env2, DefVar1),
   
     {MethodsExprs1, Env4} =
  -    analyze_fn_methods(Env3, MethodsList, LoopId, IsOnce, true),
  +    case IsDef of
  +      true  -> 
  +        VarMeta = #{ 'variadic?'     => IsVariadic
  +                   , max_fixed_arity => MaxFixedArity
  +                   , variadic_arity  => VariadicArity
  +                   },
  +        DefVar1 = clj_core:with_meta(DefVar, VarMeta),
  +        Env3    = clj_env:update_var(Env2, DefVar1),
  +
  +        analyze_fn_methods(Env3, MethodsList, LoopId, IsOnce, true);
  +      false -> 
  +        {MethodsExprs, Env2}
  +    end,
  +
   
     FnExpr = #{ op              => fn
               , env             => ?DEBUG(Env)
  
positive.code:                   false -> clj_core:seq2(Methods)
                  end,
  
    %% Add the name of the fn as a local with a modified name so that we can
    %% identify the fun as a clojure function when evaluated with erl_eval
    %% (see clojerl.erlang.Fn)
    PrefixNameSym = 'clojerl.erlang.Fn':prefix(NameSym),
    LocalExpr     = #{op => local, name => PrefixNameSym},
    Env0          = clj_env:put_local( clj_env:add_locals_scope(Env)
                                     , NameSym
                                     , LocalExpr
                                     ),
  
    %% If there is a def var we add it to the local scope
    DefVarNsSym = clj_env:current_ns(Env),
    DefNameSym  = case get_def_name(Env) of
                    undefined -> clj_core:symbol(<<>>);
                    DNS -> DNS
                  end,
    DefVar      = 'clojerl.Var':new( clj_core:name(DefVarNsSym)
                                   , clj_core:name(DefNameSym)
                                   ),
    Env1        = clj_env:update_var(Env0, DefVar),
  
    OpMeta      = clj_core:meta(Op),
    OnceKeyword = clj_core:keyword(<<"once">>),
  
negative.code:              _         -> {function, DefNameSym}
             end,
  
    %% If it is a def analyze methods' args but not the body, 
    %% we just want arity information first.
    {MethodsExprs, Env2} =
      analyze_fn_methods(Env1, MethodsList, LoopId, IsOnce, not IsDef),
  
    MethodArityFun = fun (#{fixed_arity := Arity}) -> Arity end,
    IsVariadicFun  = fun (#{'variadic?' := true}) -> true;
  