# File lib/merb-core/controller/abstract_controller.rb, line 190
  def _dispatch(action=:to_s)
    setup_session
    self.action_name = action
    
    caught = catch(:halt) do
      start = Time.now
      result = _call_filters(_before_filters)
      @_benchmarks[:before_filters_time] = Time.now - start if _before_filters
      result
    end
  
    @body = case caught
    when :filter_chain_completed  then _call_action(action_name)
    when String                   then caught
    when nil                      then _filters_halted
    when Symbol                   then __send__(caught)
    when Proc                     then caught.call(self)
    else
      raise MerbControllerError, "The before filter chain is broken dude. wtf?"
    end
    start = Time.now
    _call_filters(_after_filters) 
    @_benchmarks[:after_filters_time] = Time.now - start if _after_filters
    finalize_session
    @body
  end