anchor.diff:      end.
   
   extension_ast(Tag, Context, TreeWalker) ->
  -    case recover(Context#dtl_context.extension_module, compile_ast, [Tag, Context, TreeWalker]) of
  +    case call_extension(Context, compile_ast, [Tag, Context, TreeWalker]) of
           undefined ->
               throw({error, {unknown_extension, Tag}});
           Result ->
  
positive.code: check_scan({ok, Tokens}, Context) ->
      check_parse(erlydtl_parser:parse(Tokens), [], Context);
  check_scan({error, Err, State}, Context) ->
      case recover(Context#dtl_context.extension_module, scan, [State]) of
          undefined ->
              {error, Err};
          {ok, NewState} ->
              %% io:format("recover from:~p~nto: ~p~n", [State, NewState]),
              check_scan(erlydtl_scanner:resume(NewState), Context);
          ExtRes ->
              ExtRes
  
negative.code:                         {ok, DjangoParseTree, CheckSum} ->
                              {{BodyAst, BodyAstInfo}, TreeWalker1} = with_dependency(
  								      {CustomTagFile, CheckSum}, body_ast(DjangoParseTree, Context, TreeWalker)),
                              MatchAst = options_match_ast(Context), 
                              Clause = erl_syntax:clause(
  				       [key_to_string(Tag), erl_syntax:variable("_Variables"), erl_syntax:variable("RenderOptions")],
  				       none, MatchAst ++ [BodyAst]),
  