
Issue #21114 has been updated by k0kubun (Takashi Kokubun). Backport changed from 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: REQUIRED to 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: DONE ruby_3_4 commit:9a0984436888a59f4914c3035c53657baf62ce2b merged revision(s) commit:b21e1aed2ed5b22b50efc658289a403eeed581df. ---------------------------------------- Bug #21114: Prism hangs up while parsing deeply nested `def` https://bugs.ruby-lang.org/issues/21114#change-111942 * Author: tompng (tomoya ishida) * Status: Closed * Assignee: prism * ruby -v: ruby 3.5.0dev (2025-02-05T08:15:30Z master 141f2924ee) +PRISM [x86_64-linux] * Backport: 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: DONE ---------------------------------------- ~~~ruby Prism.parse "def f\n" * 500 # Ruby 3.4 Prism.parse "def f\n" * 5000 # Ruby 3.5 Prism.parse "def initialize: ()->void\n" * 250 # Ruby 3.4 Prism.parse "def initialize: ()->void\n" * 2500 # Ruby 3.5 #=> hang up, Ctrl-C doesn't work ~~~ Expect to raise ParseError with `@type=:nesting_too_deep` like `Prism.parse '(1+'*10000` ### Background Runnning `rdoc` in `ruby/rbs` directory with Ruby 3.4, RDoc hangs up. RDoc tries to parse the partial file content, and stops with `stdlib/ripper/0/ripper.rbs` (https://github.com/ruby/rbs/blob/a7178b12b041f5b304f4076aa01efed817ba8040/st...) Parseable checking code in RDoc https://github.com/ruby/rdoc/blob/14a7631a3775e033791f13baa3be76c94b908e3d/l... ``` def parseable? text ... eval("BEGIN { throw :valid, true }\n#{text}") ... end ``` However, RBS doesn't seem to use RDoc, so I think it's not a big problem. -- https://bugs.ruby-lang.org/