code: def coroutine(func, replace_callback=True):
      
      re = tornado.gen._make_coroutine_wrapper(func, replace_callback=True)
      re._rw_wrapped_function = func
      return re
docs: Decorator for asynchronous generators.
  
      Any generator that yields objects from this module must be wrapped
      in either this decorator or `engine`.
  
      Coroutines may "return" by raising the special exception
      `Return(value) <Return>`.  In Python 3.3+, it is also possible for
      the function to simply use the ``return value`` statement (prior to
      Python 3.3 generators were not allowed to also return values).
      In all versions of Python a coroutine that simply wishes to exit
      early may use the ``return`` statement without a value.
  
      Functions with this decorator return a `.Future`.  Additionally,
      they may be called with a ``callback`` keyword argument, which
      will be invoked with the future's result when it resolves.  If the
      coroutine fails, the callback will not be run and an exception
      will be raised into the surrounding `.StackContext`.  The
      ``callback`` argument is not visible inside the decorated
      function; it is handled by the decorator itself.
  
      From the caller's perspective, ``@gen.coroutine`` is similar to
      the combination of ``@return_future`` and ``@gen.engine``.