<feed xmlns='http://www.w3.org/2005/Atom'>
<title>ruby.git, branch ruby_3_4</title>
<subtitle>The Ruby Programming Language</subtitle>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/'/>
<entry>
<title>Bump pstore version to v0.2.1. [Bug #21880]</title>
<updated>2026-05-09T06:26:33+00:00</updated>
<author>
<name>nagachika</name>
<email>nagachika@ruby-lang.org</email>
</author>
<published>2026-05-09T06:26:07+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=55f7432b303c70f2f0ee6fa4659f6a366292dc3e'/>
<id>55f7432b303c70f2f0ee6fa4659f6a366292dc3e</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>[ruby/syntax_suggest] v2.0.3</title>
<updated>2026-05-09T06:16:03+00:00</updated>
<author>
<name>Earlopain</name>
<email>14981592+Earlopain@users.noreply.github.com</email>
</author>
<published>2026-01-21T17:40:28+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=de535e907196bbd1198dbd69523f4eef18bdd133'/>
<id>de535e907196bbd1198dbd69523f4eef18bdd133</id>
<content type='text'>
https://github.com/ruby/syntax_suggest/commit/a81b92fcf2

[Bug #21847]
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
https://github.com/ruby/syntax_suggest/commit/a81b92fcf2

[Bug #21847]
</pre>
</div>
</content>
</entry>
<entry>
<title>[ruby/syntax_suggest] Refactor multi-prism version logic</title>
<updated>2026-05-09T06:16:03+00:00</updated>
<author>
<name>Schneems</name>
<email>richard.schneeman+foo@gmail.com</email>
</author>
<published>2026-01-20T21:32:33+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=b7d3e381f60e0bc43079f8e7c3db3445e70a8920'/>
<id>b7d3e381f60e0bc43079f8e7c3db3445e70a8920</id>
<content type='text'>
The reason this logic for different methods branches in the class instead of internally was to be eagerly aggressive about runtime performance. This code is currently only used once for the document where it's invoked ~N times (where N is number of lines):

```ruby
module SyntaxSuggest
  class CleanDocument
    # ...
    def join_trailing_slash!
      trailing_groups = @document.select(&amp;:trailing_slash?).map do |code_line|
        take_while_including(code_line.index..) { |x| x.trailing_slash? }
      end
      join_groups(trailing_groups)
      self
    end
```

Since this is not currently a hot-spot I think merging the branches and using a case statement is a reasonable tradeoff and avoids the need to do specific version testing.

An alternative idea was presented in #241 of behavior-based testing for branch logic (which I would prefer), however, calling the code triggered requiring a `DelegateClass` when the `syntax_suggest/api` is being required.

https://github.com/ruby/syntax_suggest/commit/ab122c455f
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The reason this logic for different methods branches in the class instead of internally was to be eagerly aggressive about runtime performance. This code is currently only used once for the document where it's invoked ~N times (where N is number of lines):

```ruby
module SyntaxSuggest
  class CleanDocument
    # ...
    def join_trailing_slash!
      trailing_groups = @document.select(&amp;:trailing_slash?).map do |code_line|
        take_while_including(code_line.index..) { |x| x.trailing_slash? }
      end
      join_groups(trailing_groups)
      self
    end
```

Since this is not currently a hot-spot I think merging the branches and using a case statement is a reasonable tradeoff and avoids the need to do specific version testing.

An alternative idea was presented in #241 of behavior-based testing for branch logic (which I would prefer), however, calling the code triggered requiring a `DelegateClass` when the `syntax_suggest/api` is being required.

https://github.com/ruby/syntax_suggest/commit/ab122c455f
</pre>
</div>
</content>
</entry>
<entry>
<title>[ruby/syntax_suggest] Handle `on_sp` when using prism</title>
<updated>2026-05-09T06:16:03+00:00</updated>
<author>
<name>Earlopain</name>
<email>14981592+Earlopain@users.noreply.github.com</email>
</author>
<published>2026-01-20T12:38:50+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=ec0a6af126e8eae2868f94dabbeb4929e3f55dfd'/>
<id>ec0a6af126e8eae2868f94dabbeb4929e3f55dfd</id>
<content type='text'>
It used to not emit this token type, but now it does.
So when a newer version of prism is present, we can fall back
to the same code that ripper uses.

Ref:
* https://github.com/ruby/ruby/pull/15914
* https://github.com/ruby/prism/pull/3859

https://github.com/ruby/syntax_suggest/commit/42a3b8f6cb
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
It used to not emit this token type, but now it does.
So when a newer version of prism is present, we can fall back
to the same code that ripper uses.

Ref:
* https://github.com/ruby/ruby/pull/15914
* https://github.com/ruby/prism/pull/3859

https://github.com/ruby/syntax_suggest/commit/42a3b8f6cb
</pre>
</div>
</content>
</entry>
<entry>
<title>[ruby/syntax_suggest] bundle exec standardrb --fix</title>
<updated>2026-05-09T06:16:03+00:00</updated>
<author>
<name>Hiroshi SHIBATA</name>
<email>hsbt@ruby-lang.org</email>
</author>
<published>2025-08-19T01:43:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=5b17dd7a4da92ebd575d808e5b522e28a1533cf7'/>
<id>5b17dd7a4da92ebd575d808e5b522e28a1533cf7</id>
<content type='text'>
https://github.com/ruby/syntax_suggest/commit/54bb8ab330
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
https://github.com/ruby/syntax_suggest/commit/54bb8ab330
</pre>
</div>
</content>
</entry>
<entry>
<title>[ruby/syntax_suggest] Resolve to lint failure of standardrb</title>
<updated>2026-05-09T06:16:03+00:00</updated>
<author>
<name>Hiroshi SHIBATA</name>
<email>hsbt@ruby-lang.org</email>
</author>
<published>2025-01-10T05:32:02+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=963085bcb978b8d6b2d2afe38cccb38ee58f4fcc'/>
<id>963085bcb978b8d6b2d2afe38cccb38ee58f4fcc</id>
<content type='text'>
https://github.com/ruby/syntax_suggest/commit/ce7b87184e
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
https://github.com/ruby/syntax_suggest/commit/ce7b87184e
</pre>
</div>
</content>
</entry>
<entry>
<title>[ruby/syntax_suggest] Make benchmark exapmles as optional</title>
<updated>2026-05-09T06:16:03+00:00</updated>
<author>
<name>Hiroshi SHIBATA</name>
<email>hsbt@ruby-lang.org</email>
</author>
<published>2025-01-09T04:27:43+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=c61a2f79f45b5a1b470a7c86dca1e8cff7393658'/>
<id>c61a2f79f45b5a1b470a7c86dca1e8cff7393658</id>
<content type='text'>
https://github.com/ruby/syntax_suggest/commit/ea73ed586a
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
https://github.com/ruby/syntax_suggest/commit/ea73ed586a
</pre>
</div>
</content>
</entry>
<entry>
<title>merge revision(s) f315d250b44e75a1a69f4a05b293dcc701377689: [Backport #21947]</title>
<updated>2026-05-09T06:09:56+00:00</updated>
<author>
<name>nagachika</name>
<email>nagachika@ruby-lang.org</email>
</author>
<published>2026-05-09T06:09:56+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=6eeeb07e273c069273bcd930a612a0c960668a11'/>
<id>6eeeb07e273c069273bcd930a612a0c960668a11</id>
<content type='text'>
	[PATCH] [ruby/timeout] Compatibility with Fiber scheduler. (https://github.com/ruby/timeout/pull/97)

	[Bug #21947]

	https://github.com/ruby/timeout/commit/55d7c84b50
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
	[PATCH] [ruby/timeout] Compatibility with Fiber scheduler. (https://github.com/ruby/timeout/pull/97)

	[Bug #21947]

	https://github.com/ruby/timeout/commit/55d7c84b50
</pre>
</div>
</content>
</entry>
<entry>
<title>merge revision(s) 8f98abfc46d48c84db2b1408fc8f14b240ec05fd: [Backport #21941]</title>
<updated>2026-05-09T05:57:47+00:00</updated>
<author>
<name>nagachika</name>
<email>nagachika@ruby-lang.org</email>
</author>
<published>2026-05-09T05:57:47+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=8a434effcafaa4c2f32170a0003d3c1219110890'/>
<id>8a434effcafaa4c2f32170a0003d3c1219110890</id>
<content type='text'>
	[PATCH] YJIT: Fix not reading locals from `cfp-&gt;ep` after `YJIT.enable` and exceptional entry
	MIME-Version: 1.0
	Content-Type: text/plain; charset=UTF-8
	Content-Transfer-Encoding: 8bit

	Fix for [Bug #21941].

	In case of `--yjit-disable`, YJIT only starts to record environment
	escapes after `RubyVM::YJIT.enable`. Previously we falsely assumed that
	we always have a full history all the way back to VM boot. This had YJIT
	install and run code that assume EP=BP when EP≠BP for some exceptional
	entry into the middle of a running frame, if the environment escaped
	before `YJIT.enable`.

	The fix is to reject exceptional entry with an escaped environment.
	Rename things and explain in more detail how the predicate for deciding
	to assume EP=BP works. It's quite subtle since it reasons about all
	parties in the system that push a control frame and then run JIT code.

	Note that while can_assume_on_stack_env() checks the currently running
	environment if it so happens to be the one YJIT is compiling against, it
	can return true for any ISEQ. The check isn't necessary for fixing the
	bug, and the load bearing part of this patch is the change to
	exceptional entries.

	This fix is flat on speed and space on ruby-bench headline benchmarks.

	Many thanks for the community effort to create a small test case for
	this bug.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
	[PATCH] YJIT: Fix not reading locals from `cfp-&gt;ep` after `YJIT.enable` and exceptional entry
	MIME-Version: 1.0
	Content-Type: text/plain; charset=UTF-8
	Content-Transfer-Encoding: 8bit

	Fix for [Bug #21941].

	In case of `--yjit-disable`, YJIT only starts to record environment
	escapes after `RubyVM::YJIT.enable`. Previously we falsely assumed that
	we always have a full history all the way back to VM boot. This had YJIT
	install and run code that assume EP=BP when EP≠BP for some exceptional
	entry into the middle of a running frame, if the environment escaped
	before `YJIT.enable`.

	The fix is to reject exceptional entry with an escaped environment.
	Rename things and explain in more detail how the predicate for deciding
	to assume EP=BP works. It's quite subtle since it reasons about all
	parties in the system that push a control frame and then run JIT code.

	Note that while can_assume_on_stack_env() checks the currently running
	environment if it so happens to be the one YJIT is compiling against, it
	can return true for any ISEQ. The check isn't necessary for fixing the
	bug, and the load bearing part of this patch is the change to
	exceptional entries.

	This fix is flat on speed and space on ruby-bench headline benchmarks.

	Many thanks for the community effort to create a small test case for
	this bug.
</pre>
</div>
</content>
</entry>
<entry>
<title>- iseq.c: fix passing frozen option to compile_file_prism</title>
<updated>2026-05-05T07:53:12+00:00</updated>
<author>
<name>Vladimir Dementyev</name>
<email>dementiev.vm@gmail.com</email>
</author>
<published>2026-04-21T14:34:44+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=abf5cc668564d08c20be3b91db170e276f49e2c1'/>
<id>abf5cc668564d08c20be3b91db170e276f49e2c1</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
</feed>
