docs: def return_line(self):
          """Return a new line if it is available.
  
          Precondition: self.yieldable() must be True
          """
          assert(self.yieldable())
  
          t = _remove_trailing_new_line(self.read_buffer)
          i = _find_furthest_new_line(t)
  
          if i >= 0:
              l = i + 1
              after_new_line = slice(l, None)
              up_to_include_new_line = slice(0, l)
              r = t[after_new_line]
              self.read_buffer = t[up_to_include_new_line]
          else:  # the case where we have read in entire file and at the "last" line
              r = t
              self.read_buffer = None
          return r