class RDoc::Parser::Ruby

def parse_method_or_yield_parameters(method = nil,

def parse_method_or_yield_parameters(method = nil,
                                     modifiers = RDoc::METHOD_MODIFIERS)
  skip_tkspace false
  tk = get_tk
  # Little hack going on here. In the statement
  #  f = 2*(1+yield)
  # We see the RPAREN as the next token, so we need
  # to exit early. This still won't catch all cases
  # (such as "a = yield + 1"
  end_token = case tk
              when TkLPAREN, TkfLPAREN
                TkRPAREN
              when TkRPAREN
                return ""
              else
                TkNL
              end
  nest = 0
  loop do
    case tk
    when TkSEMICOLON then
      break
    when TkLBRACE then
      nest += 1
    when TkRBRACE then
      # we might have a.each {|i| yield i }
      unget_tk(tk) if nest.zero?
      nest -= 1
      break if nest <= 0
    when TkLPAREN, TkfLPAREN then
      nest += 1
    when end_token then
      if end_token == TkRPAREN
        nest -= 1
        break if @scanner.lex_state == EXPR_END and nest <= 0
      else
        break unless @scanner.continue
      end
    when method && method.block_params.nil? && TkCOMMENT then
      unget_tk tk
      read_documentation_modifiers method, modifiers
      @read.pop
    when TkCOMMENT then
      @read.pop
    when nil then
      break
    end
    tk = get_tk
  end
  res = get_tkread.gsub(/\s+/, ' ').strip
  res = '' if res == ';'
  res
end