-*- coding: utf-8 -*-

base-url = https://github.com/ruby/ruby

commit 75d6b159eba73d4effe5989052f621177423e9db
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-03-04 20:37:32 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-03-04 21:12:58 +0900

    Always strictly align iseq compile data

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16301

commit d2516d32418e7414667d1e1cd16b02cc622e1881
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-03-03 23:48:27 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-03-04 21:12:58 +0900

    Calculate padding by alignment size

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16301

commit 795619ec11b9803f38a32edf1daba6557dddb149
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-03-04 20:49:25 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-03-04 20:49:58 +0900

    [ruby/prism] Revert "Reject infix operators on command call on
    writes"
    (https://github.com/ruby/prism/pull/3960)

    This reverts commit https://github.com/ruby/prism/commit/4e71dbfc7bd9.

    And also add a regression test. Seems like currently prism parses these the same that parse.y does.

    https://github.com/ruby/prism/commit/03993421f2

commit 4d7f3ba286f3bc67554417008d4707f014520ce6
  Author:     Matt Valentine-House <matt@eightbitraptor.com>
  AuthorDate: 2026-02-13 08:12:19 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-03-04 20:02:36 +0900

    [ruby/mmtk] Cargo format

    https://github.com/ruby/mmtk/commit/7889da7c0e

commit 45dabe3382bc71fbb40ec60eb3eaa0e21de2564d
  Author:     Matt Valentine-House <matt@eightbitraptor.com>
  AuthorDate: 2026-02-13 07:59:02 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-03-04 20:02:35 +0900

    [ruby/mmtk] Distribute batch candidates across parallel buckets

    Instead of sending all 128 buffered objects to one bucket,
    round-robin distribute them across all worker buckets so
    parallel obj_free work stays balanced.

    https://github.com/ruby/mmtk/commit/e1f926cd21

commit 3ec9bafea1a08eee3a8c76dc01d01ef0ba61f81c
  Author:     Matt Valentine-House <matt@eightbitraptor.com>
  AuthorDate: 2026-02-13 07:40:01 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-03-04 20:02:35 +0900

    [ruby/mmtk] Flush obj_free buffers before shutdown finalizers

    shutdown_call_finalizer reads candidates from the Rust-side
    WeakProcessor, but the main ractor's C-side buffer may not
    have been flushed yet (ractor_cache_free runs later). Flush
    all remaining buffers before reading candidates.

    https://github.com/ruby/mmtk/commit/7e01232134

commit 092620090a3e639b223a7f03fbdfdd088d93a141
  Author:     Matt Valentine-House <matt@eightbitraptor.com>
  AuthorDate: 2026-02-13 00:40:56 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-03-04 20:02:35 +0900

    [ruby/mmtk] Fix Cargo format issues

    https://github.com/ruby/mmtk/commit/26ec9f7f89

commit fa8b6aff710e97923cbf80ac8627b798cfe476e4
  Author:     Matt Valentine-House <matt@eightbitraptor.com>
  AuthorDate: 2026-02-13 00:20:56 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-03-04 20:02:35 +0900

    [ruby/mmtk] Buffer obj_free candidates.

    Previously, every object allocation in rb_gc_impl_new_obj made a
    per-object FFI call into Rust (mmtk_add_obj_free_candidate), which
    acquired a mutex on one of the WeakProcessor's candidate vecs, pushed a
    single element, and released the mutex. That's an FFI crossing + mutex
    lock/unlock on every single allocation.

    Now, each MMTk_ractor_cache has two local buffers (parallel-freeable and
    non-parallel-freeable, 128 entries each). On allocation, we just store
    the pointer into the local buffer. When a buffer fills up, we flush the
    entire batch in one FFI call using mmtk_add_obj_free_candidates, which
    does a single mutex acquisition and extend_from_slice for the whole
    batch.

    We picked 128 as our buffer size at random. We should probably
    investigate further what an optimum size for this is

    https://github.com/ruby/mmtk/commit/23c4a9a676

commit d3b6bfe6f530cb5b4a03918bf12b0e6315c53513
  Author:     Andrii Furmanets <furmanets.andriy@gmail.com>
  AuthorDate: 2026-03-04 17:21:52 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-03-04 18:39:10 +0900

    [ruby/rubygems] Drop subprocess regression test for request proxy lookup

    https://github.com/ruby/rubygems/commit/fdae8c7698

commit d920d3995689cb2cc46c00d16cabaaaca5abfd6c
  Author:     Andrii Furmanets <furmanets.andriy@gmail.com>
  AuthorDate: 2026-03-03 01:54:29 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-03-04 18:39:09 +0900

    [ruby/rubygems] Fix Gem::Request proxy env lookup when required directly

    https://github.com/ruby/rubygems/commit/db8fd6becb

commit f57af84dba44365ef175026f0c8cb1bd52949c47
  Author:     Edouard CHIN <chin.edouard@gmail.com>
  AuthorDate: 2026-02-28 09:47:47 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-03-04 15:58:36 +0900

    [ruby/rubygems] Fix plugin new version not registering:

    - ### Problem

      When a plugin in the Gemfile is updated to a new version, it will
      be downloaded but will not be registered. The old version of the
      plugin will be loaded when Bundler is invoked.

      ### Context

      The problem is in the `Index#installed?` method that only checks for
      the plugin name in the index. If it finds one, it skips the
      registration.

      ### Solution

      Check whether the registed plugin load paths matche the new plugin
      one. If not, register the new plugin which will override the
      previous one in the index.

    https://github.com/ruby/rubygems/commit/ac65001055

commit 115b4c65440557eaa89c6ceadc39fe6eea1b984d
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-03-04 15:50:58 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-03-04 15:51:37 +0900

    Add NEWS.md entry for ENV.fetch_values and that tests

    From https://github.com/ruby/ruby/pull/16289

    Co-authored-by: Suleyman Musayev <96992680+msuliq@users.noreply.github.com>

commit f604d1a879454f8cc807e31f65ee230327aae9de
  Author:     Edouard CHIN <chin.edouard@gmail.com>
  AuthorDate: 2026-03-03 08:50:48 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-03-04 11:24:52 +0900

    [ruby/rubygems] Update the man pages header to be in sync with the config one

    https://github.com/ruby/rubygems/commit/77def7f4e0

commit 5b6c6414cf7f1dbdcdc771192f5b2e124dbf61f3
  Author:     Edouard CHIN <chin.edouard@gmail.com>
  AuthorDate: 2026-03-03 08:29:23 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-03-04 11:24:51 +0900

    [ruby/rubygems] Add a new Bundler config to control how many specs are fetched:

    - ### Problem

      In #9071, I increased the API_REQUEST_SIZE constants to fetch 100
      specifications at once instead of 50.
      Worth to remember that this codepath is exclusively used for servers
      that don't implement the compact index API and where Bundler has to
      fallback on the `/v1/dependencies` endpoint.

      Fetching 100 gems at once seems not supported by some gem servers.
      See https://github.com/ruby/rubygems/issues/9345

      ### Solution

      I'd like to provide a new Bundler configuration
      `BUNDLE_API_REQUEST_SIZE` to let users of those servers control how
      many dependencies should be fetched at once.

      ### Alternatives

      The other alternative is to revert #9071 and always fetch 50 specs.
      I tried the number 100 on a single rubygem registry (cloudsmith),
      and I don't have data point to know whether this value is supported
      by most registries.

    https://github.com/ruby/rubygems/commit/1a3bace42e

commit 2be717ae7f3a8ca9063d3971bce541dec005a767
  Author:     John Hawthorn <john@hawthorn.email>
  AuthorDate: 2026-02-26 04:55:12 +0900
  Commit:     John Hawthorn <john@hawthorn.email>
  CommitDate: 2026-03-04 08:53:19 +0900

    Shrink struct rb_callinfo to 32 bytes

    This shouldn't do anything right now under the default GC, but in the
    future (or now on MMTK?) this would allow them to be allocated from a
    smaller size pool.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16250

commit f9c51ac5ea42382a22fb8a2cc5d7aeb78e77c962
  Author:     Max Bernstein <rubybugs@bernsteinbear.com>
  AuthorDate: 2026-03-04 08:01:30 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-03-04 08:01:30 +0900

    ZJIT: Fix Class type system bug and constant-fold IsA (#15268)

    Fix a some bugs in the type lattice around classes and user-defined classes. Refine types more precisely to subclasses of object.

    With that fix, add const-folding support for IsA.

    Co-authored-by: John Hawthorn <john.hawthorn@shopify.com>
    Co-authored-by: Luke Gruber <luke.gruber@shopify.com>

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit a88e2abb42687c038694b81df31c9baf296ddeeb
  Author:     Andrew Konchin <andry.konchin@gmail.com>
  AuthorDate: 2026-03-03 22:27:56 +0900
  Commit:     Benoit Daloze <eregontp@gmail.com>
  CommitDate: 2026-03-04 07:42:56 +0900

    Update to ruby/spec@af627d6

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16292

commit 6b6ceb97db47b7f7e6a91c21b8f5147ba5f751be
  Author:     Andrew Konchin <andry.konchin@gmail.com>
  AuthorDate: 2026-03-03 22:27:53 +0900
  Commit:     Benoit Daloze <eregontp@gmail.com>
  CommitDate: 2026-03-04 07:42:56 +0900

    Update to ruby/mspec@a2587d9

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16292

commit f46eb48b261a9289a463a29fbceaecf37ee860dd
  Author:     Matt Valentine-House <matt@eightbitraptor.com>
  AuthorDate: 2026-03-03 23:28:03 +0900
  Commit:     Matt Valentine-House <matt@eightbitraptor.com>
  CommitDate: 2026-03-04 06:00:57 +0900

    Expand the Shape heap index mask

    I think we have spare bits here, so let's expand them out and see what
    happens. This will allow us to have more than 7 size pools in the future

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16294

commit b2ff380d5ba0c966b3bfcd2fd05afd0934bfd84a
  Author:     ndossche <nora.dossche@ugent.be>
  AuthorDate: 2026-02-25 07:12:19 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-03-04 03:02:07 +0900

    [ruby/openssl] Fix memory leak if ossl_bn_new() fails

    When that call fails, the `bn` BIGNUM is never freed in
    asn1integer_to_num(). To solve this, use rb_protect().

    Example Valgrind report:
    ```
    32 (24 direct, 8 indirect) bytes in 1 blocks are definitely lost in loss record 11,113 of 25,910
      malloc (at /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
      CRYPTO_zalloc (at /usr/lib/x86_64-linux-gnu/libcrypto.so.3)
      BN_new (at /usr/lib/x86_64-linux-gnu/libcrypto.so.3)
      BN_bin2bn (at /usr/lib/x86_64-linux-gnu/libcrypto.so.3)
      <unknown stack frame>
     *asn1integer_to_num (ossl_asn1.c:136)
     *asn1integer_to_num_i (ossl_asn1.c:165)
      rb_protect (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
     *decode_int (ossl_asn1.c:356)
     *int_ossl_asn1_decode0_prim (ossl_asn1.c:777)
     *ossl_asn1_decode0 (ossl_asn1.c:936)
     *ossl_asn1_decode_all (ossl_asn1.c:1058)
      <unknown stack frame>
      <unknown stack frame>
      <unknown stack frame>
      rb_vm_exec (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
      <unknown stack frame>
      <unknown stack frame>
      rb_catch_obj (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
      <unknown stack frame>
      <unknown stack frame>
      <unknown stack frame>
      rb_vm_exec (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
      rb_yield (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
      rb_ary_each (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
      <unknown stack frame>
      <unknown stack frame>
      <unknown stack frame>
      rb_vm_exec (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
      rb_yield (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
      rb_ary_each (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
      <unknown stack frame>
      <unknown stack frame>
      <unknown stack frame>
      rb_vm_exec (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
      rb_yield (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
      rb_ary_each (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
      <unknown stack frame>
      <unknown stack frame>
      <unknown stack frame>
      rb_vm_exec (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
      <unknown stack frame>
      <unknown stack frame>
      rb_catch_obj (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
      <unknown stack frame>
      <unknown stack frame>
      <unknown stack frame>
      rb_vm_exec (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
      rb_vm_invoke_proc (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
      rb_proc_call_kw (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
    ```

    https://github.com/ruby/openssl/commit/309c55d755

commit e30b5a06dc0a43c35ca9545c661784dcdb5c6806
  Author:     Jeff Zhang <jeff.j.zhang@shopify.com>
  AuthorDate: 2026-03-04 01:19:28 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-03-04 01:19:28 +0900

    ZJIT: Add diff tool for running benchmarks between git refs (#16160)

    For https://github.com/Shopify/ruby/issues/822

    Adds a small script for automatically running benchmarks between two git refs.

    Example output (doubled an increment to `inline_cfunc_optimized_send_count` to illustrate stat diffs):
    ```
    $ ./zjit_diff --before master
    I, [2026-03-03T10:24:52.691660 #48554]  INFO -- : Existing worktree found at /var/folders/l_/p20zlp5j3wx76vr9ggzgzcmr0000gn/T/ruby-zjit-before
    HEAD is now at 7a3940e8b6 Unify rb_node_list_new and rb_node_list_new2
    I, [2026-03-03T10:24:52.729815 #48554]  INFO -- : Found existing build for master, skipping build
    I, [2026-03-03T10:24:52.729881 #48554]  INFO -- : Existing worktree found at /var/folders/l_/p20zlp5j3wx76vr9ggzgzcmr0000gn/T/ruby-zjit-after
    HEAD is now at 3859f12966 dup
    I, [2026-03-03T10:24:52.801287 #48554]  INFO -- : Found existing build for HEAD, skipping build
    I, [2026-03-03T10:24:52.801354 #48554]  INFO -- : Running benchmarks
    I, [2026-03-03T10:24:52.801404 #48554]  INFO -- : ruby-bench already cloned, pulling from upstream

    <... benchmark run logs ...>

    before: ruby 4.1.0dev (2026-03-03T14:05:00Z master 7a3940e8b6) +ZJIT dev +PRISM [arm64-darwin25]
    last_commit=Unify rb_node_list_new and rb_node_list_new2
    after: ruby 4.1.0dev (2026-03-03T15:17:20Z :detached: 3859f12966) +ZJIT dev +PRISM [arm64-darwin25]

    ----------  -------------  -------------  -------------  ------------
    bench         before (ms)     after (ms)  after 1st itr  before/after
    lobsters     747.9 ± 2.9%   757.7 ± 2.4%          0.983   0.987
    railsbench  1183.4 ± 1.9%  1214.5 ± 2.4%          1.001   0.974 (*)
    ----------  -------------  -------------  -------------  ------------

    Legend:
    - after 1st itr: ratio of before/after time for the first benchmarking iteration.
    - before/after: ratio of before/after time. Higher is better for after. Above 1 represents a speedup.
    - ***: p < 0.001, **: p < 0.01, *: p < 0.05 (Welch's t-test)

    Output:
    data/zjit_diff.json
    ================================================================================
    ZJIT Stats Comparison
    ================================================================================

      before (baseline):
        ruby 4.1.0dev (2026-03-03T14:05:00Z master 7a3940e8b6) +ZJIT dev +PRISM [arm64-darwin25]
    last_commit=Unify rb_node_list_new and rb_node_list_new2
      after:
        ruby 4.1.0dev (2026-03-03T15:17:20Z :detached: 3859f12966) +ZJIT dev +PRISM [arm64-darwin25]

    BENCHMARK TIMINGS (lower is better)
    --------------------------------------------------------------------------------
      lobsters:
        before               avg:   0.748s  min:   0.706s  ★ (baseline)
        after                avg:   0.758s  min:   0.735s       +1.3% (slower)
      railsbench:
        before               avg:   1.183s  min:   1.158s  ★ (baseline)
        after                avg:   1.214s  min:   1.182s       +2.6% (slower)

    MEMORY USAGE
    --------------------------------------------------------------------------------
      lobsters:
        before               maxrss:    548.3MB  zjit_mem:     68.6MB
        after                maxrss:    520.8MB  zjit_mem:     68.3MB
      railsbench:
        before               maxrss:    208.3MB  zjit_mem:     29.3MB
        after                maxrss:    205.7MB  zjit_mem:     29.3MB

    SEND COUNTERS (showing differences > 5.0%)
    --------------------------------------------------------------------------------
      lobsters:
        inline_cfunc_optimized_send_count      64,066,387 ( 37.3%) →    105,498,619 ( 61.4%) ▲  +64.7%
        optimized_send_count                  136,557,743 ( 79.5%) →    177,989,922 (103.6%) ▲  +30.3%
        send_count                            171,791,578 (100.0%) →    213,223,697 (124.1%) ▲  +24.1%
      railsbench:
        inline_cfunc_optimized_send_count     130,638,873 ( 36.3%) →    225,643,322 ( 62.8%) ▲  +72.7%
        optimized_send_count                  306,690,230 ( 85.3%) →    401,694,689 (111.8%) ▲  +31.0%
        send_count                            359,393,477 (100.0%) →    454,397,936 (126.4%) ▲  +26.4%

    SUMMARY COUNTERS (showing differences > 5.0%)
    --------------------------------------------------------------------------------
      railsbench:
        invalidation_time                             7ms →            7ms ▲   +5.3%

    COMPILE HIR PASS TIMINGS (showing differences > 5.0%)
    --------------------------------------------------------------------------------
      lobsters:
        eliminate_dead_code_time                    245ms →          232ms ▼   -5.3%
    ```

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit 7a3940e8b60a3f0b62db05210947ab841a029ca3
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-03-03 21:25:06 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-03-03 23:05:00 +0900

    Unify rb_node_list_new and rb_node_list_new2

    The former is the specialized case of the latter.

commit c128106e60f1a65243b3782a0f14a7a644b7ba6f
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-03-03 21:24:12 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-03-03 23:05:00 +0900

    Adjust variable type for rb_block_given_p()

commit 8c7f4db893af4c9e40eab5810dc58737dc9010bb
  Author:     Kevin Newton <kddnewton@gmail.com>
  AuthorDate: 2026-03-03 22:16:42 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-03-03 22:40:10 +0900

    [ruby/prism] Fix modifier rescue pattern matching

    [Bug #21713]

    https://github.com/ruby/prism/commit/02c944c055

commit a2db2d429f14514c67fcf0523891cd9062dd6a5b
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-02-15 19:51:29 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-03-03 20:48:43 +0900

    [Feature #21781] Add `ENV.fetch_values`

    Specs/Implementation inspired by methods on hash/env that already exist.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16177

commit 1008a469499bbbefb31f59a1b2cbb6ce0120bbfa
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-18 14:21:45 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-03-03 15:04:08 +0900

    [ruby/rubygems] Show release date with bundle outdated

    https://github.com/ruby/rubygems/commit/300cc0c223

commit 8d64eb685401c794a45e489096e0b153a8d62b88
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-13 13:13:27 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-03-03 12:29:20 +0900

    [ruby/stringio] Allow read-only methods to work with frozen StringIO

    Fix https://github.com/ruby/stringio/pull/120

    https://github.com/ruby/stringio/commit/b0e3ce88b3

commit 571ce8d77968edcae4d908353f68b6d66d483131
  Author:     Charles Oliver Nutter <headius@headius.com>
  AuthorDate: 2025-02-21 01:55:09 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-03-03 12:29:20 +0900

    [ruby/stringio] Add tests for read-only methods on frozen StringIO

    See #120

    https://github.com/ruby/stringio/commit/8cba5aac0a

commit 993c7a272af960d31a3c776129ac4edff6b0b9cd
  Author:     Max Bernstein <rubybugs@bernsteinbear.com>
  AuthorDate: 2026-03-03 06:58:32 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-03-03 06:58:32 +0900

    ZJIT: Don't use find() in clean_cfg (#16284)

    We don't need to materialize an instruction or even look at its
    operands.

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit 2ccb44c1ba52f5ffbf0e35b218c512b0011281a2
  Author:     Max Bernstein <rubybugs@bernsteinbear.com>
  AuthorDate: 2026-03-03 06:35:15 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-03-03 06:35:15 +0900

    ZJIT: Don't use find() in infer_types (#16283)

    No need to materialize the whole instruction; if/when we need the
    operands, do the union-find lookup per operand. This saves on allocation
    time.

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit a81c3eb795b93631bac997731590e68c3fd399c2
  Author:     Max Bernstein <rubybugs@bernsteinbear.com>
  AuthorDate: 2026-03-03 06:06:03 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-03-03 06:06:03 +0900

    ZJIT: Use LoadField for TypedData ivars (#16259)

    Drops C calls to `rb_ivar_get_at_no_ractor_check` out of the stats completely.

    Co-authored-by: Alan Wu <XrXr@users.noreply.github.com>

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit 3b6562f663c14d848f8c4f752b5557b8e85d5910
  Author:     Kevin Newton <kddnewton@gmail.com>
  AuthorDate: 2026-03-03 05:24:46 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-03-03 05:41:55 +0900

    [ruby/prism] Fix up endless method definition with do/end

    [Bug #21714]

    https://github.com/ruby/prism/commit/0f47e18335

commit 2b8c10075e21be9bcc33030a399e7c4bdf286c21
  Author:     Kevin Newton <kddnewton@gmail.com>
  AuthorDate: 2026-03-03 04:10:45 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-03-03 04:48:18 +0900

    [ruby/prism] Prism::ParseResult#continuable?

    An API to determine if more input could fix the existing syntax errors.

    https://github.com/ruby/prism/commit/6701ffe0f5

commit 2106ecec1d5b257b1b92a0a66dc3f5e392f68ffe
  Author:     Kevin Newton <kddnewton@gmail.com>
  AuthorDate: 2026-03-03 02:43:30 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-03-03 02:54:26 +0900

    [ruby/prism] Require arguments to Source.for

    https://github.com/ruby/prism/commit/b38010c420

commit 726205b354d1068147719fb42e1de743f1838ef1
  Author:     ZHIJIE XIE <40601688+dummyx@users.noreply.github.com>
  AuthorDate: 2026-03-03 02:40:57 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-03-03 02:40:57 +0900

    string.c: guard tmp in rb_str_format_m (GH-16280)

    Keep tmp alive while RARRAY_CONST_PTR(tmp) is used by rb_str_format.

    [alan: sunk the guard below usage]
    Reviewed-by: Alan Wu <XrXr@users.noreply.github.com>

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16280

    Merged-By: XrXr

commit 460566ab854e79ed43afdd0c01b14cbd7501fee6
  Author:     Kevin Newton <kddnewton@gmail.com>
  AuthorDate: 2026-03-03 02:25:27 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-03-03 02:35:03 +0900

    [ruby/prism] Reject infix operators on command call on writes

    https://github.com/ruby/prism/commit/4e71dbfc7b

commit c7ed328cd569a258aa949f78f721195e2be15e9e
  Author:     Kevin Newton <kddnewton@gmail.com>
  AuthorDate: 2026-03-03 01:49:29 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-03-03 02:07:05 +0900

    [ruby/prism] Fix in handling

    in is a unique keyword because it can be the start of a clause or
    an infix keyword. We need to be explicitly sure that even though in
    _could_ close an expression context (the body of another in clause)
    that we are not also parsing an inline in. The exception is the
    case of a command call, which can never be the LHS of an expression,
    and so we must immediately exit.

    [Bug #21925]
    [Bug #21674]

    https://github.com/ruby/prism/commit/20374ced51

commit 6a31ffa3d492852fd8f409e3ae1e86f2891cc104
  Author:     Alan Wu <XrXr@users.noreply.github.com>
  AuthorDate: 2026-02-28 11:42:48 +0900
  Commit:     Alan Wu <XrXr@users.noreply.github.com>
  CommitDate: 2026-03-03 01:05:16 +0900

    ZJIT: Move is_meta_class() from hir::Function to VALUE

    `self` was unused.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16272

commit 740bbddd2ff9b78f5eb3062cdbfcbd397d989f68
  Author:     ydah <t.yudai92@gmail.com>
  AuthorDate: 2026-03-01 21:46:40 +0900
  Commit:     yui-knk <spiketeika@gmail.com>
  CommitDate: 2026-03-02 15:37:38 +0900

    Lrama v0.8.0

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16276

commit b0ee787733f2a497b5b8d4a14118cfe0c684e349
  Author:     Taketo Takashima <t.taketo1113@gmail.com>
  AuthorDate: 2026-03-02 13:38:05 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-03-02 15:20:44 +0900

    [ruby/rubygems] Restrict GitHub Actions workflow permissions for newgem

    - Configure minimal required permissions in the GitHub Actions workflow template
    - Bump actions/checkout from 4 to 6
    - Bump actions/upload-artifact from 3 to 7

    https://github.com/ruby/rubygems/commit/e4c82bd095

commit b92f1d1097039dc5b4216994d4eb6c9c3e47d345
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-03-02 14:15:12 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-03-02 15:19:20 +0900

    Use .bundle only if all deps present

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16279

commit 4fc55d888b15ae2875e8458200882e3bad701cc5
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-03-02 12:52:37 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-03-02 15:19:20 +0900

    Use .bundle gem paths for test deps with ruby/ruby repository.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16279

commit d68e4be1873e364c5ee24ed112bce4bc86e3a406
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-03-01 19:38:14 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-03-01 19:44:59 +0900

    lrama pre-0.8.0

    master as of 2026-03-01.
    ruby/lrama@e8dbb063afd42432899dac796384b00ef61986b0

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16275

commit 45dce19e22de7341d399c09599f3449fa3750a34
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-03-01 12:19:45 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-03-01 19:44:59 +0900

    parse.y: Parameterize argument list rules

    Parametrize `block_param` and `f_args` into `arg-list` and
    `tail-only-args`.  Since the pattern for `pre_args` alone differs
    between `opt_comma` and `excessed_comma`, retain it within each rule.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16275

commit 0980de4c1a3dd9939fbf4abcf812a9e2695e3786
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-03-01 12:09:33 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-03-01 12:10:06 +0900

    parse.y: Extract new_empty_args_tail macro

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16275

commit 504cf455fb17642a5ddb206fc14d01a7a4b0566f
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-03-01 10:30:31 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-03-01 12:04:38 +0900

    parse.y: Extract f_empty_arg

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16275

commit 851a10bcb582211ac47101f0d1baf0a109e74200
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-28 21:52:47 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-03-01 09:20:18 +0900

    Revert "parse.y: narrow excessed_comma to block_param_def"

    This reverts commit 2239d54348d9f1f7768860efc9e76876f85766d8.
    At first glance, it seemed like a good idea, but it wasn't all that
    great.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16275

commit 19b636d3ecc8a824437e0d6abd7fe0c24b594ce0
  Author:     Étienne Barrié <etienne.barrie@gmail.com>
  AuthorDate: 2026-03-01 00:24:13 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-03-01 03:59:07 +0900

    Remove unused variable

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16274

commit 85b04616269660e2d06441e2a833edad4491564d
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-28 17:12:28 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-02-28 20:26:16 +0900

    Revert and ignore template-injection error at capi extension workflow

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16273

commit b8d714849a947dcf0fe06cb70fd578e9bdc8c8a8
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-28 16:25:43 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-02-28 20:26:16 +0900

    Fix: Use shell syntax for SETARCH command

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16273

commit eae6d265d531e4dd6259c762f1eeda3bde89f6c4
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-28 16:17:51 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-02-28 20:26:16 +0900

    Use zizmorcore/zizmor-action

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16273

commit 520b0898135f7a74f72d8b0fb58c40e323b0b631
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-28 15:58:28 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-02-28 20:26:16 +0900

    Rename CodeQL workflow to Check SAST tool

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16273

commit 4b9af00c9cf9a809a72c12a43a9b0317e4eb490c
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-28 15:25:11 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-02-28 20:26:16 +0900

    Refactor GitHub Actions to use environment variables

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16273

commit 64d63ba0606762140fa8db5c6614026055377c0a
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-28 15:16:34 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-02-28 20:26:16 +0900

    Fix: Set persist-credentials to false for actions/checkout

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16273

commit f47c57d3a1400fb9272e721235ac33414066e23c
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-28 15:03:10 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-02-28 20:26:16 +0900

    Add zizmor ignore directives for github-env

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16273

commit 41c11dc31d0b2514291e7dba432e945a5d73b880
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-28 14:43:28 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-02-28 20:26:16 +0900

    Expose inputs as env vars in composite actions

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16273

commit aef8fd05705462d2c91eb32b11a28c2af4b933a3
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-28 13:16:04 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-02-28 20:26:16 +0900

    Add Zizmor baseline ignore configuration

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16273

commit 0b342d29c30564180d3c1d3246edd03f10703cfd
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-28 12:35:11 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-02-28 20:26:16 +0900

    Add Zizmor job to workflow

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16273

commit 373eacb8416f8b20e89e2b52dc007c5958a79bdb
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-28 11:21:50 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-28 13:02:35 +0900

    [ruby/rubygems] Skip Windows group warning for realworld specs

    https://github.com/ruby/rubygems/commit/98a355dcfb

commit 3251792f491bd6f8bff71c6fd3352f66ac635902
  Author:     Alan Wu <XrXr@users.noreply.github.com>
  AuthorDate: 2026-02-28 05:23:42 +0900
  Commit:     Alan Wu <XrXr@users.noreply.github.com>
  CommitDate: 2026-02-28 11:29:19 +0900

    ZJIT: Fix infinite loop from `make_equal_to(x,y)` where `x=y`

    Sometimes it's convenient to write that
    `make_equal_to(x, big_decision_tree_to_find_replacement)` where
    most of the time the decision tree gives something not equal to `x`.

    Since infinite loops are hard to debug and this condition is easy to
    check, let's allow it.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16271

commit 4eadf035d0de44b940260ca1557969ed1926f36b
  Author:     Alan Wu <XrXr@users.noreply.github.com>
  AuthorDate: 2026-02-21 06:16:48 +0900
  Commit:     Alan Wu <XrXr@users.noreply.github.com>
  CommitDate: 2026-02-28 11:29:19 +0900

    ZJIT: Check special_const_p() before using rb_obj_shape_id()

    It only works with heap objects.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16271

commit 55f2a8d1bbed98e913f18beaa7791fbfbf0b588c
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-28 10:50:29 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-02-28 11:21:27 +0900

    Bump up to latest GitHub Actions versions

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16270

commit 903b709c61f05af6116150d3d5f5b12fb36ba588
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-28 10:48:05 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-02-28 11:21:27 +0900

    Pin GitHub Actions to specific SHAs

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16270

commit 8fb5df26103396819a5b2ac6145d31b1599632bc
  Author:     YO4 <ysno@ac.auone-net.jp>
  AuthorDate: 2026-02-26 22:26:42 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-02-28 08:15:58 +0900

    win32/configure.bat accept empty prefix

    Currently, running `win32/configure.bat --prefix=` outputs `prefix = \=/` in the Makefile.
    Fix this to prevent invalid values from being output.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16255

commit 3341022648623706cddbc607d08753d2b37b458b
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-27 17:59:36 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-02-28 05:23:16 +0900

    Add setup-ruby step for tool scripts

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16254

commit a5af2adab17e0f54a094872afd46ce8fa6f6563d
  Author:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  AuthorDate: 2026-02-27 10:19:12 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-02-28 05:23:16 +0900

    Fix a typo in bundled_gems.yml

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16254

commit b4367db8878ab5a6374ad3c01b2bbd6d06e19db9
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-26 18:44:03 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-02-28 05:23:16 +0900

    Run GitHub releases updater in workflow

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16254

commit e43b35f2f1e394a901bf00e0116b1e182d8246b1
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-26 18:43:32 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-02-28 05:23:16 +0900

    Detect previous Ruby version in update script

    Read include/ruby/version.h to compute the previous Ruby version and
    use it as the default FROM argument in
    tool/update-NEWS-github-release.rb.

    Add a workflow step to run the script for Ruby 4.0 in bundled_gems.yml
    Detect previous Ruby version in update script

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16254

commit 9b0a3db0689bb55f443796366d4bfcc41830be2b
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-26 18:38:36 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-02-28 05:23:16 +0900

    Preserve gem sub-bullets in NEWS.md

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16254

commit 7c7533514891cc3933d2b4753cb7d647ad19979c
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-26 18:24:10 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-02-28 05:23:16 +0900

    Run `ruby tool/update-NEWS-github-release.rb 4.0 --update`

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16254

commit 4ab238341327b95b539000f10930f62d27f0dedc
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-26 18:21:57 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-02-28 05:23:16 +0900

    Add update mode and NEWS.md parsing

    Read NEWS.md locally when "news" is requested, parse stdlib updates,
    collect GitHub release ranges per gem, and optionally update NEWS.md
    in-place with sub-bullets and footnote links when --update is passed

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16254

commit aec4b44d1e339044d917f233be7025eea5aa672d
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-26 17:58:18 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-02-28 05:23:16 +0900

    Add tool to update NEWS from GitHub releases

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16254

commit c57d594f73576c9e316972e83a2fcc4df730882e
  Author:     Max Bernstein <rubybugs@bernsteinbear.com>
  AuthorDate: 2026-02-28 05:00:29 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-02-28 05:00:29 +0900

    ZJIT: Use LoadField for Class/Module ivars (#16252)

    Assume only one box (root box) and invalidate otherwise. Drops C calls to `rb_ivar_get_at_no_ractor_check`.

    Before:
    ```
    Top-20 calls to C functions from JIT code (77.3% of total 64,311,573):
                                 rb_vm_opt_send_without_block: 11,939,854 (18.6%)
                                                 rb_hash_aref:  5,400,091 ( 8.4%)
                                            rb_vm_invokeblock:  4,453,357 ( 6.9%)
                         rb_zjit_writebarrier_check_immediate:  4,279,890 ( 6.7%)
                                    rb_vm_getinstancevariable:  3,504,908 ( 5.4%)
                                                   rb_vm_send:  3,103,424 ( 4.8%)
                               rb_ivar_get_at_no_ractor_check:  2,864,766 ( 4.5%)
                                            rb_obj_is_kind_of:  2,313,479 ( 3.6%)
                                                 rb_hash_aset:  1,903,359 ( 3.0%)
                                                   Hash#fetch:  1,639,937 ( 2.5%)
                                    rb_vm_setinstancevariable:  1,596,791 ( 2.5%)
                                   rb_vm_opt_getconstant_path:  1,328,761 ( 2.1%)
                                              rb_jit_ary_push:    960,563 ( 1.5%)
                                    rb_ec_ary_new_from_values:    722,913 ( 1.1%)
                                   rb_class_allocate_instance:    721,483 ( 1.1%)
                                                        fetch:    713,134 ( 1.1%)
                                            rb_str_buf_append:    667,545 ( 1.0%)
                                                  rb_ivar_get:    585,817 ( 0.9%)
                                        rb_hash_new_with_size:    520,347 ( 0.8%)
                                            rb_vm_sendforward:    479,029 ( 0.7%)
    ```

    After:
    ```
    Top-20 calls to C functions from JIT code (76.5% of total 62,282,359):
                                 rb_vm_opt_send_without_block: 11,939,850 (19.2%)
                                                 rb_hash_aref:  5,400,092 ( 8.7%)
                                            rb_vm_invokeblock:  4,453,357 ( 7.2%)
                         rb_zjit_writebarrier_check_immediate:  4,279,893 ( 6.9%)
                                    rb_vm_getinstancevariable:  3,504,920 ( 5.6%)
                                                   rb_vm_send:  3,103,441 ( 5.0%)
                                            rb_obj_is_kind_of:  2,313,510 ( 3.7%)
                                                 rb_hash_aset:  1,903,359 ( 3.1%)
                                                   Hash#fetch:  1,639,937 ( 2.6%)
                                    rb_vm_setinstancevariable:  1,596,797 ( 2.6%)
                                   rb_vm_opt_getconstant_path:  1,328,761 ( 2.1%)
                                              rb_jit_ary_push:    960,563 ( 1.5%)
                               rb_ivar_get_at_no_ractor_check:    835,498 ( 1.3%)
                                    rb_ec_ary_new_from_values:    722,921 ( 1.2%)
                                   rb_class_allocate_instance:    721,492 ( 1.2%)
                                                        fetch:    713,135 ( 1.1%)
                                            rb_str_buf_append:    667,545 ( 1.1%)
                                                  rb_ivar_get:    585,815 ( 0.9%)
                                        rb_hash_new_with_size:    520,348 ( 0.8%)
                                            rb_vm_sendforward:    479,029 ( 0.8%)
    ```

    The remaining `rb_ivar_get_at_no_ractor_check` are due to TypedData access, mostly on `Thread`.

commit 50f51f75c607e74906b88e695dd5577f5690b5bd
  Author:     Tomás Coêlho <36938811+tomascco@users.noreply.github.com>
  AuthorDate: 2026-02-28 03:13:47 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-02-28 03:13:47 +0900

    ZJIT: constant fold bitwise OR (|) operations (#16235)

    Continuation of https://github.com/ruby/ruby/pull/16226.

    ### Considerations
    - The OR (`|`) operation in Rust has the same behavior as in Ruby (it compiles to a assembly `or` instruction: https://godbolt.org/z/5McGzj783);
    - There are no risk of overflows;
    - In the test, I added the result of the interpreter in an assertion based on feedback of my last PR.

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit eafbf6e5b93596193870cb5eae8d2ed1da7ded0c
  Author:     Max Bernstein <ruby@bernsteinbear.com>
  AuthorDate: 2026-02-28 02:14:11 +0900
  Commit:     Max Bernstein <tekknolagi@gmail.com>
  CommitDate: 2026-02-28 03:04:06 +0900

    ZJIT: Fix IsA effect

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16269

commit 44fe95ead403080e90a679f20cdf0d600bb68d95
  Author:     Max Bernstein <ruby@bernsteinbear.com>
  AuthorDate: 2026-02-28 02:11:46 +0900
  Commit:     Max Bernstein <tekknolagi@gmail.com>
  CommitDate: 2026-02-28 03:04:06 +0900

    ZJIT: Fix HasType effect

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16269

commit d5cca099afba2f3cfdbb5d45e79556faeb343567
  Author:     Max Bernstein <ruby@bernsteinbear.com>
  AuthorDate: 2026-02-28 02:10:06 +0900
  Commit:     Max Bernstein <tekknolagi@gmail.com>
  CommitDate: 2026-02-28 03:04:06 +0900

    ZJIT: Fix GetEP effect

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16269

commit 1e1d8332e7c43193ad05dff13ba4fe1bf7304b8f
  Author:     Max Bernstein <ruby@bernsteinbear.com>
  AuthorDate: 2026-02-28 02:07:04 +0900
  Commit:     Max Bernstein <tekknolagi@gmail.com>
  CommitDate: 2026-02-28 03:04:06 +0900

    ZJIT: Remove GetLEP

    Use get_lvar_level and GetEP instead.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16269

commit 5d87dd6d3682d9b728b2b28a8a44ce2dc26e0c1e
  Author:     Max Bernstein <rubybugs@bernsteinbear.com>
  AuthorDate: 2026-02-28 02:43:59 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-02-28 02:43:59 +0900

    ZJIT: Handle splatkw YARV instruction (#16267)

    The most common cases are nil and hash, so just cover those. If we need to convert to a hash, we can handle that later.

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit 68080febee3279d52107a84a1e1903933297292e
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-28 00:32:21 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-02-28 01:01:46 +0900

    parse.y: Unify to use only tagged references

    Unify references in rules that mix positional references and tagged
    references.  Leave the positional reference-only rules unchanged.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16268

commit f3323b048f47d0da706cec8f7e17444fe9421165
  Author:     Nozomi Hijikata <121233810+nozomemein@users.noreply.github.com>
  AuthorDate: 2026-02-28 00:33:02 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-02-28 00:33:02 +0900

    ZJIT: Replace Getlocal with LoadSP or GetEP+LoadField (#16242)

    Since `GetLocal` (for `level > 0`) is now split into `GetEP` + `LoadField`(https://github.com/ruby/ruby/pull/16215),
     we can remove the Insn and use `LoadSP` instead for the consistency.
    Also removed a counter that appeared unnecessary.

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit 486f7fcc27b2ef08c18da9666f36e2f9583efd96
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-27 23:09:31 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-02-27 23:47:11 +0900

    parse.y: prefer @$ over @0 in empty-rule actions

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16266

commit 2ecda70f8730a60661f69f06a44158778e2051a0
  Author:     Alan Wu <XrXr@users.noreply.github.com>
  AuthorDate: 2026-02-27 10:08:54 +0900
  Commit:     Alan Wu <XrXr@users.noreply.github.com>
  CommitDate: 2026-02-27 23:14:59 +0900

    ZJIT: GuardType and GuardTypeNot can read from memory

    When guarding on anything but special const forms (`types::Immediate`),
    we need to dereference the VALUE to load RBasic::flags and maybe
    RBasic::class. Those are memory read effects.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16261

commit 6af0de237935f162ee3089b314f0c33911d442da
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-02-27 19:51:22 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-27 22:33:36 +0900

    [ruby/prism] Fix error message for block/lambda with `...` argument

    They currently complain that the parent method is not forwarding.
    But the actual problem is that these types of arguments simply don't
    accept `...`

    Fixes [Bug #21927]

    https://github.com/ruby/prism/commit/0aa2363331

commit 2239d54348d9f1f7768860efc9e76876f85766d8
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-26 23:29:53 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-02-27 13:10:04 +0900

    parse.y: narrow excessed_comma to block_param_def

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16264

commit cded315c516c48d4b4c10d37ce13ea46858cd6c8
  Author:     Samuel Williams <samuel.williams@shopify.com>
  AuthorDate: 2026-02-27 11:56:33 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-27 11:57:01 +0900

    [ruby/zlib] Avoid retrying on interrupt if there is no further work
    to be done.
    (https://github.com/ruby/zlib/pull/121)

    https://github.com/ruby/zlib/commit/c975060f02

commit e276076a2f3aaae3c462c1a0fc98c285ba8a2a28
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-27 10:49:57 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-02-27 10:49:57 +0900

    The `case` expression is preferable to the pseudo-condition operator

commit 9ed1517cb97e8278f64a4a665864a230b0cd52d0
  Author:     Max Bernstein <ruby@bernsteinbear.com>
  AuthorDate: 2026-02-27 04:41:12 +0900
  Commit:     Max Bernstein <tekknolagi@gmail.com>
  CommitDate: 2026-02-27 08:18:06 +0900

    ZJIT: Check if args are compatible before emitting assumptions

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16257

commit 88d046e106ceff5fa86c3a6d327d4d427a2a1db4
  Author:     Max Bernstein <ruby@bernsteinbear.com>
  AuthorDate: 2026-02-27 04:25:34 +0900
  Commit:     Max Bernstein <tekknolagi@gmail.com>
  CommitDate: 2026-02-27 08:18:06 +0900

    ZJIT: Add HIR tests for hash as positional arg to keyword-only method

    Follow-up to GH-16223 to also cover this at the HIR level.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16257

commit ac57159ca63b6e6ad24a2d44cb4eb3c1e537e4c7
  Author:     Kevin Menard <kevin@nirvdrum.com>
  AuthorDate: 2026-02-27 07:55:59 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-02-27 07:55:59 +0900

    ZJIT: Don't attempt to disassemble code when there's a compilation error (GH-16251)

    After a compilation error, the write pointer may point into unmapped JIT memory. Passing that address as the end of the disassembly range to capstone causes a segfault when it reads past the boundary of the mapped region.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16251

    Merged-By: XrXr

commit 7b3207ecf1a19f645caee35944bd56a8e5b68c85
  Author:     Alexander Momchilov <alexander.momchilov@shopify.com>
  AuthorDate: 2026-02-27 04:43:07 +0900
  Commit:     Matt Valentine-House <matt@eightbitraptor.com>
  CommitDate: 2026-02-27 05:16:23 +0900

    Use new `case()` expressions in GitHub workflows

    https://docs.github.com/en/actions/reference/workflows-and-actions/expressions#case

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16258

commit b4aa7462be9913d1d3739bf56a0a71a763a5d4a3
  Author:     ReLU <82130499+ykawabata17@users.noreply.github.com>
  AuthorDate: 2026-02-27 01:43:37 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-02-27 01:43:37 +0900

    ZJIT: Fix ArgumentError for hash as positional arg to keyword-only method (GH-16223)

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16223

    Merged-By: XrXr

commit 4455fdc201981122c67e9913d972b3cbd7b93e47
  Author:     John Hawthorn <john@hawthorn.email>
  AuthorDate: 2026-02-25 13:38:36 +0900
  Commit:     John Hawthorn <john@hawthorn.email>
  CommitDate: 2026-02-27 01:26:57 +0900

    Mark callcache as !needs_cleanup_p

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16243

commit 8eab3172788ac1f2760d7df46e07e5b0ae7e7ea6
  Author:     John Hawthorn <john@hawthorn.email>
  AuthorDate: 2026-02-25 09:30:43 +0900
  Commit:     John Hawthorn <john@hawthorn.email>
  CommitDate: 2026-02-27 01:26:57 +0900

    Convert cc_refinement_table into TypedData object

    This converts the cc_refinement_table in the VM into a standard
    TypedData object using rb_gc_declare_weak_references to allow it to be
    .

    This allows us to store all the refinements in a flat array, and simply
    remove them as that are GC'd, we don't need a set for efficient deletes.

    This should also allow us to assume that imemo_callcache never requires
    additional cleanup.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16243

commit 64fdfb722bcc36ffb6a41b024707a77b8cedc84e
  Author:     ndossche <nora.dossche@ugent.be>
  AuthorDate: 2026-02-24 23:43:25 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-26 21:10:49 +0900

    [ruby/openssl] Fix memory leak if sk_push fails

    If it fails, then the duplicated item is not freed.
    Solve it by making sure the push cannot fail by reserving the necessary
    stack size upfront.

    Example Valgrind trace:
    ```
    14,009 (384 direct, 13,625 indirect) bytes in 1 blocks are definitely lost in loss record 27,287 of 27,373
      malloc (at /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
      CRYPTO_zalloc (at /usr/lib/x86_64-linux-gnu/libcrypto.so.3)
      <unknown stack frame>
      ASN1_item_new (at /usr/lib/x86_64-linux-gnu/libcrypto.so.3)
     *ossl_x509_alloc (ossl_x509cert.c:97)
      <unknown stack frame>
      rb_class_new_instance_pass_kw (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
      <unknown stack frame>
      <unknown stack frame>
      <unknown stack frame>
      <unknown stack frame>
      rb_vm_exec (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
      <unknown stack frame>
      <unknown stack frame>
      rb_catch_obj (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
      <unknown stack frame>
      <unknown stack frame>
      <unknown stack frame>
      rb_vm_exec (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
      rb_yield (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
      rb_ary_each (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
      <unknown stack frame>
      <unknown stack frame>
      <unknown stack frame>
      rb_vm_exec (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
      rb_yield (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
      rb_ary_each (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
      <unknown stack frame>
      <unknown stack frame>
      <unknown stack frame>
      rb_vm_exec (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
      rb_yield (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
      rb_ary_each (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
      <unknown stack frame>
      <unknown stack frame>
      <unknown stack frame>
      rb_vm_exec (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
      rb_yield (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
      rb_ary_each (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
      <unknown stack frame>
      <unknown stack frame>
      <unknown stack frame>
      rb_vm_exec (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
      <unknown stack frame>
      <unknown stack frame>
      rb_catch_obj (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
      <unknown stack frame>
      <unknown stack frame>
      <unknown stack frame>
      rb_vm_exec (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
    ```

    https://github.com/ruby/openssl/commit/b53628b127

commit 3a7f3cf37139fc54305a0d413fee45d68519a5a0
  Author:     ndossche <7771979+ndossche@users.noreply.github.com>
  AuthorDate: 2026-02-26 04:15:43 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-26 20:35:50 +0900

    [ruby/openssl] Fix missing error check on BIO_get_mem_ptr()

    LibreSSL docs state this can fail. OpenSSL has no docs for this, but the
    implementation goes via BIO_ctrl() which can fail (e.g. via a callback).
    Example Valgrind trace:
    ```
    Invalid read of size 1
      memmove (at /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
      memcpy (string_fortified.h:29)
      ossl_str_new (ossl.c:107)
      ossl_membio2str (ossl_bio.c:36)
      ossl_x509ext_get_value (ossl_x509ext.c:390)
      <unknown stack frame>
      <unknown stack frame>
      <unknown stack frame>
      rb_vm_exec (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
      <unknown stack frame>
      <unknown stack frame>
      rb_catch_obj (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
      <unknown stack frame>
      <unknown stack frame>
      <unknown stack frame>
      rb_vm_exec (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
      rb_yield (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
      rb_ary_each (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
      <unknown stack frame>
      <unknown stack frame>
      <unknown stack frame>
      rb_vm_exec (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
      rb_yield (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
      rb_ary_each (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
      <unknown stack frame>
      <unknown stack frame>
      <unknown stack frame>
      rb_vm_exec (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
      rb_yield (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
      rb_ary_each (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
      <unknown stack frame>
      <unknown stack frame>
      <unknown stack frame>
      rb_vm_exec (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
      <unknown stack frame>
      <unknown stack frame>
      rb_catch_obj (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
      <unknown stack frame>
      <unknown stack frame>
      <unknown stack frame>
      rb_vm_exec (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
      rb_vm_invoke_proc (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
      rb_proc_call_kw (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
      <unknown stack frame>
      <unknown stack frame>
      <unknown stack frame>
      ruby_run_node (at /usr/lib/x86_64-linux-gnu/libruby-3.2.so.3.2.3)
      <unknown stack frame>
      (below main) (libc_start_call_main.h:58)
    ```

    https://github.com/ruby/openssl/commit/4fb09446d6

commit 319de3c513ba6a33c97c4af4c2a03f0d58d7aa10
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-26 20:32:00 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-02-26 20:32:00 +0900

    git must run in the source tree instead of the build directory

commit 9ab1dfadc9ec2b435875b4d2ec98479f7defb690
  Author:     Aaron Patterson <tenderlove@ruby-lang.org>
  AuthorDate: 2026-02-26 06:44:16 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-02-26 06:44:16 +0900

    ZJIT: Decouple gen_function_stub and gen_function_stub_hit_trampoline (#16249)

    Before this change, gen_function_stub and
    gen_function_stub_hit_trampoline communicated via a scratch register.
    We would like gen_function_stub_hit_trampoline to have more freedom with
    regard to the registers it uses, especially for the CCall in to
    function_stub_hit.  Instead of communicating via scratch register, we'll
    communicate via stack.

    Practically speaking, this means:

    * Stop using x15 (scratch reg) to communicate iseq call addr from call
      stub to function sub hit trampoline; use stack instead
    * Don't try to CCall with x15 as first argument; can't use scratch reg
      in parallel move of arguments

    Here is pseudo assembly of before this commit:

    ```
    some_send_direct_in_a_ruby_method(JIT code):
      mov x15, gen_function_stub
      mov x0, self
      mov x1, 1
      blr x15

    gen_function_stub:
      mov x15, 0xISEQADDR (the address of the ISEQ we _want_ to compile)
      jmp function_stub_hit_trampoline

    function_stub_hit_trampoline:
      function prologue
      cpush ALL_JIT_REGS
      mov x0, x15 # currently x15 is 0xISEQADDR
      mov x1, CFP
      mov x2, SP
      blr function_stub_hit
      mov x15, x0 # write jump address to x15 (code pointer for compiled iseq)
      cpop ALL_JIT_REGS
      function epilogue
      jmp x15
    ```

    Here is pseudo assembly of after this commit:

    ```
    some_send_direct_in_a_ruby_method(JIT code):
      mov x15, gen_function_stub
      mov x0, self
      mov x1, 1
      blr x15

    gen_function_stub:
      mov x15, 0xISEQADDR (the address of the ISEQ we _want_ to compile)
      push x15
      jmp function_stub_hit_trampoline

    function_stub_hit_trampoline:
      pop x15 # get the ISEQ addr from gen_function_stub
      function prologue
      cpush ALL_JIT_REGS
      mov x0, x15 # currently x15 is 0xISEQADDR
      mov x1, CFP
      mov x2, SP
      blr function_stub_hit
      mov x15, x0 # write jump address to x15 (code pointer for compiled iseq)
      cpop ALL_JIT_REGS
      function epilogue
      jmp x15
    ```

  Notes:
    Merged-By: tenderlove <aaron.patterson@gmail.com>

commit b3a1286d5c921da8ee9a1cee05b3d4c3d588efee
  Author:     John Hawthorn <john@hawthorn.email>
  AuthorDate: 2026-02-25 04:58:47 +0900
  Commit:     John Hawthorn <john@hawthorn.email>
  CommitDate: 2026-02-26 06:19:57 +0900

    Avoid duplicate struct name in rb_raw_obj_info

    Previously we printed the struct name of T_DATA both in
    rb_raw_obj_info_buitin_type and in rb_raw_obj_info_common via type_name.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16241

commit ad380f8752c93e4c763329825ebf271e583b2b3c
  Author:     Matt Valentine-House <matt@eightbitraptor.com>
  AuthorDate: 2026-02-25 19:58:02 +0900
  Commit:     Matt Valentine-House <matt@eightbitraptor.com>
  CommitDate: 2026-02-26 05:58:20 +0900

    Correct timezone type: It's Asia/Tokyo, not Tokyo/Asia

    https://timezonedb.com/time-zones/Asia/Tokyo

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16244

commit 2168fdbdd4f869008aaafea4b7a83a012eee4184
  Author:     Matt Valentine-House <matt@eightbitraptor.com>
  AuthorDate: 2026-02-26 01:23:02 +0900
  Commit:     Matt Valentine-House <matt@eightbitraptor.com>
  CommitDate: 2026-02-26 05:57:52 +0900

    Move class pre-aging out of the allocation path

    Previously classes and modules were pre-aged. Ie. as soon as they're
    allocated they are aged to old_age - 1. This was done with the
    assumption that classes are generally always long lived, so we should
    assume that any that survive a single GC can be considered old.

    This commit keeps the same semantics, but moves the logic out of the
    allocation path, in order to simplify allocation. Classes and modules
    are now set to old-age the first time they are marked.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16247

commit b52cb82d3c7b2aacdc7b8a452ffe74dbef54db26
  Author:     Max Bernstein <rubybugs@bernsteinbear.com>
  AuthorDate: 2026-02-26 02:08:36 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-02-26 02:08:36 +0900

    ZJIT: Format negative offsets as small negative hex values (#16248)

    Before:

        Optimized HIR:
        fn block in <main>@benchmarks/setivar.rb:40:
        bb1():
          EntryPoint interpreter
          v1:BasicObject = LoadSelf
          Jump bb3(v1)
        bb2():
          EntryPoint JIT(0)
          v4:BasicObject = LoadArg :self@0
          Jump bb3(v4)
        bb3(v6:BasicObject):
          v10:CPtr = GetEP 1
          v11:BasicObject = LoadField v10, :obj@0xffffffffffffffe8    <=
          PatchPoint NoSingletonClass(TheClass@0x1037633c0)
          PatchPoint MethodRedefined(TheClass@0x1037633c0, set_value_loop@0xf5f1, cme:0x103a14650)
          v21:HeapObject[class_exact:TheClass] = GuardType v11, HeapObject[class_exact:TheClass]
          v22:BasicObject = SendDirect v21, 0x16cf41630, :set_value_loop (0x16cf41670)
          CheckInterrupts
          Return v22

    After:

        Optimized HIR:
        fn block in <main>@benchmarks/setivar.rb:40:
        bb1():
          EntryPoint interpreter
          v1:BasicObject = LoadSelf
          Jump bb3(v1)
        bb2():
          EntryPoint JIT(0)
          v4:BasicObject = LoadArg :self@0
          Jump bb3(v4)
        bb3(v6:BasicObject):
          v10:CPtr = GetEP 1
          v11:BasicObject = LoadField v10, :obj@-0x18    <=
          PatchPoint NoSingletonClass(TheClass@0x102bc3420)
          PatchPoint MethodRedefined(TheClass@0x102bc3420, set_value_loop@0xf5f1, cme:0x102e945f0)
          v21:HeapObject[class_exact:TheClass] = GuardType v11, HeapObject[class_exact:TheClass]
          v22:BasicObject = SendDirect v21, 0x16dadd630, :set_value_loop (0x16dadd670)
          CheckInterrupts
          Return v22

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit 027131973fe4e7fc11f87f930f5c2a4719d9d66d
  Author:     Kevin Newton <kddnewton@gmail.com>
  AuthorDate: 2026-02-23 06:40:04 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-25 22:38:45 +0900

    [ruby/prism] Generate RBI from RBS

    https://github.com/ruby/prism/commit/2c88ed893f

commit bc1d75adced050f01248a96ba90ded345ffc08db
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-02-19 02:05:31 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-25 22:38:45 +0900

    [ruby/prism] Don't document rbs inline magic comment

    https://github.com/ruby/prism/commit/e371985c91

commit fb39d5898f8b4ea0d7a4cea596d91cdf0dc81d8b
  Author:     Kevin Newton <kddnewton@gmail.com>
  AuthorDate: 2026-02-18 00:27:06 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-25 22:38:44 +0900

    [ruby/prism] rbs-inline

    https://github.com/ruby/prism/commit/1fdd4c5a49

commit 9aa3dc6f82c6f8885b90f078f9537104ee6a0bc9
  Author:     Scott Myron <samyron@gmail.com>
  AuthorDate: 2026-02-25 12:53:15 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-25 16:24:42 +0900

    [ruby/json] Remove unused load_uint8x16_4 function.

    https://github.com/ruby/json/commit/93bc1b3838

commit da1daba07afccccf89226c5f8b24e83a6b051371
  Author:     Randy Stauner <randy@r4s6.net>
  AuthorDate: 2026-02-25 09:21:14 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-02-25 09:21:14 +0900

    ZJIT: Refine effects for CheckInterrupts to InterruptFlag|Control (#16240)

    CheckInterrupts only reads ec->interrupt_flag and conditionally
    side-exits — it doesn't touch PatchPoint invariants or the allocator.
    Add an InterruptFlag leaf under Memory in the abstract heap DAG and
    narrow CheckInterrupts from Any to read(InterruptFlag)|write(Control).

    This lets remove_redundant_patch_points see through CheckInterrupts,
    eliminating duplicate PatchPoints that were previously separated by
    an interrupt check.

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit c5d85d5ab0c317ecbf2054e98ce203ffdc148e4f
  Author:     John Hawthorn <john@hawthorn.email>
  AuthorDate: 2026-02-22 14:32:51 +0900
  Commit:     John Hawthorn <john@hawthorn.email>
  CommitDate: 2026-02-25 08:53:34 +0900

    Improve error message failing to copy proc

    Previously, when passing an unshareable proc to a Ractor we would get
    the message:

        'Ractor.new': allocator undefined for Proc (TypeError)

    With this change we get:

        'Ractor.new': can not copy unshareable object #<Proc:0x00007f1b31713600 test.rb:2> (Ractor::Error)

    Which should hopefully be a little clearer about the problem and make it
    simpler to debug.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16221

commit f1c2fafa0c4394f15927cc9238de970e6970a42d
  Author:     Max Bernstein <rubybugs@bernsteinbear.com>
  AuthorDate: 2026-02-25 07:43:33 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-02-25 07:43:33 +0900

    ZJIT: Ratchet down Guard* effects (#16236)

    Guards don't write to (e.g. PatchPoint) memory, just change if we
    side-exit into the interpreter or not, so lower their effects.

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit 7da57563c8dddadba824734c70284d1f221d1f2c
  Author:     Randy Stauner <randy@r4s6.net>
  AuthorDate: 2026-02-25 07:36:20 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-02-25 07:36:20 +0900

    ZJIT: Refine effects for IsBitNotEqual and FixnumBitCheck to Empty (#16237)

    Both instructions are pure computations with no side effects:
    IsBitNotEqual is a cmp+csel (identical to IsBitEqual, already Empty),
    and FixnumBitCheck is a test+csel on a tagged Fixnum bit. Neither
    reads memory, writes anything, allocates, or can raise exceptions.

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit 7e028b861d6faf868d0fcd6002509417bade9e14
  Author:     Max Bernstein <rubybugs@bernsteinbear.com>
  AuthorDate: 2026-02-25 07:35:17 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-02-25 07:35:17 +0900

    ZJIT: Pull out GetEP from IsBlockParamModified (#16234)

    We can hopefully de-duplicate this GetEP soon.

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit 56bdb93b024495bfd544c75a00eaf5d68b15be6c
  Author:     John Hawthorn <john@hawthorn.email>
  AuthorDate: 2026-02-25 06:28:10 +0900
  Commit:     John Hawthorn <john@hawthorn.email>
  CommitDate: 2026-02-25 07:01:08 +0900

    Remove man page date check

    This doesn't work because actions/checkout uses a fetch depth of 1, so
    every CI run acts as though man pages were made in the most recent
    commit.

    Additionally the VCS code uses committed date, so this check will fail
    if any PR is made that changes man pages, but then is merged the
    following day JST.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16239

commit 4b4da98832a6eaa4e9e6384325ca2a0040b13961
  Author:     John Hawthorn <john@hawthorn.email>
  AuthorDate: 2026-02-20 16:04:21 +0900
  Commit:     John Hawthorn <john@hawthorn.email>
  CommitDate: 2026-02-25 02:39:35 +0900

    Avoid and simplify rb_alloc_tmp_buffer_with_count

    There's no reason to ever call this and the "count" value is ignored.
    Because this is part of the public API I left it as a stub, but it could
    likely be removed.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16210

commit 7a36808d78dc1a1ef3719225eaa59802a933cbf5
  Author:     John Hawthorn <john@hawthorn.email>
  AuthorDate: 2026-02-20 16:03:28 +0900
  Commit:     John Hawthorn <john@hawthorn.email>
  CommitDate: 2026-02-25 02:39:35 +0900

    Use rb_alloc_tmp_buffer in new_from_an_RString

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16210

commit c1f70394c94ad3047fbf9cdce8325d7ef0097e90
  Author:     John Hawthorn <john@hawthorn.email>
  AuthorDate: 2026-02-20 15:43:18 +0900
  Commit:     John Hawthorn <john@hawthorn.email>
  CommitDate: 2026-02-25 02:39:35 +0900

    Remove rb_imemo_tmpbuf_set_ptr

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16210

commit 3aa89271b7b585f3623ceaad563f98f7d04643da
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-02-02 02:32:16 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-24 22:53:26 +0900

    [ruby/prism] Introduce xfree_sized and xrealloc_sized

    This will allow prism to pass buffer sizes to the Ruby GC.

    It also helps avoid buffer overflow as it confirms the size was
    correctly tracked all the way until the buffer is freed.

    https://github.com/ruby/prism/commit/a5c3ee3e4c

commit ebd57856c2a794a7b4c43402deb455cbc36f3c81
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-02-23 21:53:43 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-24 22:46:05 +0900

    [ruby/prism] Fix some locations in the the config

    https://github.com/ruby/prism/commit/64e29baac6

commit 682f36ab1fd0468a0eb42946d53809e942ab2141
  Author:     git[bot] <svn-admin@ruby-lang.org>
  AuthorDate: 2026-02-24 16:08:36 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-24 16:08:36 +0900

    Update bundled gems list as of 2026-02-24

commit 70c625148892553c4dd50adefda955d45b46ff47
  Author:     NARUSE, Yui <naruse@airemix.jp>
  AuthorDate: 2026-02-24 14:27:52 +0900
  Commit:     NARUSE, Yui <naruse@airemix.jp>
  CommitDate: 2026-02-24 14:27:52 +0900

    Use rev-parse HEAD instead of log --format=%H -1

commit 997ac19b74259b13f777a548b813a0f2c2228554
  Author:     Randy Stauner <randy@r4s6.net>
  AuthorDate: 2026-02-24 12:06:32 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-02-24 12:06:32 +0900

    ZJIT: Remove redundant PatchPoints within basic blocks (#16231)

    Add a new optimization pass that deduplicates PatchPoint instructions
    asserting the same invariant within a basic block when no intervening
    instruction could invalidate it.

    This is common in practice — e.g., `1 + 2 + 3` produces two identical
    `PatchPoint MethodRedefined(Integer, +, cme)` because each `+` call
    inserts one. The second is redundant since nothing between them can
    redefine Integer#+.

    The approach adds a `PatchPoint` leaf to the abstract heap DAG so the
    effect system can distinguish instructions that could invalidate
    invariants (writes to PatchPoint, e.g. Send/CCall) from those that
    cannot (e.g. IncrCounter, Const). The pass maintains a HashSet of
    seen invariants per block and skips duplicates, clearing the set when
    an instruction writes to the PatchPoint heap.

    Removed PatchPoints' orphaned Snapshot dependencies are cleaned up by
    the subsequent DCE pass.

    I added a new test with snapshots to `zjit/src/hir/tests.rs` in the first commit
    so that you can see how the change affects it in the second commit:
    https://github.com/ruby/ruby/pull/16231/changes/88cf26b6380cdf577522d11b4f3c838fed2a71b3#diff-38be021d8d0035cca77d3eab5ccc530109e7832f4711a5beb4dfced7001787ae

    closes https://github.com/Shopify/ruby/issues/779

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit 8e9eb698b6638e0f3e76748c756f699e79d2e97d
  Author:     Jeremy Evans <code@jeremyevans.net>
  AuthorDate: 2024-03-14 09:17:20 +0900
  Commit:     Jeremy Evans <code@jeremyevans.net>
  CommitDate: 2026-02-24 12:01:06 +0900

    Freeze singleton class chain

    The following code:

    ```ruby
    x = Object.new
    sc1 = x.singleton_class
    sc2 = sc1.singleton_class
    x.freeze
    ```

    Would freeze sc1 but not sc2, even though sc1 would be frozen.

    Handle this by walking the class pointer chain for the object.
    If the class is a singleton class, and it isn't frozen, and the
    attached object for the singleton class is the object, the
    singleton class should be frozen, and we move to the next iteration.

    Fixes [Bug #20319]

  Notes:
    Merged: https://github.com/ruby/ruby/pull/10245

commit b479c41dd4fc2a3bd53bba545434eae495aec556
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-24 09:40:34 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-02-24 11:12:49 +0900

    Use .bundle gems dependencies directly

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16230

commit f3ee4bd0abe2f72bf804a9f564ab763fd5a59d48
  Author:     Nozomi Hijikata <121233810+nozomemein@users.noreply.github.com>
  AuthorDate: 2026-02-24 08:58:04 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-02-24 08:58:04 +0900

    ZJIT: Remove redundant snapshot for opt_getconstant_path (#16229)

  Notes:
    Merged-By: k0kubun <takashikkbn@gmail.com>

commit 070b7d40d35f8dbcf81809c6b19be2bbba1c8bc1
  Author:     Tomás Coêlho <36938811+tomascco@users.noreply.github.com>
  AuthorDate: 2026-02-24 07:03:22 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-02-24 07:03:22 +0900

    ZJIT: constant fold bitwise AND (&) operations (#16226)

    Following up https://github.com/ruby/ruby/pull/16225, I'm implementing fold on AND (&) operations.

    - Ruby turns this operation into a C `&` in https://github.com/tomascco/ruby/blob/880eb3c76f09c44c85389ac5efbc555afafa3e6f/numeric.c#L5197-L5210
    - Rustc compiler emits an `and` assembly instruction on x86: https://godbolt.org/z/Ee74vKTfb

    So the operations are equivalent. I tested manually some cases and the results match.

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit 2d8e24c8c4284fa32552107e0ec64280730e9b18
  Author:     Randy Stauner <randy@r4s6.net>
  AuthorDate: 2026-02-24 05:31:13 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-02-24 05:31:13 +0900

    ZJIT: Guard receiver type in inline Array method handlers (#16141)

    inline_array_push, inline_array_pop, and inline_array_aref did not
    guard/coerce the receiver to Array type before emitting Array-specific
    HIR instructions (ArrayPush, ArrayPop, ArrayLength, ArrayAref).

    This caused a MismatchedOperandType validation failure when these
    handlers were called from the InvokeSuper CFUNC path, where the
    receiver (self) has type BasicObject rather than Array. The crash
    was triggered by representable gem's Binding::Map#<< calling
    super(binding) to invoke Array#<< on an Array subclass.

    Add likely_a + coerce_to checks matching the pattern used by
    inline_array_aset. This is a no-op in the normal SendWithoutBlock
    path where the caller already adds a GuardType, but correctly inserts
    the guard when called from InvokeSuper.

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit 20eeb72085faf196553981b2dacb360f13b927f6
  Author:     Takashi Kokubun <takashikkbn@gmail.com>
  AuthorDate: 2026-02-24 02:20:20 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-02-24 02:20:21 +0900

    Commit a diff shown on check_misc

    https://github.com/ruby/ruby/actions/runs/22316806245/job/64563939588

    Local `make update-man-date` generates nothing but CI complains about
    it, so just pushing this diff to make it happy.

commit 6f0244e0782cfd9f638056b9010a0f8e0495f516
  Author:     Nozomi Hijikata <121233810+nozomemein@users.noreply.github.com>
  AuthorDate: 2026-02-24 02:14:34 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-02-24 02:14:34 +0900

    ZJIT: Pull GetEP out of GetLocal (with level > 0) (#16215)

    Closes: https://github.com/Shopify/ruby/issues/944

    As a first step toward enabling CSE/LVN-based deduplication of frame EP loads,
    splitting `GetLocal` handling for `level > 0` into an explicit `GetEP + LoadField` path.

    A follow-up PR will handle the `level == 0` case.

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit ffbe288f53ca91c61f94788d28df5518ad97434e
  Author:     Tomás Coêlho <36938811+tomascco@users.noreply.github.com>
  AuthorDate: 2026-02-24 02:12:24 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-02-24 02:12:24 +0900

    ZJIT: constant fold bitwise XOR (^) operations (#16225)

  Notes:
    Merged-By: k0kubun <takashikkbn@gmail.com>

commit 107699df9d456955ed2a062f1f26fb654f74c52a
  Author:     John Hawthorn <john@hawthorn.email>
  AuthorDate: 2026-02-24 02:05:44 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-24 02:06:17 +0900

    [ruby/erb] Freeze src in initialize
    (https://github.com/ruby/erb/pull/105)

    https://github.com/ruby/erb/commit/3d4dc31905

commit fd492edd4996f3481949509222224d038c4e3481
  Author:     Matt Valentine-House <matt@eightbitraptor.com>
  AuthorDate: 2026-02-20 04:12:32 +0900
  Commit:     Matt Valentine-House <matt@eightbitraptor.com>
  CommitDate: 2026-02-23 18:35:13 +0900

    Fix spurious uses of BASE_SLOT_SIZE

    In gc_sweep_plane, VALGRIND_MAKE_MEM_UNDEFINED was using BASE_SLOT_SIZE
    which only covers the smallest pool's slot size. For larger size pools
    this left the tail of the slot with stale state. Use the page's actual
    slot_size instead.

    In gc_prof_set_heap_info, heap_use_size and heap_total_size were computed
    as object_count * BASE_SLOT_SIZE, undercounting memory for objects in
    larger size pools. Sum across all heaps using each pool's actual slot
    size for correct byte totals.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16202

commit 9ebef81e2c75628f07fde169937824376be71351
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-23 18:18:44 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-02-23 18:18:44 +0900

    Relax thresholds for compaction verification

    These tests failed with RHEL10 again.

commit b94162ab8a8659013a3b7e0d6881d8a8495f609c
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-02-03 02:54:40 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-23 01:40:41 +0900

    [ruby/prism] Preserve line-continuation only in dedent heredocs

    Closes https://github.com/ruby/prism/issues/3837

    While these lines are whitespace only from a runtime perspective,
    the line continuation is significant for AST consumers.

    Sort of a followup to https://github.com/ruby/prism/commit/faab217d9382186133862ce4d5ba9a9e090a9550

    https://github.com/ruby/prism/commit/a8a7c6b77d

commit 731b6092e9268af960bf0f060e37504f4deb7380
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-02-12 21:10:40 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-23 01:38:42 +0900

    [ruby/prism] [Feature #19107] Allow trailing comma in method signature

    https://github.com/ruby/prism/commit/b7e247ce6a

commit 6d69a2b8f40779bbee672ff2fd9ad4247754e040
  Author:     Charles Oliver Nutter <headius@headius.com>
  AuthorDate: 2026-02-05 05:48:06 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-23 01:32:12 +0900

    [ruby/prism] Rename Java package to org.ruby_lang.prism

    This moves all of the non-JRuby Java code from the org.prism
    package to the org.ruby_lang.prism package (corresponding to the
    ruby-lang.org domain and prism project).

    https://github.com/ruby/prism/commit/80b7402f8b

commit c71999e8cc2e44762b3304f52e5f1eecf6365cfe
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-22 20:00:39 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-02-22 20:00:39 +0900

    [DOC] Update the date in man pages

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16222

commit dcdec8c28e1540cfa17546d407e10860cb419125
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-22 19:59:43 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-02-22 19:59:43 +0900

    [DOC] Check if date in man pages is up-to-date

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16222

commit 07645fe82c7e8ef1a6b8864bd30cf45b7ebcef6b
  Author:     Alexander Ziaee <concussious@runbox.com>
  AuthorDate: 2026-02-22 14:34:40 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-02-22 14:34:40 +0900

    [DOC] man: Increase section number portability

    Remove a zero-width space from manual page section numbers improving
    portability with the mandoc compiler used on macOS, BSD, and illumos.

    Previously it was polluting the whatis(1) database, showing as being
    in both sections `1` and also creating a new section `\&1`.

    This matches the examples shown in the language references for
    the two most widely deployed mdoc(7) compilers, mandoc and groff.

    Signed-off-by: Alexander Ziaee <ziaee@google.com>

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16220

    Merged-By: nobu <nobu@ruby-lang.org>

commit ac4aebc77b2fdb8f5f0248d71fc476173c357dbc
  Author:     tomoya ishida <tomoyapenguin@gmail.com>
  AuthorDate: 2026-02-22 12:44:49 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-02-22 12:44:49 +0900

    Use ruby-head instead of ruby-3.2 in check_misc job (#16217)

  Notes:
    Merged-By: tompng <tomoyapenguin@gmail.com>

commit fcba4c1ad753e10dfd86d21b3d3787b522ae8114
  Author:     BurdetteLamar <burdettelamar@yahoo.com>
  AuthorDate: 2026-02-22 07:20:57 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-02-22 11:56:06 +0900

    [DOC] Improve link in yjit.md

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16218

commit 9efde1f24eca01340d7193a19441f15993551cb1
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-22 11:06:26 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-02-22 11:06:26 +0900

    [DOC] Specify the HTML output path explicitly

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16219

commit 60082aa9f7f7e976d901b0566def5830cfa42f24
  Author:     BurdetteLamar <burdettelamar@yahoo.com>
  AuthorDate: 2026-02-07 03:32:39 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-02-22 04:17:24 +0900

    [DOC] Fix link fragment

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16092

commit 727612b138f7a0483d4b747dc1ee917dbe5da700
  Author:     Randy Stauner <randy@r4s6.net>
  AuthorDate: 2026-02-21 21:58:46 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-02-21 21:58:46 +0900

    ZJIT: Stabilize anonymous module/class names in stat keys and display (#16176)

    Anonymous modules/classes get names like `"#<Module:0x00007f...>"` from `rb_class2name`, which include a memory address that changes between runs. This makes stat keys unstable for diffing across runs and is less informative than it could be for display.

    Add three variants for class naming:
    - get_class_name: raw rb_class2name (unchanged, for internal use)
    - get_stable_class_name: strips addresses, includes superclass for anonymous classes (e.g. `"#<Class(String)>"`). For stat keys.
    - get_debug_class_name: like stable but preserves address when the name can't be fully resolved (e.g. `"#<Class(String):0x...>"`, `"#<Module:0x...>"`). For display where disambiguation matters.

    Use get_stable_class_name in stat key paths (qualified_method_name and count_call_to). Use get_stable_class_name in display paths that already have a separate pointer via ptr_map. Use get_debug_class_name in display paths without a separate pointer (type specializations, unreachable messages).

    I did this when trying to identify the source of the `#<Module:0x...>#object_id` stat we get from lobsters.  None of these cases handled that (which as we identified was Tempfile using Delegate), so I'm not sure how useful it might be, but it still seemed potentially useful enough to propose and discuss.

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit a0d9b69cd3342b38b02a55a652cff9bd272953fd
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-20 10:30:33 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-02-21 14:31:36 +0900

    colorize: [DOC] Add documents

commit 1fb58853c899883b5ceb115080671b3c446e64d2
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-20 10:29:55 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-02-21 14:30:42 +0900

    colorize: Make internal methods/constants private

commit 2794351c9f1c2b6b65dac1bb6c978971c064b383
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-20 02:38:45 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-02-21 14:30:42 +0900

    colorize: Refactor #initialize

    Use keyword arguments and extract repeated regexps as constant.

commit 769b8de476f10d5552cf7c7c10a3d42f7d8d20bc
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-20 02:36:16 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-02-21 14:30:41 +0900

    colorize: Support background color

commit 623f33d92f4a3b0d5d69bd36e0277fc7ecdf730b
  Author:     Matt Valentine-House <matt@eightbitraptor.com>
  AuthorDate: 2026-02-21 05:28:40 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-02-21 13:12:51 +0900

    Relax test_thrashing_for_young_objects to fix CI flake

    This test has been failing intermittently on multiple CI platforms
    (Debian 13, RHEL 9/10, Ubuntu aarch64) with heap_allocated_pages
    growing from 100 to 130, or major_gc_count incrementing by 1.

    Failing run: https://rubyci.s3.amazonaws.com/ubuntu/ruby-master/log/20260220T001003Z.fail.html.gz

    The test uses assert_separately, so test ordering is not a factor.
    In failing runs sweep_slots (27,386) lands within ~1,200 of
    min_free_slots (28,652) after warmup.

    I've been unable to reliably replicate this.

    However, when looking at the failures messages all failing runs
    total_freed_pages is 0: pages are not being freed and reallocated in a
    cycle. This is distinct from [Bug #18929] where pages cycled between
    allocation and the tomb heap.

    Since total_freed_pages == 0 already guards against the thrashing
    from [Bug #18929], relax heap_allocated_pages to assert_in_epsilon
    (50% tolerance) and drop major_gc_count which follows from the same
    marginal threshold.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16211

commit 82e796b1ebf5845e60713dbfdab963b6aa23041c
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-02-21 07:49:51 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-02-21 13:12:29 +0900

    Revert "[Bug #19831] Remove duplicate library warning"

    This reverts commit d256629bf9e194838d1837be74dcc0b8ff0bcfd6.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16212

commit a8cb7292c6790d12a72000c1e19e62f05ea63f6a
  Author:     Matt Valentine-House <matt@eightbitraptor.com>
  AuthorDate: 2026-02-20 06:43:32 +0900
  Commit:     Matt Valentine-House <matt@eightbitraptor.com>
  CommitDate: 2026-02-21 08:12:47 +0900

    Remove NUM_IN_PAGE macro

    This is being used to calculate the starting point of the slots in a
    page in order to make them evenly divisible by a bitmap plane.

    Since https://github.com/ruby/ruby/pull/16150 we restructured the
    bitmaps in order to pack them such that 1 bit == 1 slot, and remove the
    masking, meaning that we no longer need to align against planes.

    This is the last remining use for the NUM_IN_PAGE macro so we can remove
    that as well.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16205

commit e730ac41be4d427f06540e0f67fa16bbdced4789
  Author:     Randy Stauner <randy@r4s6.net>
  AuthorDate: 2026-02-21 01:39:11 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-02-21 01:39:11 +0900

    YJIT: Fix version_map use-after-free from mutable aliasing UB

    Multiple YJIT functions created overlapping `&'static mut IseqPayload`
    references by calling `get_iseq_payload()` multiple times for the same
    iseq. Overlapping &mut is UB in rust's aliasing model, and as consequence,
    we trigered use-after-free on the `version_map` Vec header due to false
    claims of LLVM `noalias`.

    This manifested as crashes in various YJIT operations (block lookup,
    GC marking, block removal) that dereference the stale pointer.

    Fix by moving `delayed_deallocation` and `get_or_create_version_list`
    from free functions (which each call `get_iseq_payload()` internally)
    to methods on `IseqPayload` that operate through `&mut self`. This
    lets callers obtain a single payload reference and use it for all
    operations without creating overlapping mutable borrows.

    The three fixed call sites:

    1. `rb_yjit_tracing_invalidate_all` (invariants.rs): The loop called
       `delayed_deallocation()` which internally called `get_iseq_payload()`,
       creating a second `&mut` overlapping with the outer `payload` reference.
       Fix: call `payload.delayed_deallocation()` method instead.

    2. `add_block_version` (core.rs): Called `get_or_create_version_list()`
       then later `get_iseq_payload()` for pages, creating two references.
       Fix: use a single `get_or_create_iseq_payload()` call then call the
       `get_or_create_version_list()` method on it for both version_map and
       pages access.

    Also adds regression tests exercising tracing invalidation with
    on-stack methods and suspended fibers.

    [alan: edited commit message]
    Reviewed-by: Alan Wu <alanwu@ruby-lang.org>

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16128

    Merged-By: XrXr

commit 906176adb49abcd22bb1da082744ea9e413b96d9
  Author:     Alan Wu <XrXr@users.noreply.github.com>
  AuthorDate: 2026-02-20 09:55:15 +0900
  Commit:     Alan Wu <XrXr@users.noreply.github.com>
  CommitDate: 2026-02-21 01:04:50 +0900

    ZJIT: zjit-bisect.rb: Pass options with -T for `make test-spec`

    It was passing options to the test harness rather than ruby(1).

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16207

commit ee2d90295c59fce739c5850cf8fe3983db14c199
  Author:     Étienne Barrié <etienne.barrie@gmail.com>
  AuthorDate: 2026-02-20 19:58:01 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-20 20:18:32 +0900

    [ruby/json] Use single quotes for allow_invalid_escape doc

    Instead of using %{} which works like double-quoted string and allows
    escape sequences and in which "other escaped characters (a backslash
    followed by a character) are interpreted as the character", change the
    examples for `allow_invalid_escape` to use single-quotes strings, in
    which "any other character following a backslash [except ' and \] is
    interpreted as is: a backslash and the character itself."

    This makes it clearer the JSON document only includes a single
    backslash.

    https://github.com/ruby/json/commit/a888d6d57b

commit f3d52cb80d931f91f6d598935d669b7ec468b8a8
  Author:     Andrii Furmanets <furmanets.andriy@gmail.com>
  AuthorDate: 2026-02-20 16:05:24 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-20 20:12:52 +0900

    [ruby/rubygems] Document concurrent_downloads in environment command

    https://github.com/ruby/rubygems/commit/927f1e3a0f

commit 986aa6943f3496da6f3414fb418f580333245b05
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-20 19:44:00 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-02-20 19:44:00 +0900

    Suppress an uninitialized variable warning

commit 2d2afa8c170703730a58201ad9cf14ff934c453c
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-20 10:33:08 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-02-20 19:25:21 +0900

    Group rubyspec_capiext

commit 3dc80a098c147ac84f66460ee84e6c7ea9e8f1ff
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-20 12:41:13 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-02-20 17:34:23 +0900

    Removed unnecessary setup for make bundled_gems_spec-run

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16208

commit 3417f8025d1914c4307d19d9a56db62d54494c88
  Author:     git[bot] <svn-admin@ruby-lang.org>
  AuthorDate: 2026-02-20 16:08:05 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-20 16:08:05 +0900

    Update bundled gems list as of 2026-02-20

commit 28de927b37681492eeeee1795f4549168fcdf190
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-20 13:25:59 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-02-20 13:25:59 +0900

    Add win32-registry entries to doc

commit f01f66ca249405ec125ba864e48e51944cc51c6f
  Author:     Lars Kanis <lars@greiz-reinsdorf.de>
  AuthorDate: 2026-02-18 05:23:35 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-02-20 13:22:25 +0900

    Move win32-registry from default to bundled gems

    Because win32-registry needs fiddle and fiddle is a bundled gem.

    [Bug #21855]

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16189

commit b093886df039ec67ec36173b590435fe39731264
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-02-20 04:48:19 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-02-20 13:19:52 +0900

    [DOC] Fix range docs intro

    It's code but not formatted as such

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16203

commit 6ea68a58418e9706f96c871e519d186384c5b694
  Author:     Edouard CHIN <chin.edouard@gmail.com>
  AuthorDate: 2026-02-10 21:48:59 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-20 11:05:07 +0900

    [ruby/rubygems] Don't check whether a plugin needs to be installed:

    - ### Problem

      When Bundler installs gems, it checks whether a gem plugin needs
      to be installed.
      This check (`Dir.glob`) is expensive and is hotspot when profiling
      Bundler.

      ### Details

      Bundler makes a check to see if a gemspec stub exists for the gem
      being installed. If a gemspec stub already exists and its version is
      the same as the gem being installed, then Bundler assumes that the
      gem plugin was already generated in the past and there is no need to
      generate it again.
      This check was added for performance purpose but it's counter
      productive and has the opposite effect.

      The vast majority of gems don't have a plugin and we are incurring
      the cost of doing a `Dir.glob` for *every* gems to account for the
      small percentage of gems that may have a plugin to install.

      So it's actually much faster to always reinstall plugins for the few
      gems that have ones, than to make a check for all gems.

      Another advantage with this change is that if someone accidentaly
      bust the `plugins` folder but don't bust the `specifications` one,
      then Bundler will correctly regenerate plugins (where as before it
      wouldn't).

      I tried running this patch on a Gemfile containing 400 gems and this
      patch shoves around a second.

      ### Solution

      Always install plugins, no matter if one of the same version already
      exist.

    https://github.com/ruby/rubygems/commit/d8d21c7a40

commit b5ccab2093c9bb19ae8564a935e6fd72ec7354cc
  Author:     Kasumi Hanazuki <kasumi@rollingapple.net>
  AuthorDate: 2026-02-20 10:56:50 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-02-20 10:56:50 +0900

    IO::Buffer#locked: Release lock even when the block raises (#16180)

    IO::Buffer#locked: Release lock even when the block raises/breaks

    Previously, `IO::Buffer#locked` leaks the lock when the block raises
    an exception, or breaks.

    Fixes: [Bug #21882]

  Notes:
    Merged-By: ioquatix <samuel@codeotaku.com>

commit 126b657bd103a1abf4b572ade557ffdc7ae99982
  Author:     John Hawthorn <john@hawthorn.email>
  AuthorDate: 2026-02-20 08:09:42 +0900
  Commit:     John Hawthorn <john@hawthorn.email>
  CommitDate: 2026-02-20 10:39:44 +0900

    Use rb_ensure instead of guard objects for Dir.pwd

    This replaces GC-based buffer guards (rb_imemo_tmpbuf,
    TypedData_Wrap_Struct) with rb_ensure to clean up malloc/xmalloc memory
    when an exception occurs.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16206

commit 06c8b1abfa45cabb1974411f519975dde59dacc9
  Author:     Max Bernstein <ruby@bernsteinbear.com>
  AuthorDate: 2026-02-20 06:04:44 +0900
  Commit:     Max Bernstein <tekknolagi@gmail.com>
  CommitDate: 2026-02-20 08:37:39 +0900

    ZJIT: Remove find() from po_from

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16204

commit c0c97c0f1253120741bc53eaea395c38909b2b8f
  Author:     Max Bernstein <ruby@bernsteinbear.com>
  AuthorDate: 2026-02-20 05:59:40 +0900
  Commit:     Max Bernstein <tekknolagi@gmail.com>
  CommitDate: 2026-02-20 08:37:39 +0900

    ZJIT: Simplify po_from to take a single BlockId

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16204

commit e6f73fcf49179472a532ab2ca26d8a0903be5b21
  Author:     Matt Valentine-House <matt@eightbitraptor.com>
  AuthorDate: 2026-02-18 21:42:15 +0900
  Commit:     Matt Valentine-House <matt@eightbitraptor.com>
  CommitDate: 2026-02-20 08:22:33 +0900

    Remove HEAP_PAGE_OBJ_LIMIT

    This was useful when there was only a single size pool to have an easy
    way of referencing the average number of objects a page could hold (this
    would vary by a few in real terms because of page alignment).

    But with multiple heaps, each heap contains pages with different numbers
    of objects because slot sizes are different.

    So when we use HEAP_PAGE_OBJ_LIMIT to do any kind of calculations: such
    as calculating freeable pages), then we're significantly underestimating
    the number of freeable pages in the larger size pools, which will cause
    us to hold on to pages unnecessarily.

    This commit replaces uses of HEAP_PAGE_OBJ_LIMIT with a more accurate
    approximation for the actual heap being manipulated.

    It also removes HEAP_PAGE_OBJ_LIMIT from GC::INTERNAL_CONSTANTS

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16199

commit 7ca0aa5f73303268fbc3589c1ba792c7389cb4c1
  Author:     Matt Valentine-House <matt@eightbitraptor.com>
  AuthorDate: 2026-02-17 01:47:50 +0900
  Commit:     Matt Valentine-House <matt@eightbitraptor.com>
  CommitDate: 2026-02-20 07:24:11 +0900

    Copy terminator when moving strings to the heap.

    The embedded-to-heap path copied RSTRING_LEN(str) bytes into an
    ALLOC_N buffer, missing the null terminator (and any slot padding).
    Copy str_embed_capa(str) bytes instead. Always safe since we only
    enter this path when str_embed_capa(str) < capacity + termlen.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16201

commit bb8881f31ee1367f50d228e970bdf2dfddd25e18
  Author:     Andrii Furmanets <furmanets.andriy@gmail.com>
  AuthorDate: 2026-02-19 04:12:10 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-20 07:17:54 +0900

    [ruby/rubygems] Honor concurrent_downloads from gemrc

    https://github.com/ruby/rubygems/commit/6a187a0a99

commit b205bf613ff56d21dcaa315c08d577c0a7a056dd
  Author:     Max Bernstein <ruby@bernsteinbear.com>
  AuthorDate: 2026-02-19 01:09:48 +0900
  Commit:     Max Bernstein <tekknolagi@gmail.com>
  CommitDate: 2026-02-20 06:18:49 +0900

    ZJIT: Measure how much each part of compile-time costs

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16193

commit 607af489a2f3fa3e3eeee5834517c89b38367409
  Author:     Max Bernstein <ruby@bernsteinbear.com>
  AuthorDate: 2026-02-19 00:16:48 +0900
  Commit:     Max Bernstein <tekknolagi@gmail.com>
  CommitDate: 2026-02-20 06:18:49 +0900

    ZJIT: Measure side-exit compile time

    Also report it as a percentage of overall compile time.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16193

commit c058a98866d59072ea0dc6009c2b5d4da9a566d2
  Author:     Max Bernstein <ruby@bernsteinbear.com>
  AuthorDate: 2026-02-20 03:05:41 +0900
  Commit:     Max Bernstein <tekknolagi@gmail.com>
  CommitDate: 2026-02-20 06:05:08 +0900

    ZJIT: Replace dominator set-intersection with Cooper's idom algorithm

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16200

commit f5782840a3c03eaf5682a2e096741f5e8cf3a574
  Author:     Max Bernstein <ruby@bernsteinbear.com>
  AuthorDate: 2026-02-19 10:08:30 +0900
  Commit:     Max Bernstein <tekknolagi@gmail.com>
  CommitDate: 2026-02-20 06:05:08 +0900

    ZJIT: Add Entries superblock as single CFG root

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16200

commit 3f5e85bf04daeef79a0c158f90a9817eaeb0d263
  Author:     Max Bernstein <ruby@bernsteinbear.com>
  AuthorDate: 2026-02-19 09:43:42 +0900
  Commit:     Max Bernstein <tekknolagi@gmail.com>
  CommitDate: 2026-02-20 06:05:08 +0900

    ZJIT: Add LoadArg instruction for JIT entry blocks

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16200

commit e7cff2e817cddee889cfa3a1e7770cf23e1bb667
  Author:     Randy Stauner <randy@r4s6.net>
  AuthorDate: 2026-02-18 09:36:12 +0900
  Commit:     Max Bernstein <tekknolagi@gmail.com>
  CommitDate: 2026-02-20 00:57:10 +0900

    ZJIT: Register builtin CMEs before prelude to avoid prepend crash

    Split rb_zjit_init into rb_zjit_init_builtin_cmes (called before
    ruby_init_prelude) and rb_zjit_init (called after). The prelude may
    load bundler via BUNDLER_SETUP which can call Kernel.prepend, moving
    core methods to an origin iclass. Registering method annotations
    before the prelude ensures we capture CMEs while core classes are
    pristine.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16190

commit bf3bc12d388b0064ecbccf80b1503ce479611f0f
  Author:     Randy Stauner <randy@r4s6.net>
  AuthorDate: 2026-02-19 04:17:15 +0900
  Commit:     Max Bernstein <tekknolagi@gmail.com>
  CommitDate: 2026-02-20 00:57:10 +0900

    Simplify Kernel prepend test

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16190

commit b9dc0a2bb8d08980aa98cf09a6e8615adcd8ffd4
  Author:     Étienne Barrié <etienne.barrie@gmail.com>
  AuthorDate: 2026-02-18 22:19:02 +0900
  Commit:     Max Bernstein <tekknolagi@gmail.com>
  CommitDate: 2026-02-20 00:57:10 +0900

    Add regression test for module prepend crash

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16190

commit a19becac5b3c0a477fc1883cdd7f9d7195d84349
  Author:     Randy Stauner <randy@r4s6.net>
  AuthorDate: 2026-02-18 09:32:33 +0900
  Commit:     Max Bernstein <tekknolagi@gmail.com>
  CommitDate: 2026-02-20 00:57:10 +0900

    YJIT: Register builtin CMEs before prelude to avoid prepend crash

    Split rb_yjit_init into rb_yjit_init_builtin_cmes (called before
    ruby_init_prelude) and rb_yjit_init (called after). The prelude may
    load bundler via BUNDLER_SETUP which can call Kernel.prepend, moving
    core methods to an origin iclass. Registering method codegen before
    the prelude ensures we capture CMEs while core classes are pristine.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16190

commit e7a098457a3fb5ff38374aede03cd32c8682f73b
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-02-19 21:20:18 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-19 21:31:59 +0900

    [ruby/json] Add `allow_invalid_escape` parsing option

    Ref: https://github.com/ruby/json/issues/939

    https://github.com/ruby/json/commit/05cec0cbee

commit e67f3f06601410fd0fc4ff01b9005e4f4a5b8383
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-02-19 18:31:26 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-19 19:58:26 +0900

    [ruby/prism] Implement noblock for the ripper/ruby_parser translator

    In ripper, compared to `**nil` it is not a new event

    https://github.com/ruby/prism/commit/7f5782392e

commit 7d05c17069f7f14255a47553729b942d1cb92800
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-19 19:02:57 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-02-19 19:02:57 +0900

    Use `UNREACHABLE_RETURN` instead of dummy `return`

commit 361644c0cce3235e9cc6724994c6b5711deb10b8
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-19 17:54:00 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-02-19 18:12:13 +0900

    [Bug #21917] Fix build on AIX

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16197

commit 3ad0519534fea2e7065136185675a1b54caadcdf
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-19 17:27:32 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-02-19 18:12:12 +0900

    Reduce duplicate code

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16197

commit 6bb0b6b16c61e8733ce7830cc5f796c64d5398cd
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-02-19 18:03:55 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-19 18:04:23 +0900

    [ruby/prism] Revert "[DOC] Add code fences"
    (https://github.com/ruby/prism/pull/3936)

    This reverts commit https://github.com/ruby/prism/commit/641775e5fea6.

    There is no need, they are not documented.

    https://github.com/ruby/prism/commit/6fb4c42637

commit da767cda10a25566e91d7ca6956301c94c8bc7ed
  Author:     Stan Lo <stan001212@gmail.com>
  AuthorDate: 2026-02-19 10:15:43 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-02-19 10:15:43 +0900

    Fix wrong function names in `rb_bug` messages in vm_trace.c (#16196)

  Notes:
    Merged-By: st0012 <stan001212@gmail.com>

commit e3183164a5549d21526cf9b8905a885814a580a0
  Author:     Randy Stauner <randy@r4s6.net>
  AuthorDate: 2026-02-19 09:22:16 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-02-19 09:22:16 +0900

    ZJIT: Save VM state before recording exit stack for trace-exits (#16195)

    When --zjit-trace-exits is enabled, rb_zjit_record_exit_stack was called before compile_exit restored the VM state (cfp->pc, cfp->sp, stack, locals). This ccall clobbers caller-saved registers that may hold stack/local operands, causing garbage values to be written to the VM stack when compile_exit runs afterward. This led to crashes like `klass: T_FALSE` in the interpreter when those corrupted values were used as receivers.

    Fix by splitting compile_exit into compile_exit_save_state and compile_exit_return, and emitting the full exit inline when recording: save VM state first, then call rb_zjit_record_exit_stack (so rb_profile_frames sees valid cfp->pc), then return.

    Before this I was able to cause a crash with
    ```
    ruby --zjit-trace-exits -rffi -e1
    ```

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit e11c3cef1b0c44562f710e160a4ca7c12a7c348b
  Author:     Nathan Froyd <froydnj@gmail.com>
  AuthorDate: 2026-02-19 06:59:13 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-19 08:37:17 +0900

    [ruby/prism] add `extern "C"` wrappers to `prism.h` when using C++

    https://github.com/ruby/prism/commit/003ff5341d

commit 671ea6fb3ea64caad64bd2955bdd562673a651f9
  Author:     Steven Webb <steven.daniel.webb@gmail.com>
  AuthorDate: 2026-02-19 07:12:31 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-02-19 07:12:31 +0900

    ZJIT: Constant fold modulus (%) operations (#16168)

    Similar to the way ZJIT already folds +, -, and * operations. One
    complication is that the % operator behaves differently in Ruby than in
    Rust for negative values. For example in Ruby:

    ```
    ruby -e "puts 11 % -3" # => -1
    ```

    vs Rust:

    ```
    println!("{}", 11 % -3); // => 2
    ```

    Rust has the `#rem_euclid()` method; however, it also differs from Ruby.

    My solution was to call into the cruby #rb_fix_mod_fix method to get the
    correct behaviour.

    Note that any `% 0` operations are not folded as they need to raise a
    ZeroDivisionError.

    One concern was an integer overflow. Fortunately that's not possible.
    Given any two Fixnums `a`, and `b`, by definition the result of `a % b`
    must be closer to 0 than `b`, making an overflow impossible.

    One adjacent edge case is when calculating `RUBY_FIXNUM_MIN % -1`. The
    result is 0 which is obviously fine; however, the related result of
    `RUBY_FIXNUM_MIN / -1` would overflow. The #rb_fix_mod_fix method avoids
    this problem by not calculating the `div` portion. See:
    https://github.com/ruby/ruby/blob/07f5126c104507ec70c5bfb2eb5204ceb22b7ebd/internal/fixnum.h#L164

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit e1f49ff79ded5737b0455cd6363e05a2551e7b8b
  Author:     John Hawthorn <john@hawthorn.email>
  AuthorDate: 2026-02-17 03:18:19 +0900
  Commit:     John Hawthorn <john@hawthorn.email>
  CommitDate: 2026-02-19 05:56:04 +0900

    Don't attempt to convert strings to hashes in gsub

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16182

commit 6273827196cd872549e4e49411230c82d1f86547
  Author:     Jeremy Evans <code@jeremyevans.net>
  AuthorDate: 2026-02-17 13:04:16 +0900
  Commit:     Jeremy Evans <code@jeremyevans.net>
  CommitDate: 2026-02-19 03:06:43 +0900

    Remove key_addr argument to set{,_table}_insert_wb

    After a review of all callers, this doesn't appear to be needed for
    correct behavior. We could potentially have a future case where it
    is needed, such as a method that inserts a record into the set and
    returns the inserted record (which could be different from the
    argument if the argument was an unfrozen string). However, we don't
    currently have such a case, and it's better for performance to
    remove the code.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16188

commit 219ad6823a4d0020f49aed9f562e19b40ca4c40e
  Author:     Alan Wu <XrXr@users.noreply.github.com>
  AuthorDate: 2026-02-11 07:30:06 +0900
  Commit:     Alan Wu <XrXr@users.noreply.github.com>
  CommitDate: 2026-02-19 00:16:43 +0900

    ZJIT: Don't specialize `super` from within a block

    As we found out from YJIT, `super` from within a block needs a loop for
    the running CME guard, and the current LEP based guard always fails.
    Don't specialize for now so we use the fallback instead of side-exiting.

commit ea7d3eb89b8c5192c0cf9a885a17b0aeaef1067a
  Author:     Alan Wu <XrXr@users.noreply.github.com>
  AuthorDate: 2026-02-10 06:46:50 +0900
  Commit:     Alan Wu <XrXr@users.noreply.github.com>
  CommitDate: 2026-02-19 00:16:43 +0900

    YJIT: Fix always-failing guard for `super()` in BMETHODs

    Previously, when dealing with a `super()` nested in a block that runs as
    a method (through e.g. `define_method`), YJIT generated a guard that
    never passes leading to a misidentification of the callsite as
    megamorphic and an unconditional interpreter fallback.

    The issue was in the subroutine to find the currently running method
    entry. In the interpreter, this is rb_vm_frame_method_entry(). YJIT used
    `gen_get_lep()` to find the EP with `VM_ENV_FLAG_LOCAL`, but in case
    of BMETHODs, the corresponding CME is never at an EP level with
    `VM_ENV_FLAG_LOCAL` set.

    Because each block nesting level can dynamically run as either a BMETHOD
    or not, starting at a block and finding the first EP that has a method
    entry ultimately requires a search loop such as the one in rb_vm_frame_method_entry().
    This patch introduces such a loop.

    Because `invokesuper` in a block can now work end-to-end, add check for the
    previously masked "implicit argument passing of super from method
    defined by define_method() is not supported..." condition.

commit d256629bf9e194838d1837be74dcc0b8ff0bcfd6
  Author:     Étienne Barrié <etienne.barrie@gmail.com>
  AuthorDate: 2026-02-16 19:59:50 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-02-18 22:04:51 +0900

    [Bug #19831] Remove duplicate library warning

    When building on macOS, we get a warning about duplicate libraries

        ld: warning: ignoring duplicate libraries: '-ldl', '-lobjc', '-lpthread'

    To fix it, we now append $(MAINLIBS) to LIBRUBYARG_SHARED (when shared
    is enabled), matching what's already done for LIBRUBYARG_STATIC. And we
    remove the now-redundant $(MAINLIBS) from the $(PROGRAM) link line,
    since $(LIBRUBYARG) carries it in both cases.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16181

commit 4cb6e9d0ac272d9bc2c0d621cf65b1314cd09e7b
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-18 19:01:29 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-02-18 19:01:29 +0900

    Pass the global variable with `-s` option

commit 91be23cd961aa937701214ba5f50c698301c5e26
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-02-14 21:39:59 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-02-18 17:19:56 +0900

    [Bug #21868] Use ruby allocator for prism

    If we wan't prism to use the ruby allocator, we should
    include it as early as possible.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16174

commit 4797b060c88f58688a6d5b58719aec63a6677510
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-18 13:28:33 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-02-18 16:23:27 +0900

    test-bundled-gems: Use the abstract decoration

commit ea0432f793b73820a932863d7c4eaf58fe8122dc
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-18 12:21:01 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-02-18 16:23:27 +0900

    colorize: Reset for each attribute

commit b7c770c038ef0fe033f9e82bd7c9a004b14d8200
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-18 15:25:41 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-02-18 15:25:41 +0900

    Clean timestamp directory

    Fix up git:e875ca2e7494.

commit b6ef00094edd51d1ad0548ed5f55eb02079b9e22
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-18 15:05:30 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-02-18 15:05:30 +0900

    Skip failing example in spec/bundler/install/global_cache_spec.rb when running in ruby core

commit e9806c21de6094c464c0196397d72d2f84298ece
  Author:     Max Bernstein <rubybugs@bernsteinbear.com>
  AuthorDate: 2026-02-18 13:34:05 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-02-18 13:34:05 +0900

    ZJIT: Count side-exit code size and report ratio to code region (#16191)

    railsbench stats:
      side_exit_size:       5,340,736
      code_region_bytes:   15,122,432
      side_exit_size_ratio:     35.3%

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit f70f8338e3e43708349fdf069e7deac2d11c18c4
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-17 23:30:01 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-02-18 11:12:29 +0900

    Direct calls for specific numeric types in complex/rational

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16192

commit a4a6de0b17b515e814de0be9f931e70808124dfc
  Author:     Edouard CHIN <chin.edouard@gmail.com>
  AuthorDate: 2026-02-17 08:28:47 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-18 10:17:44 +0900

    [ruby/rubygems] Fix Bundler crashing when it tries to install plugin:

    - ### Problem

      Bundler crashes when a Gemfile contains a plugin and you
      try to run `bundle install` while setting the BUNDLE_WITHOUT=default
      value.

      ### Context

      Setting the BUNDLE_WITHOUT=default is something that some deployment
      tooling does like [shipit](https://github.com/Shopify/shipit-engine/blob/a24b9d8b1b777e22f05311705be7938a4823eee6/app/models/shipit/deploy_spec/bundler_discovery.rb#L6)
      The intent being to only install gems that are required to deploy
      the app (for instance ones that are inside a `group :deploy` block).

      ### Solution

      Bundler assume that all plugins inside the Gemfile will get
      installed, but don't take in consideration that a BUNDLE_WITHOUT
      may have affected this.

      So before registering a plugin, make sure it's actually in
      the `specs` object (meaning it was installed on disk).

    https://github.com/ruby/rubygems/commit/b416a026ca

commit 4ab288f9d467c83507693051229784bba961e3c1
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-17 17:29:33 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-02-18 10:16:51 +0900

    Clean temporary files generated by test-bundler

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16186

commit e4b8ca2a3e62af89eb9e42ab87a488433361bc85
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-17 17:28:56 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-02-18 10:16:51 +0900

    Show gem names at fetching

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16186

commit e875ca2e7494e7c28af6dbf0ad0add5c81d6944c
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-17 09:04:34 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-02-18 10:16:51 +0900

    Fetching bundled gems sources depending on default_gems

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16186

commit f0343743990497e15501ede6841524ac5ca1e0f8
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-17 09:03:38 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-02-18 10:16:51 +0900

    test-bundled-gems-spec does not need rubyspec CAPI exts

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16186

commit 633a9bc7e961dbabba3601a6056cfdc2c0c65421
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-16 16:45:37 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-02-18 10:16:51 +0900

    Show elapsed times in test-bundled-gems

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16186

commit 282f57a2bcb56bdd6f84533660a4aa56124e0a63
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-18 07:48:17 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-02-18 07:48:22 +0900

    Upgrade the latest version of github/codeql-action

commit 997bc709db321db9bd250aa889dda6279c20148e
  Author:     Matt Valentine-House <matt@eightbitraptor.com>
  AuthorDate: 2026-02-18 00:39:42 +0900
  Commit:     Matt Valentine-House <matt@eightbitraptor.com>
  CommitDate: 2026-02-18 05:46:23 +0900

    Re-enable the Lobste.rs benchmark on CI

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16187

commit 55ecc9c1a512f384926a8f9c6730d86ed02debdd
  Author:     Benoit Daloze <eregontp@gmail.com>
  AuthorDate: 2026-02-17 22:51:05 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-17 23:20:38 +0900

    [ruby/prism] Recompile when config.yml changes

    * Fixes https://github.com/ruby/prism/issues/3931.
    * The first line is the default one, we want to keep that default dependency too.
    * Some docs about this: https://docs.ruby-lang.org/en/4.0/MakeMakefile.html

    https://github.com/ruby/prism/commit/ffe8f7a6e2

commit a9237d128ef2f72d86551505b303e3d988d7f320
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-02-17 18:11:05 +0900
  Commit:     Kevin Newton <kddnewton@gmail.com>
  CommitDate: 2026-02-17 22:40:55 +0900

    Rename `pm_newline_list_t` to `pm_line_offset_list_t`

    Co-Authored-By: Nathan Froyd <froydnj@gmail.com>

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16184

commit 4f5805fd61974bf654164e205d24b6091d6ba89b
  Author:     Edouard CHIN <chin.edouard@gmail.com>
  AuthorDate: 2026-02-10 09:11:58 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-17 19:13:37 +0900

    [ruby/rubygems] Run git operations in parallel (take 2):

    - In #9100, I opened a patch to run git operations in parallel in
      order to download git gems more quickly.
      The parallelization doesn't works when resolving is not needed due
      to a premature call to `source.specs` hit by this codepath.

      You can reproduce the problem and see that the gems aren't
      downloaded in parallel if you have an existing Gemfile and
      Gemfile.lock. (In my first patch, I forgot to try when a
      Gemfile.lock already existed).

      I'd like to introduce a new call to `prelad_git_sources`, when
      bundler hits the "missing specs" branch.
      I unforunately couldn't find a single place where we could preload
      git sources due to the `source.specs` that is called at different
      path.

    https://github.com/ruby/rubygems/commit/f25b40f21f

commit 3896dbc9ee0b69d84a7805ae2bbc476d3ad3d8c4
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-17 15:01:02 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-02-17 15:01:02 +0900

    Extend timeout for test_undefine_finalizer

    https://ci.rvm.jp/results/trunk-yjit@ruby-sp2-noble-docker/6204308

commit 125b3ad93f53300b289bec4fa57aa23417d7e305
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-17 11:38:25 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-02-17 11:38:25 +0900

    Extend timeout for test_move_nested_hash_during_gc_with_yjit

    https://ci.rvm.jp/results/master-no-rjit@ruby-sp2-noble-docker/6204075

commit 1fbe6214ad17bf335b690433c1abc5a05e2ce049
  Author:     Kevin Newton <kddnewton@gmail.com>
  AuthorDate: 2026-02-17 01:16:16 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-17 05:49:32 +0900

    [ruby/prism] Parser support for no block parameter syntax

    https://github.com/ruby/prism/commit/675f9c3be7

commit 387faae7844001ebaf85b62743f9c5d0632e4c14
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-02-17 03:37:35 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-17 05:33:32 +0900

    [ruby/prism] Add a test for multiple `&nil` blocks/mixing them

    https://github.com/ruby/prism/commit/e5fb0e192b

commit 7135ab56c8d13b9e5a5242c6ac97ea4643a637a1
  Author:     Kevin Newton <kddnewton@gmail.com>
  AuthorDate: 2026-02-17 01:00:47 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-17 05:33:32 +0900

    [ruby/prism] Only accept noblock in Ruby 4.1+

    https://github.com/ruby/prism/commit/fb88c72dce

commit f5f9fe243535d19af6a7e78ccd456f75fe990ac1
  Author:     Kazuki Yamaguchi <k@rhe.jp>
  AuthorDate: 2026-02-17 01:44:52 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-17 01:59:15 +0900

    [ruby/openssl] Ruby/OpenSSL 4.0.1

    https://github.com/ruby/openssl/commit/38a1a4a8f0

commit 0eff3a26236ff5039f4497969f62feffc9f5259c
  Author:     Steve Whittaker <stevew@ssl.com>
  AuthorDate: 2026-02-17 00:58:48 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-17 01:39:21 +0900

    [ruby/openssl] ocsp: fix uninitialized variables in BasicResponse#status

    revtime, thisupd, nextupd, and reason are not initialized before
    being passed to OCSP_single_get0_status(). For GOOD and UNKNOWN
    status, OpenSSL doesn't write to revtime or reason (only REVOKED
    does), so they keep whatever was on the stack. The nil guard
    `revtime ? asn1time_to_time(revtime) : Qnil` then tries to
    convert a garbage pointer, which blows up with ASN1_TIME_to_tm.

    Initialize all four to safe defaults before the call.

    https://github.com/ruby/openssl/commit/667ce07f33

commit 38c602ea0092abeef3e679fdc88961cb77492448
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-02-16 23:43:10 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-17 00:49:22 +0900

    [ruby/prism] Fix C extension docs in ruby/ruby

    Because ruby/ruby doesn't use our rake task it also uses the default markup (rdoc), unless specified otherwise.
    github.com/ruby/prism/pull/3572 already added it explicitly to ruby files.

    For C however, it is not so easy because of a rdoc bug: https://github.com/ruby/rdoc/issues/1597
    Adding the comment would remove all documentation since it gets parsed as ruby.

    So, specify it for each method individually. Remove it from the template since there is only one C file relevant for rdoc.

    https://github.com/ruby/prism/commit/4ee9b1b651

commit 11e4f99a4ef3096c59f7b221865fbbe11b4cb1ed
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-02-16 17:03:43 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-16 17:25:57 +0900

    [ruby/prism] Only compare &nil syntax on rubies that support it

    https://github.com/ruby/prism/commit/8aad2480ab

commit 66a3ebe38065509ae83e56095eaaf146d82efe9d
  Author:     git[bot] <svn-admin@ruby-lang.org>
  AuthorDate: 2026-02-16 14:37:35 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-16 14:37:35 +0900

    Update bundled gems list as of 2026-02-16

commit 99674185d63162eadcded3d2623a181fddf2bbb3
  Author:     Ufuk Kayserilioglu <ufuk.kayserilioglu@shopify.com>
  AuthorDate: 2024-06-27 06:38:01 +0900
  Commit:     Kevin Newton <kddnewton@gmail.com>
  CommitDate: 2026-02-16 04:12:15 +0900

    Start handling `&nil` in method parameters

    Similar to `:nokey` for `**nil` declaring methods/procs, a method/proc with a `&nil` declaration will return a `:noblock` entry in the parameters array.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/11065

commit 071c6d149b8e67960ba809089c3736926620c40e
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2024-02-21 12:36:01 +0900
  Commit:     Kevin Newton <kddnewton@gmail.com>
  CommitDate: 2026-02-16 04:12:15 +0900

    [PRISM] [Feature #19979] Method definition with `&nil`

  Notes:
    Merged: https://github.com/ruby/ruby/pull/11065

commit 116d402067c1d01ed67b16ec93fb523bd5109d07
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2024-02-20 19:34:50 +0900
  Commit:     Kevin Newton <kddnewton@gmail.com>
  CommitDate: 2026-02-16 04:12:15 +0900

    [Feature #19979] Method definition with `&nil`

    Allow methods to declare that they don't accept a block via `&nil`.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/11065

commit 2065b55980a0fc6386d58e4ede37d60c50e5b62f
  Author:     git[bot] <svn-admin@ruby-lang.org>
  AuthorDate: 2026-02-14 16:03:18 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-14 16:03:18 +0900

    Update bundled gems list as of 2026-02-14

commit b5105f16f9ed6547aaa3f0808b706bca91e4faf4
  Author:     Étienne Barrié <etienne.barrie@gmail.com>
  AuthorDate: 2026-02-14 00:28:05 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-02-14 09:20:28 +0900

    [DOC] Fix example of unpack ^ directive

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16171

commit 93e68cacc8dde243d8ece47ee73206e0ca334705
  Author:     Godfrey Chan <godfreykfc@gmail.com>
  AuthorDate: 2026-02-14 06:30:39 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-02-14 06:30:39 +0900

    ZJIT: unify `hir::Insn::{Send,SendWithoutBlock}` (GH-16143)

    After GH-15911, we largely apply the same treatment to these two
    variants everywhere. In `type_specialize`, there are two ~100 LOC
    match arms that shared 90% of the code. Unifying these allowed the
    code to be shared more easily.

    ---

    **Note:**

    In the interest of preserving existing semantics and keeping the
    diff small for this initial PR, `YARVINSN_send` can currently
    produce:

    ```rs
    Insn::Send { blockiseq: Some(null_ptr), .. }
    ```

    Either way, that can be done in a follow-up PR.

    ---

    Follow-up tasks:

    1. Unify `reduce_send_to_ccall`/`reduce_send_without_block_to_ccall`

    2. Address the `Some(null_ptr)` situation above (discussed on PR)

    3. Rename/merge the stats/counters/fallback reasons, if desired

    Partially addresses Shopify/ruby#941 (TODO: `optimize_c_calls`)

    [alan: rewrote commit message]
    Reviewed-by: Alan Wu <XrXr@users.noreply.github.com>

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16143

    Merged-By: XrXr

commit bf1ac3f4af16edb613b6795a4af253e9d551bd2c
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-02-13 18:49:25 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-14 01:38:48 +0900

    [ruby/prism] Fix lexing for unterminated strings/heredocs etc.

    When we hit EOF and still have lex modes left, it means some content was unterminated.
    Heredocs specifically have logic that needs to happen when the body finished lexing.
    If we don't reset the mode back to how it was before, it will not continue lexing at the correct place.

    Followup to https://github.com/ruby/prism/pull/3918.
    We can't call into `parser_lex` since it resets token locations.

    https://github.com/ruby/prism/commit/27c24fdc0d

commit 2daf48e724d59ff0094a8d7ff9af9936ca5c84ab
  Author:     Matt Valentine-House <matt@eightbitraptor.com>
  AuthorDate: 2026-02-13 22:37:49 +0900
  Commit:     Matt Valentine-House <matt@eightbitraptor.com>
  CommitDate: 2026-02-13 23:29:14 +0900

    Use UINT32_MAX as magic divisor

    As @jhawthorn pointed out, the original calculation used `(1 << 32) /
    heap->slot_size + 1)` which leads to a subtle off by one error that gets
    shifted away because our slot sizes aren't powers of 2.

    This is still worth fixing now, so that we don't trip up over it if we
    change slot sizes in the future.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16150

commit b53aada8da9615b4818da3d87dd92a5f2aea89b8
  Author:     Matt Valentine-House <matt@eightbitraptor.com>
  AuthorDate: 2026-02-11 21:12:20 +0900
  Commit:     Matt Valentine-House <matt@eightbitraptor.com>
  CommitDate: 2026-02-13 23:29:14 +0900

    We can't actually hardcode these

    because BASE_SLOT_SIZE changes on 32 bit, and when debug/devel symbols
    are added

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16150

commit 20d85bbe9b0234c83d64dc1fc853e92cc80a2672
  Author:     Matt Valentine-House <matt@eightbitraptor.com>
  AuthorDate: 2026-02-06 08:23:34 +0900
  Commit:     Matt Valentine-House <matt@eightbitraptor.com>
  CommitDate: 2026-02-13 23:29:14 +0900

    Make sure we clear the bits when adding a new page

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16150

commit 1b65282961de25380d4c6e34d249136d0ea1fa5c
  Author:     Matt Valentine-House <matt@eightbitraptor.com>
  AuthorDate: 2026-02-04 04:39:48 +0900
  Commit:     Matt Valentine-House <matt@eightbitraptor.com>
  CommitDate: 2026-02-13 23:29:14 +0900

    hardcode and look up magic numbers

    instead of computing them on page add

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16150

commit 5c71c8c55bd71cff64e670097e4800d9e3d67ae4
  Author:     Matt Valentine-House <matt@eightbitraptor.com>
  AuthorDate: 2026-02-04 03:51:35 +0900
  Commit:     Matt Valentine-House <matt@eightbitraptor.com>
  CommitDate: 2026-02-13 23:29:14 +0900

    gc: implement slot-based bitmap indexing with division magic

    Replace the BASE_SLOT_SIZE-granularity bitmap scheme with slot-based
    indexing where each bit represents one slot regardless of size.

    Key changes:
    - Add slot_div_magic field to heap_page for fast division
    - Use Go-inspired formula: slot_index = (offset * div_magic) >> 32
    - Update all bitmap iteration to use one-bit-per-slot scheme
    - Remove slot_bits_mask from rb_heap_t (no longer needed)

    This enables arbitrary slot sizes (not just power-of-two multiples of
    BASE_SLOT_SIZE) by decoupling bitmap indexing from slot size.

    Functions updated:
    - gc_sweep_plane/gc_sweep_page
    - rgengc_rememberset_mark/rgengc_rememberset_mark_plane
    - gc_marks_wb_unprotected_objects/gc_marks_wb_unprotected_objects_plane
    - gc_compact_plane/gc_compact_page
    - invalidate_moved_plane/invalidate_moved_page
    - RVALUE_AGE_GET/RVALUE_AGE_SET_BITMAP

    Inspired by Go runtime's mbitmap.go divideByElemSize().

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16150

commit c9a49411dcfa6ac42d15ce33858207cb4b11025e
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-02-13 20:04:08 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-02-13 21:19:52 +0900

    Dir.scan: fallback to `lstat` when encountering DT_UNKNOWN

    This was part of the spec accepted in [Feature #17001] but that
    I forgot to include in the initial implementation.

    to ensure coverage, we always go though the fallback path in debug
    mode.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16170

commit 72beb17df04b0a2915d880bcabd814351d3c5297
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-13 18:05:35 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-02-13 18:41:55 +0900

    spec/mspec/tool/wrap_with_guard.rb 'ruby_version_is ""..."4.1"' spec/ruby/library/net-ftp/**/*.rb

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16169

commit aa2dd36131b22221be37a7925eb5c30545020668
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-13 17:52:23 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-02-13 18:41:55 +0900

    Removed net-pop

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16169

commit 22408088ff37fd6e2c8a27d3a1af03ef78e440fd
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-13 17:51:57 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-02-13 18:41:55 +0900

    Removed net-ftp

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16169

commit 13d14c6a9cbb7b9dca7e06b8ccd10bf4c47520bb
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-12 18:22:37 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-02-13 16:01:30 +0900

    Freeze `File.ftype` results

    It is unlikely to modify these result strings.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16166

commit 74c066a711972ba0927d980ce0010ec68c77e74e
  Author:     Luis J. Gonzalez <lgonzalez@sonatype.com>
  AuthorDate: 2026-01-27 04:39:00 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-13 15:53:50 +0900

    [ruby/rubygems] Add support for custom error response from external registries

    https://github.com/ruby/rubygems/commit/b021dde989

commit f94f28481b8450c0dfa18304be420fd969321b7e
  Author:     Garen J. Torikian <gjtorikian@users.noreply.github.com>
  AuthorDate: 2025-02-21 23:00:24 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-13 15:28:15 +0900

    [ruby/rubygems] remove outdated rubies

    https://github.com/ruby/rubygems/commit/98a50203cb

commit e0ab4157877c737b775610a7d885de28bed577ef
  Author:     Garen J. Torikian <gjtorikian@users.noreply.github.com>
  AuthorDate: 2025-02-09 06:17:50 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-13 15:28:14 +0900

    [ruby/rubygems] update template dependencies

    https://github.com/ruby/rubygems/commit/a7f52d6b02

commit fe25c2cbacf66dfd75790042b02d2bde51092936
  Author:     Ian Ker-Seymer <ian.kerseymer@shopify.com>
  AuthorDate: 2024-05-31 12:30:19 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-13 15:28:14 +0900

    [ruby/rubygems] Remove hard coded constant

    https://github.com/ruby/rubygems/commit/da14b90859

commit 211c17dcac82fec630bd6e57d362abbf6f281eae
  Author:     Ian Ker-Seymer <ian.kerseymer@shopify.com>
  AuthorDate: 2024-05-31 12:22:16 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-13 15:28:13 +0900

    [ruby/rubygems] Support precompiled rust gems out of the box

    https://github.com/ruby/rubygems/commit/5d3fbf0280

commit e785e466daab8c85d8e6cdfb05fa43c488e74db2
  Author:     Ian Ker-Seymer <ian.kerseymer@shopify.com>
  AuthorDate: 2024-05-31 12:03:08 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-13 15:28:13 +0900

    [ruby/rubygems] Improve testing config

    https://github.com/ruby/rubygems/commit/92e28403c3

commit c0d4f3e92dbfd7744b12c1f0fbb11fcee3ef1313
  Author:     Ian Ker-Seymer <ian.kerseymer@shopify.com>
  AuthorDate: 2024-05-31 11:34:00 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-13 15:28:12 +0900

    [ruby/rubygems] Default to using rb_sys for Cargo gem builds

    https://github.com/ruby/rubygems/commit/fb3f1febcf

commit 54ffff05f9f5422b018ee64028f808a8d2bda011
  Author:     Ian Ker-Seymer <ian.kerseymer@shopify.com>
  AuthorDate: 2024-05-31 11:33:12 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-13 15:28:12 +0900

    [ruby/rubygems] Include debug symbols by default in release builds for rust gems

    https://github.com/ruby/rubygems/commit/26e419f157

commit 27204dc8ccd028d4c670be572d2c70abf41f1ce2
  Author:     Ian Ker-Seymer <hello@ianks.com>
  AuthorDate: 2024-04-25 11:52:52 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-13 15:28:11 +0900

    [ruby/rubygems] [rust gem] Make cargo test work by default

    https://github.com/ruby/rubygems/commit/9420974db7

commit 5d40a6d5875cd740912e115eb6cfa869bb9c875f
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-01-26 15:31:35 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-13 15:19:28 +0900

    [ruby/rubygems] bin/rubocop -a --only Style/HashSyntax

    https://github.com/ruby/rubygems/commit/00db7f4522

commit 7e20c950933821dc1ee51f0f1d5d41706206ea24
  Author:     Abdelkader Boudih <terminale@gmail.com>
  AuthorDate: 2026-01-05 18:15:31 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-13 15:19:27 +0900

    [ruby/rubygems] fix(bundler): only preload git sources for requested groups

    Skip fetching git sources for excluded groups (--without). This is
    important for production builds where development git dependencies
    may be private repos without access, or should not be included in
    Docker images.

    https://github.com/ruby/rubygems/commit/d034ee10bb

commit 00440871dbe648cf7f8e2ebc2f01d3b1e0024cd6
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-13 13:53:57 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-13 14:29:05 +0900

    [ruby/rubygems] Relax gem name validation to warn on capital letters

    https://github.com/ruby/rubygems/commit/26dab848c5

commit e064d0d92518209329297cb756f22a2287efd25a
  Author:     OKURA Masafumi <masafumi.o1988@gmail.com>
  AuthorDate: 2022-03-27 22:26:09 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-13 14:29:04 +0900

    [ruby/rubygems] Raise error when gem contains capital letters

    The problem is described in https://github.com/rubygems/rubygems/issues/5431
    The guide ( https://guides.rubygems.org/name-your-gem/ ) says
    > DON’T USE UPPERCASE LETTERS
    so `bundle gem` command should respect it.

    https://github.com/ruby/rubygems/commit/ea1b1e2209

commit 3dc8ce28b017389eaa3caf0e79823b5330616f13
  Author:     copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
  AuthorDate: 2026-01-26 17:21:43 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-13 12:09:16 +0900

    [ruby/rubygems] Add test for bundle help greet command

    https://github.com/ruby/rubygems/commit/602b0cecb8

    Co-authored-by: hsbt <12301+hsbt@users.noreply.github.com>

commit 5d39c1a41f6a86f4cbab325a6ba7bcdc6aadc831
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-01-26 17:01:07 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-13 12:09:16 +0900

    [ruby/rubygems] Add support for help flag in plugin commands

    https://github.com/ruby/rubygems/commit/b8d45956d0

commit 6dbece090f74345c404b644445563d900cabb147
  Author:     Burdette Lamar <BurdetteLamar@Yahoo.com>
  AuthorDate: 2026-02-13 11:45:42 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-13 11:46:09 +0900

    [ruby/stringio] [DOC] Japanese for multi-byte characters
    (https://github.com/ruby/stringio/pull/201)

    https://github.com/ruby/stringio/commit/26d8f60053

commit d1535862bc1a66c783ce8d8558619b8c853ea420
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-13 10:32:49 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-02-13 11:22:20 +0900

    Skip shipit benchmark because sassc is not working with artifact under the ext directory.

    https://github.com/ruby/ruby/actions/runs/21970480259/job/63470652855

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16164

commit be8f647bdab59d16554900c16c101e453863918d
  Author:     Nery Campusano <nery.campusano@shopify.com>
  AuthorDate: 2026-02-13 06:35:26 +0900
  Commit:     Koichi Sasada <ko1@atdot.net>
  CommitDate: 2026-02-13 11:01:50 +0900

    [Bug #21551] changing the exception to be isolationerror rather than argument error

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16163

commit 2233822f3fb6583df4740dd88feaa337f49f05a6
  Author:     copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
  AuthorDate: 2026-01-09 13:03:42 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-13 10:00:01 +0900

    [ruby/rubygems] Add assertion for install_extension_in_lib default value in test_initialize

    https://github.com/ruby/rubygems/commit/cf8c9ee82b

    Co-authored-by: hsbt <12301+hsbt@users.noreply.github.com>

commit 7a88a9085d15bed53aff722657d8a0bc955dd042
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-01-09 12:30:13 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-13 10:00:00 +0900

    [ruby/rubygems] Make DEFAULT_INSTALL_EXTENSION_IN_LIB false by default to stop installing extensions into lib directory

    https://github.com/ruby/rubygems/commit/1614b036f7

commit a88475d6cb6c6a917b56be496cb83733cadd1d27
  Author:     Prajjwal Singh <sin@prajjwal.com>
  AuthorDate: 2026-02-12 07:28:09 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-02-13 09:46:09 +0900

    Report all missing modular GC exports before exiting

    Make `ruby_modular_gc_init()` print all symbol import errors instead of
    bailing on the first one. That way, GC authors don't have to fix one
    symbol at a time.

    Also accumulates and prints the total error count across all imports.

    Eg.

    On a sample GC ripped from the built-in GC implementation, renamed to
    "testgc", with the symbols `rb_gc_impl_gc_enable` and
    `rb_gc_impl_gc_disable` removed:

    **Before:**

    ```
    λ batify build → 74a4e2e66d → ~/.rubies/modgc/bin/ruby
    ruby_modular_gc_init: rb_gc_impl_gc_enable function not exported by library /Users/prajjwal/.rubies/modgc/lib/ruby/gc/librubygc.testgc.bundle
    ```

    **After:**

    ```
    λ batify build → master → ~/.rubies/modgc/bin/ruby
    ruby_modular_gc_init: rb_gc_impl_gc_enable function not exported by library /Users/prajjwal/.rubies/modgc/lib/ruby/gc/librubygc.testgc.bundle
    ruby_modular_gc_init: rb_gc_impl_gc_disable function not exported by library /Users/prajjwal/.rubies/modgc/lib/ruby/gc/librubygc.testgc.bundle
    ruby_modular_gc_init: found 2 missing exports in library /Users/prajjwal/.rubies/modgc/lib/ruby/gc/librubygc.testgc.bundle
    ```

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16161

commit 98269b6d64f26d1e8f22f3d8fddd30393f009e17
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-13 08:40:46 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-02-13 08:40:46 +0900

    [Feature #21796] unpack variant `^` that returns the final offset (#15647)

    [Feature #21796] unpack variant `^` that returns the current offset

  Notes:
    Merged-By: tenderlove <aaron.patterson@gmail.com>

commit f0ff0df584b75b2588952e516d16ff8f134f9832
  Author:     Samuel Williams <samuel.williams@oriontransfer.co.nz>
  AuthorDate: 2026-02-13 08:21:59 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-02-13 08:21:59 +0900

    Introduce suport for `autoload_relative`. (#16148)

  Notes:
    Merged-By: ioquatix <samuel@codeotaku.com>

commit c61f52a012f0a390a869db4825143187ea468d21
  Author:     Aaron Patterson <tenderlove@ruby-lang.org>
  AuthorDate: 2026-02-13 08:11:39 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-02-13 08:11:39 +0900

    [Feature #21785] Add LEB128 again (#16123)

    * Revert "Revert pack/unpack support for LEB128"

    This reverts commit 77c3a9e447ec477be39e00072e1ce3348d0f4533.

    * Update specs for LEB128

  Notes:
    Merged-By: tenderlove <aaron.patterson@gmail.com>

commit d8b8a95af9d6aab1e8da2b6f1808bc3ffd406889
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2025-12-13 14:35:58 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-02-13 04:35:18 +0900

    Make Monitor a core class

    [Feature #21788]

    It allows monitor to access internal routines and remove some overhead.

    Before:

    ```
    ruby 4.0.0dev (2025-12-13T04:52:13Z master 71dd272506) +YJIT +PRISM [arm64-darwin25]
    Warming up --------------------------------------
                   Mutex     2.111M i/100ms
                 Monitor     1.736M i/100ms
    Calculating -------------------------------------
                   Mutex     25.050M (± 0.4%) i/s   (39.92 ns/i) -    126.631M in   5.055208s
                 Monitor     19.809M (± 0.1%) i/s   (50.48 ns/i) -    100.672M in   5.082015s
    ```

    After:

    ```
    ruby 4.0.0dev (2025-12-13T06:49:18Z core-monitor 6fabf389fd) +YJIT +PRISM [arm64-darwin25]
    Warming up --------------------------------------
                   Mutex     2.144M i/100ms
                 Monitor     1.859M i/100ms
    Calculating -------------------------------------
                   Mutex     24.771M (± 0.4%) i/s   (40.37 ns/i) -    124.342M in   5.019716s
                 Monitor     23.722M (± 0.4%) i/s   (42.15 ns/i) -    118.998M in   5.016361s
    ```

    Bench:

    ```ruby
    require 'bundler/inline'

    gemfile do
      gem "benchmark-ips"
    end

    mutex = Mutex.new
    require "monitor"
    monitor = Monitor.new

    Benchmark.ips do |x|
      x.report("Mutex") { mutex.synchronize { } }
      x.report("Monitor") { monitor.synchronize { } }
    end
    ```

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15538

commit f33073a6cb8e6800309de815a1acce3322401bd1
  Author:     Anthony Panozzo <panozzaj@gmail.com>
  AuthorDate: 2026-01-18 05:19:58 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-13 02:06:39 +0900

    [ruby/rubygems] Fix Gem.clear_paths to reset cache_home and data_home

    These memoized instance variables were not being cleared, causing
    test isolation issues when HOME environment variable changes.

    https://github.com/ruby/rubygems/commit/a8b3e0bca0

commit 104c8be99cac15810456577ca14f9c2887c1c5d7
  Author:     Anthony Panozzo <panozzaj@gmail.com>
  AuthorDate: 2026-01-08 03:04:57 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-13 02:06:38 +0900

    [ruby/rubygems] Fix global_cache_spec to work with system RubyGems

    When running Bundler tests against system RubyGems (which doesn't have
    Gem.global_gem_cache_path), the test needs to use the fallback cache
    location (~/.bundle/cache/gems/) that Bundler uses in that case.

    https://github.com/ruby/rubygems/commit/a6fc1d862b

commit e59dd8fe0536e630ab0fb053212f80b34c2d3099
  Author:     Anthony Panozzo <panozzaj@gmail.com>
  AuthorDate: 2026-01-07 00:47:41 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-13 02:06:38 +0900

    [ruby/rubygems] Update global cache test to use XDG cache path

    The global gem cache is now at ~/.cache/gem/gems/ (XDG standard)
    instead of ~/.bundle/cache/gems/ to align with the shared
    RubyGems/Bundler cache implementation.

    https://github.com/ruby/rubygems/commit/8f845a72e7

commit a55874406cb1be41073c6353052bb88d44123217
  Author:     Anthony Panozzo <panozzaj@gmail.com>
  AuthorDate: 2026-01-06 03:04:14 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-13 02:06:37 +0900

    [ruby/rubygems] Add backwards compatibility for Bundler with older RubyGems

    Guard against missing Gem.global_gem_cache_path method when
    Bundler is used with an older RubyGems version that doesn't
    have the global cache feature. Falls back to the previous
    Bundler.user_cache location.

    Suggested by skipkayhil.

    https://github.com/ruby/rubygems/commit/a4bb3a20f8

commit 2475f67c575b74d733929aa72e779a1f923d187b
  Author:     Anthony Panozzo <panozzaj@gmail.com>
  AuthorDate: 2026-01-06 03:03:54 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-13 02:06:36 +0900

    [ruby/rubygems] Simplify global cache integration in RemoteFetcher#download

    Instead of checking global cache separately and copying after download,
    integrate global_gem_cache as the first option in cache_dir selection.
    This removes ~20 lines while achieving the same behavior.

    Suggested by Aaron Patterson.

    https://github.com/ruby/rubygems/commit/48ce0ecc32

commit 2101c1bf091c30379daf96d4426a59e84002cccf
  Author:     Anthony Panozzo <panozzaj@gmail.com>
  AuthorDate: 2026-01-02 09:21:42 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-13 02:06:36 +0900

    [ruby/rubygems] Add global gem cache shared by RubyGems and Bundler

    Add opt-in support for a global .gem file cache at ~/.cache/gem/gems
    (respects XDG_CACHE_HOME). This allows sharing cached gems across all
    Ruby installations and between RubyGems and Bundler.

    Enable via:
    - Environment: RUBYGEMS_GLOBAL_GEM_CACHE=true
    - gemrc: global_gem_cache: true
    - Bundler: bundle config set global_gem_cache true

    When enabled, RubyGems checks the global cache before downloading and
    copies downloaded gems to the cache. Bundler's existing global_gem_cache
    setting now uses the same unified cache location.

    https://github.com/ruby/rubygems/commit/417e10d6a1

commit fd9dd36dfc38fd818dba0558bacb7c2df9bcdb79
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-02-13 00:40:54 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-13 00:53:47 +0900

    [ruby/prism] Revert "Fix lexing for unterminated strings/heredocs etc."

    This reverts commit https://github.com/ruby/prism/commit/8f35e8ef255b.

    https://github.com/ruby/prism/commit/ed48f6dbfb

commit b5d2c6eeca28f4c640389b006896a8f3f59e7571
  Author:     Étienne Barrié <etienne.barrie@gmail.com>
  AuthorDate: 2026-02-12 23:12:48 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-12 23:52:57 +0900

    [ruby/json] Remove bignum warnings

    test/json/json_parser_test.rb:141: warning: Integer out of Float range
    lib/json/common.rb:353: warning: Float https://github.com/ruby/json/commit/123456789012... out of range

    https://github.com/ruby/json/commit/e7245b714a

commit 23ca981ea28ade997fadef8d0e9acf6aa52c60b5
  Author:     Étienne Barrié <etienne.barrie@gmail.com>
  AuthorDate: 2026-02-12 21:39:07 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-12 23:52:57 +0900

    [ruby/json] Remove unused method in JSONGeneratorTest

    https://github.com/ruby/json/commit/9602edb255

commit 3b5ee7488c8064cd3b1afc41bc43afdb907fdf16
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2025-12-20 21:48:10 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-02-12 23:52:42 +0900

    Dir.scan: return or yield children along with their type

    [Feature #21800]

    There are numerous ruby tools that need to recursively scan
    the project directory, such as Zeitwerk, rubocop, etc.

    All of them end up listing childs of a directory then for each child
    emit a `stat` call to check if it's a directory or not.

    This is common enough for a pattern that on most operating
    systems, `struct dirent` include a `dtype` member that allows to
    check the file type without issuing a any extra system calls.

    By yielding that type, we can make these routines twice as fast.

    ```
    $ hyperfine './miniruby --disable-all --yjit ../test.rb' 'OPT=1 ./miniruby --disable-all --yjit ../test.rb'
    Benchmark 1: ./miniruby --disable-all --yjit ../test.rb
      Time (mean ± σ):      1.428 s ±  0.062 s    [User: 0.342 s, System: 1.070 s]
      Range (min … max):    1.396 s …  1.601 s    10 runs

    Benchmark 2: OPT=1 ./miniruby --disable-all --yjit ../test.rb
      Time (mean ± σ):     673.8 ms ±   5.8 ms    [User: 146.0 ms, System: 527.3 ms]
      Range (min … max):   659.7 ms … 679.6 ms    10 runs

    Summary
      OPT=1 ./miniruby --disable-all --yjit ../test.rb ran
        2.12 ± 0.09 times faster than ./miniruby --disable-all --yjit ../test.rb
    ```

    ```ruby
    if ENV['OPT']
      def count_ruby_files
        count = 0
        queue = [File.expand_path(__dir__)]
        while dir = queue.pop
          Dir.scan(dir) do |name, type|
            next if name.start_with?(".")

            case type
            when :directory
              queue << File.join(dir, name)
            when :file
              count += 1 if name.end_with?(".rb")
            end
          end
        end
        count
      end
    else
      def count_ruby_files
        count = 0
        queue = [File.expand_path(__dir__)]
        while dir = queue.pop
          Dir.each_child(dir) do |name|
            next if name.start_with?(".")

            abspath = File.join(dir, name)
            if File.directory?(abspath)
              queue << abspath
            else
              count += 1 if name.end_with?(".rb")
            end
          end
        end
        count
      end
    end

    10.times do
      count_ruby_files
    end
    ```

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16153

commit e26bef571c3c916826fdd2f468dea7ca41369f8e
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-02-12 01:01:06 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-12 23:51:03 +0900

    [ruby/prism] Skip missing heredoc end in ripper translator

    Prism inserts these to make bookkeeping easier. Ripper does not do so.

    https://github.com/ruby/prism/commit/0a3b560218

commit ed113c556bb2bba97fa57f81f01400ccaf24473a
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-02-11 21:03:49 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-12 23:51:03 +0900

    [ruby/prism] Fix lexing for unterminated strings/heredocs etc.

    When we hit EOF and still have lex modes left, it means some content was unterminated.
    Heredocs specifically have logic that needs to happen when the body finished lexing.
    If we don't reset the mode back to how it was before, it will not continue lexing at the correct place.

    https://github.com/ruby/prism/commit/8f35e8ef25

commit dca8d9a6aa9c590a5707959d2c211a8273f7bc06
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-02-12 22:46:02 +0900
  Commit:     Kevin Newton <kddnewton@gmail.com>
  CommitDate: 2026-02-12 23:47:37 +0900

    Fix prism docs

    Ruby codes lives in lib/prism but c code is just in prism.
    This fixes docs on https://docs.ruby-lang.org/en/master/Prism.html

    Currently it doesn't list any methods that are defined in the C extension

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16146

commit 727b99f9c5dca7ee8d6529171d3e0754855f5fb7
  Author:     Étienne Barrié <etienne.barrie@gmail.com>
  AuthorDate: 2026-02-12 20:06:32 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-02-12 23:26:16 +0900

    Avoid loading source cgi/escape.rb with baseruby in enc/make_encmake.rb

    Only add the source lib directory to $LOAD_PATH when running with
    miniruby, which needs it for the standard library (erb, fileutils,
    etc.). When running with baseruby (detected via CROSS_COMPILING
    defined by fake.rb), its own stdlib is already available and adding
    the source lib causes warnings with -w due to loading both
    baseruby's cgi/escape.so and the source cgi/escape.rb via erb.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16158

commit c251767fbeacc95963a1c68feed976e8d492d3fc
  Author:     Matt Valentine-House <matt@eightbitraptor.com>
  AuthorDate: 2026-01-23 08:01:41 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-12 21:51:50 +0900

    [ruby/mmtk] Implement rb_gc_impl_during_gc_p

    https://github.com/ruby/mmtk/commit/039fa648fe

commit 70cf85af9915b0a1d3e7ab3459e9e7ab685e4de1
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-12 20:30:12 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-02-12 21:07:22 +0900

    Use Oregon mirror for cygwin download

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16157

commit c46fe31138d2a76c6121c444135f5cb97e782ec7
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-06 14:42:29 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-02-12 19:20:50 +0900

    [Bug #21862] Extract -D/-U options only for dtrace

    A workaround for GH-12563#issuecomment-3691590489.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16156

commit 2d159fbbb6e3a123654a6a60b12654eedfcefd9d
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-12 18:31:00 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-02-12 19:17:44 +0900

    Use EXIT_SUCCESS/EXIT_FAILURE instead of 0/1

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16155

commit b698c35590671e2b6f5920ca01c83ec4ebea610b
  Author:     Chris Hasiński <krzysztof.hasinski@gmail.com>
  AuthorDate: 2026-01-20 02:35:52 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-02-12 18:10:02 +0900

    Fix bundled gems warning for all subfeatures of hyphenated gems

    PR #15822 fixed the warning for direct hyphenated gem requires like
    `benchmark/ips` → `benchmark-ips`. However, hyphenated gems often
    provide multiple files under their namespace.

    For example, `benchmark-ips` provides:
    - benchmark/ips.rb
    - benchmark/timing.rb
    - benchmark/compare.rb

    When requiring `benchmark/timing`, the previous fix only checked for
    `benchmark-timing` gem (doesn't exist), not `benchmark-ips` which
    actually provides the file.

    This fix checks if ANY gem matching `{prefix}-*` is in the bundle
    specs, which covers all subfeatures provided by hyphenated gems.

    Reported in https://github.com/ruby/ruby/pull/15822#issuecomment-123456

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15908

commit d57b75297391af5b5d4f279eeeec084df37e9618
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-02-12 17:23:13 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-12 17:38:43 +0900

    [ruby/prism] Run ruby_parser versions for ruby 3.3

    It will not support newer ruby versions:
    https://github.com/seattlerb/ruby_parser?tab=readme-ov-file#notice

    This way we don't have to exclude new syntax.

    https://github.com/ruby/prism/commit/2ffb629d4e

commit 8f7c12830f431a92582a1a7831dee248820b27d9
  Author:     Nery Campusano <nery.campusano@shopify.com>
  AuthorDate: 2026-02-12 06:07:49 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-12 12:11:10 +0900

    [ruby/prettyprint] [Bug #21874] pretty print single line compatibility

    https://github.com/ruby/prettyprint/commit/b02076cc9c

commit a2a818169d7f1e47699af6a18603afafbdade4be
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-12 10:01:18 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-02-12 10:01:18 +0900

    [DOC] Stop expanding GitHub style references in ChangeLog

    For conciseness, omit URL expansion within ChangeLog files. Instead,
    RDoc now handles external commit references when converting ChangeLog
    to HTML.
    C.f., ruby/rdoc#1547.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16151

commit 9aa30b512f12ac3e298f7b971cdbd0e2cae8fc68
  Author:     John Hawthorn <john@hawthorn.email>
  AuthorDate: 2026-02-12 06:30:26 +0900
  Commit:     John Hawthorn <john@hawthorn.email>
  CommitDate: 2026-02-12 07:01:30 +0900

    Revert "Fix check in cc_is_active"

    This reverts commit 9d8af87528be09bd4f846592e4922228288e3a10.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16147

commit b746efc1fb46074ae659b4af0f9114aae9540e41
  Author:     John Hawthorn <john@hawthorn.email>
  AuthorDate: 2026-02-12 06:30:26 +0900
  Commit:     John Hawthorn <john@hawthorn.email>
  CommitDate: 2026-02-12 07:01:30 +0900

    Revert "Simplify iseq mark_and_move CC handling"

    This reverts commit b657d906ad0d38b2015955b69f5711588801bc7a.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16147

commit b657d906ad0d38b2015955b69f5711588801bc7a
  Author:     John Hawthorn <john@hawthorn.email>
  AuthorDate: 2026-02-11 06:08:39 +0900
  Commit:     John Hawthorn <john@hawthorn.email>
  CommitDate: 2026-02-12 02:00:47 +0900

    Simplify iseq mark_and_move CC handling

    We should special-case the empty CC cases in the parent, since we
    already had to check for that to avoid unnecessary writes hurting
    copy-on-write.

    This also changes reference updating to only update the CC reference
    rather than also checking for the CC being active. There's less
    advantage to removing a reference in that phase as the object still
    can't be freed until the next time mark is run, so we might as well just
    wait.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16140

commit 9d8af87528be09bd4f846592e4922228288e3a10
  Author:     John Hawthorn <john@hawthorn.email>
  AuthorDate: 2026-02-11 05:33:51 +0900
  Commit:     John Hawthorn <john@hawthorn.email>
  CommitDate: 2026-02-12 02:00:47 +0900

    Fix check in cc_is_active

    rb_vm_empty_cc_for_super() is always true, so this previously always
    returned false.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16140

commit 0c9bd7fd5cfd242fcc550bfc27644d1fc07793de
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-12 00:31:21 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-02-12 00:44:49 +0900

    [DOC] Fix a broken link YJIT

    Fix up GH-16119.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16145

commit b9203a93834aed48c9fddf31616b9146041f3465
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-02-07 02:38:32 +0900
  Commit:     Kevin Newton <kddnewton@gmail.com>
  CommitDate: 2026-02-12 00:40:48 +0900

    Remove prism pack parsing

    It was never adopted by ruby or other implementations.
    Ruby 4.1 may add new directives, so now is a good time to remove it.

    It was actually never properly documented (just shows `Prism::Pack` with no methods)
    so removing seems safe to do even now.

    Ref
    * https://github.com/ruby/prism/pull/3909
    * https://github.com/ruby/prism/issues/3907

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16085

commit 59bfa2b5102440ddc7bbcfa94f76024a7ce2e66b
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-12 00:19:27 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-12 00:39:33 +0900

    [ruby/stringio] Use raw FL macros over using RBASIC directly

    https://github.com/ruby/stringio/commit/d6dd409b74

commit 74a4e2e66d14fed7d6ade09345a54ed14bc106cc
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-11 22:09:26 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-02-11 22:09:26 +0900

    [Bug #21851] Divide as double if accurate

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16144

commit e7f1746d55b1e4783012006c13d71c4d067fce00
  Author:     Jeremy Evans <code@jeremyevans.net>
  AuthorDate: 2026-02-11 00:11:09 +0900
  Commit:     Benoit Daloze <eregontp@gmail.com>
  CommitDate: 2026-02-11 21:42:44 +0900

    [DOC] Update documentation for RB_{SCAN_ARGS,PASS}_KEYWORDS

    When using RB_SCAN_ARGS_KEYWORDS or RB_PASS_KEYWORDS, the final
    argument must be a hash.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16133

commit 30b1e5254301bf6dc935c530242161ff12950abd
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-02-11 02:28:18 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-11 18:47:30 +0900

    [ruby/prism] Remove unneeded exit conditions for `parse_stream`

    As I understand it, the code operates line-by-line. When finding `__END__`, it has to decide if it is
    the end marker or just appears as part of of a multi-line literal (see tests).

    For a future PR I plan to make, `lex_modes` may be empty after parsing finished, even if it was syntax invalid.
    Currently there will _always_ be errors when lex modes are not popped. So these extra checks are redundant.

    Basically, if we found `__END__` on a line by itself and there are syntax errors, it's impossible to be the end marker.

    https://github.com/ruby/prism/commit/8b63780a9d

commit f38ebb911e93e2bcba7a789ac5136327886d037b
  Author:     John Hawthorn <john@hawthorn.email>
  AuthorDate: 2025-12-19 07:50:14 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-11 15:03:57 +0900

    [ruby/delegate] No need for placeholder with leading underscore

    https://github.com/ruby/delegate/commit/39d2c9aa00

    Co-authored-by: Jean Boussier <jean.boussier@gmail.com>

commit 98474967b9c858ae2de9d6371303cddef167c6df
  Author:     John Hawthorn <john@hawthorn.email>
  AuthorDate: 2025-12-19 04:39:22 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-11 15:03:57 +0900

    [ruby/delegate] Use alias_method for invalid names

    This allows using the same code for both "specially named" and regular
    methods. This uses :__delegate as the name, which may be visible to
    users in backtraces for these methods.

    https://github.com/ruby/delegate/commit/82125cd687

    Co-authored-by: Luke Gruber <luke.gruber@shopify.com>

commit c272297e8a9f2b8034739b915707910b4e568479
  Author:     Max Bernstein <rubybugs@bernsteinbear.com>
  AuthorDate: 2026-02-11 03:47:52 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-02-11 03:47:52 +0900

    ZJIT: Use worklist algorithm for type inference (#16122)

    ## Summary
    - Replace the RPO fixed-point iteration in `infer_types` with a worklist-based approach
    - Instead of re-scanning every reachable block on each iteration, only re-process blocks whose incoming types actually changed
    - Add `BitSet::remove` helper for worklist membership tracking

    ## Benchmark
    On lobsters (release+stats build, 10 iterations):

    | Stat | Branch | Master | Delta |
    |------|--------|--------|-------|
    | compile_time | 1,604ms | 1,808ms | -204ms (-11.3%) |
    | Avg iter time | 766ms | 807ms | -41ms (-5.1%) |

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit 09ae95332f34791c68c841f8ad41b3f3ff9e8609
  Author:     Randy Stauner <randy@r4s6.net>
  AuthorDate: 2026-02-11 02:48:17 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-02-11 02:48:17 +0900

    ZJIT: Avoid runtime exceptions from RubyVM::ZJIT.stats_string (#16134)

    Before this it would raise if zjit wasn't enabled
    and raise a different exception if zjit was but extended stats were
    not (_some_ stats are available).

  Notes:
    Merged-By: k0kubun <takashikkbn@gmail.com>

commit acacbec35943a1fd3dd58af54d78fb878d80aae4
  Author:     Takashi Kokubun <takashikkbn@gmail.com>
  AuthorDate: 2026-02-11 02:32:37 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-02-11 02:32:37 +0900

    ZJIT: Move JIT code tests from test_zjit.rb to Rust (#16130)

  Notes:
    Merged-By: k0kubun <takashikkbn@gmail.com>

commit 1a3ba1b6dd202ffe27d5adfc63e767684b559921
  Author:     Benoit Daloze <eregontp@gmail.com>
  AuthorDate: 2026-02-11 00:18:50 +0900
  Commit:     Benoit Daloze <eregontp@gmail.com>
  CommitDate: 2026-02-11 00:51:04 +0900

    Use a ruby_bug guard since this bug fix will likely be backported

    * And it should be tested on current versions of other Ruby implementations.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16132

commit 49f44b1ddd0c0da2cb734d91a441c3bbaf11ecf0
  Author:     Mike Dalessio <mike@37signals.com>
  AuthorDate: 2026-02-10 23:21:22 +0900
  Commit:     Benoit Daloze <eregontp@gmail.com>
  CommitDate: 2026-02-11 00:51:04 +0900

    Add ruby specs for UnboundMethod#== with included/extended modules [Bug #21873]

    https://bugs.ruby-lang.org/issues/21873

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16132

commit f486ee340289b779654fe2d6c1de5a348fd76d86
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-10 08:17:06 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-02-10 20:07:47 +0900

    [Feature #21872] Search script from $PATH only if no separator

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16131

commit 1ea75b711f9c64e32b9bc21047a5c1ce6ac0b9ae
  Author:     git[bot] <svn-admin@ruby-lang.org>
  AuthorDate: 2026-02-10 16:09:10 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-10 16:09:10 +0900

    Update bundled gems list as of 2026-02-09

commit 2967f98f305b95e7c910facd2d9b3381bd0296a8
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-02-10 12:50:33 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-02-10 12:50:33 +0900

    Use relative path in dependabot exclude-paths

commit 8f82cbf8ffc3e22b489efa19c006789f90bc0046
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-02-10 11:51:04 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-02-10 12:49:05 +0900

    Exclude gc/mmtk in dependabot

    Dependabot runs upstream in the ruby/mmtk repository so it should not be
    ran here.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16126

commit 1fcabc481a14a49167ea7fbed588f87e59c801bb
  Author:     Burdette Lamar <BurdetteLamar@Yahoo.com>
  AuthorDate: 2026-02-10 11:55:35 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-02-10 11:55:35 +0900

    [DOC] Fix links in doc guide

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16115

    Merged-By: peterzhu2118 <peter@peterzhu.ca>

commit 752c88bab3239e9cd52e5a56a55fc10d3a464b82
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-02-10 11:17:10 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-02-10 11:21:34 +0900

    [DOC] Fix hash style for Array#flatten

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16125

commit a4b28f14cc9983e90ee5273d83d03d0f2eea7de7
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-02-10 11:16:20 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-02-10 11:21:34 +0900

    [DOC] Fix hash style for Array#flatten!

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16125

commit 7c13b21f47d87aae53e415f06b9a778c471318c5
  Author:     BurdetteLamar <burdettelamar@yahoo.com>
  AuthorDate: 2026-02-10 02:30:09 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-02-10 11:09:20 +0900

    [DOC] Improve link

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16119

commit f96d106d3a94661a4cc39c0285f78fe84ed2f891
  Author:     Max Bernstein <ruby@bernsteinbear.com>
  AuthorDate: 2026-02-10 08:55:32 +0900
  Commit:     Max Bernstein <tekknolagi@gmail.com>
  CommitDate: 2026-02-10 09:28:04 +0900

    Don't use cexpr

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16099

commit 11c845efecc76735110e40d9b05ff5045f1ce925
  Author:     Max Bernstein <ruby@bernsteinbear.com>
  AuthorDate: 2026-02-07 11:43:23 +0900
  Commit:     Max Bernstein <tekknolagi@gmail.com>
  CommitDate: 2026-02-10 09:28:04 +0900

    ZJIT: Inline Primitives for Array#each

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16099

commit 98e6f5e4bc56b8b611d152a43500531478a6472d
  Author:     Max Bernstein <ruby@bernsteinbear.com>
  AuthorDate: 2026-02-07 07:45:58 +0900
  Commit:     Max Bernstein <tekknolagi@gmail.com>
  CommitDate: 2026-02-10 09:28:04 +0900

    Enable ZJIT jit hooks for with_jit builtins

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16099

commit f96f84837d5dfedaee9758141fd2006ffb03e96d
  Author:     Max Bernstein <ruby@bernsteinbear.com>
  AuthorDate: 2026-02-07 07:40:17 +0900
  Commit:     Max Bernstein <tekknolagi@gmail.com>
  CommitDate: 2026-02-10 09:28:04 +0900

    Replace ary_fetch_next with separate array iteration primitives

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16099

commit f43d294d58f96227b33b491fcbd347dd605d3c67
  Author:     Max Bernstein <ruby@bernsteinbear.com>
  AuthorDate: 2026-02-07 05:50:56 +0900
  Commit:     Max Bernstein <tekknolagi@gmail.com>
  CommitDate: 2026-02-10 09:28:04 +0900

    Add without_interrupts primitive attribute to skip interrupt checks

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16099

commit 836c1700104c305fa13cbc7b17d114705dd807b2
  Author:     Mike Dalessio <mike@37signals.com>
  AuthorDate: 2026-02-10 03:45:34 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-02-10 08:26:48 +0900

    Fix UnboundMethod#== for methods from included/extended modules

    Method#unbind clones the method entry, preserving its defined_class.
    For methods mixed in via include/extend, defined_class is an ICLASS,
    causing UnboundMethod#== to return false when comparing against the
    same method obtained via Module#instance_method.

    Resolve ICLASS defined_class in method_eq.

    Fixes [Bug #21873]

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16120

commit e0b757f63aa6e720af6200171b2f0841d4efe7ed
  Author:     Nozomi Hijikata <121233810+nozomemein@users.noreply.github.com>
  AuthorDate: 2026-02-10 07:34:59 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-02-10 07:34:59 +0900

    ZJIT: Compile getconstant insn (#16109)

    * ZJIT: Compile getconstant insn

    * ZJIT: add fixme comments for opt_getconstant_path

    * ZJIT: Address comments

    - Replace fixme with actionable todo comment
    - Fix type validation for GetConstant

  Notes:
    Merged-By: k0kubun <takashikkbn@gmail.com>

commit 9efe557da5e17fc860f40956192e9df2e6bd1e6c
  Author:     Max Bernstein <rubybugs@bernsteinbear.com>
  AuthorDate: 2026-02-10 06:40:25 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-02-10 06:40:25 +0900

    ZJIT: Drop has_blockiseq guard on local variable access (#16113)

    So `has_blockiseq` was masking two other bugs.

    First, that we had only a static EP escape check for an iseq. We need to check
    both that an iseq is not known to statically escape them *and that it has not
    escaped them before*. Only then can we use SSA locals. This popped up in a
    weird PP unit test that was reducible to the test cases added in the PR. So I
    fixed that.

    Second, that we didn't VM lock when code patching for EP escape. That showed up
    in the Ractor btests in my previous PRs #14600 and #15254 #15316, and I had no
    idea what was going on at the time, so I dropped it. But if we add this lock,
    like all the other invariant patching cases have, the problem goes away. Seems
    reasonable.

    Finally, we can use normal full SSA locals even in the presence of a blockiseq.
    We still reload all of them after each send-with-block, but we can in a later
    PR reduce that to just the locals that are (recursively) visibly written to.

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit 51d4c2c465e3ce708dddcd65d93e6e29225b454d
  Author:     Xavier Noria <fxn@hashref.com>
  AuthorDate: 2026-02-09 21:46:05 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-10 06:32:50 +0900

    [ruby/rubygems] Document gemspecs must be deterministic

    https://github.com/ruby/rubygems/commit/7cab5cd68f

commit 3d00e34ab1d533820d2cd8bc361549b336767c9c
  Author:     Max Bernstein <ruby@bernsteinbear.com>
  AuthorDate: 2026-02-06 03:53:08 +0900
  Commit:     Max Bernstein <tekknolagi@gmail.com>
  CommitDate: 2026-02-10 03:23:36 +0900

    ZJIT: Check for size >= expected in expandarray

    Turns out `a, b = [1, 2, 3, 4]` is perfectly valid and just assigns `a =
    1` and `b = 2` (and drops the rest). optcarrot relies on this. Allow it.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16079

commit be54efb40378314cf74515cfefcf3c318fdd0e5a
  Author:     Max Bernstein <ruby@bernsteinbear.com>
  AuthorDate: 2026-02-06 03:52:15 +0900
  Commit:     Max Bernstein <tekknolagi@gmail.com>
  CommitDate: 2026-02-10 03:23:36 +0900

    ZJIT: Add reason to GuardGreaterEq

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16079

commit 4d13aeb3caedbecab58e24c601ab8c907fac9800
  Author:     Max Bernstein <rubybugs@bernsteinbear.com>
  AuthorDate: 2026-02-10 02:52:35 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-02-10 02:52:35 +0900

    ZJIT: Make defined?(yield) in non-method local iseq emit const nil (#16063)

    No sense doing this in codegen; we can pull this up to the HIR level.

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit 21862be0afdd76d80875b4f98ce104113090c0c3
  Author:     Max Bernstein <rubybugs@bernsteinbear.com>
  AuthorDate: 2026-02-10 02:40:27 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-02-10 02:40:27 +0900

    ZJIT: Add mask_name to GuardXYZBitsSet (#16064)

    This makes HIR easier to debug.

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit 84c9822fefa442ef2fff174437a8bd723c8c658b
  Author:     Max Bernstein <ruby@bernsteinbear.com>
  AuthorDate: 2026-02-10 00:16:03 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-10 00:48:19 +0900

    Update disassembly snapshots for capstone 0.14.0

    Capstone 0.14.0 uses canonical ARM64 aliases in its disassembly output:
    - `orr x, xzr, #imm` is now shown as `mov x, #imm`
    - `.byte` sequences matching `udf` are now decoded as `udf #imm`

    These are cosmetic changes to the disassembly text only; the underlying
    machine code (verified by hex snapshots) is unchanged.

    Also update the root Cargo.lock which was missed by Dependabot.

    Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16073

commit cb37ef5b2adb01dfa1609df6b962ba798ca9ad72
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-02-10 00:36:18 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-10 00:36:51 +0900

    [ruby/prism] Improve node docs
    (https://github.com/ruby/prism/pull/3912)

    Currently I find them hard to follow because there are just so many methods.

    This groups them by topic instead so that the more unique methods appear first.
    I also added call-seqs because we have the type information, so why not.

    https://github.com/ruby/prism/commit/caf018ec50

commit 930b94640db86b781f26b9c9c9549a4ed7173c80
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-09 14:15:37 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-02-09 16:32:07 +0900

    Update clang for LTO

commit 35cb1fed58101b8917e99eaa9371ed1d32f219af
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-09 15:48:29 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-02-09 16:24:39 +0900

    Added clang-23

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16117

commit 1b342ad9b89a425b16102e81667256c2c2bff258
  Author:     eileencodes <eileencodes@gmail.com>
  AuthorDate: 2025-11-18 06:38:46 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-09 14:49:09 +0900

    [ruby/rubygems] Remove `verify_gz`

    This PR removes the `#verify_gz` method because it is redunant and
    unnecessary.

    Previously the `data.tar.gz` would get read twice for every file - once
    in `verify_gz` and once in `extract_files`. The `extract_files` method
    verifies the `data.tar.gz` when it reads it, and raises an error if
    unzipping it fails.

    The `verify_gz` code can be seen in some profiles as a hotspot -
    although not major - as it accounts for between 9% and 17% of time, but
    only when the installation thread doesn't have native extensions or
    plugins.

    https://github.com/ruby/rubygems/commit/737c82986c

commit 510ebbdf6e59db83337da66b62201816707db374
  Author:     BurdetteLamar <burdettelamar@yahoo.com>
  AuthorDate: 2026-02-07 03:06:34 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-09 09:09:04 +0900

    [ruby/rubygems] [DOC] Fix link in Bundler

    https://github.com/ruby/rubygems/commit/81af6f4e85

commit ddcf400fb5847e3305db6db91b2ff9c3f89c9192
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-06 18:05:26 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-09 09:08:11 +0900

    [ruby/rubygems] Do not create unnecessary directories

    The method `Spec::Path#vendored_gems` creates the directory containing
    the path.  It makes no sense to create a directory with the same name
    as its basename in the current working directory.

    https://github.com/ruby/rubygems/commit/725f4ff2f4

commit 696087d1ef12ad23adef34a03b6f3dc6122d80b5
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-06 17:56:30 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-09 09:08:11 +0900

    [ruby/rubygems] Revert "Cleaned up bundler .gem and .gemspec files in ensure block."

    This reverts commit https://github.com/ruby/rubygems/commit/dce4ef87bb70.

    https://github.com/ruby/rubygems/commit/3b62e468c3

commit 0069009d35cf6b9ed78cf4fb5e5ce46dae21080f
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-02-08 12:24:27 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-02-09 00:28:52 +0900

    Exclude test for MMTk

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16111

commit 40117ea04b7b5ff5a41f4d5ad4159692eca93bdd
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-02-08 11:49:23 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-02-09 00:28:52 +0900

    Use Object for ObjectSpace.dump test

    This test fails if BASE_SLOT_SIZE is 32 bytes because Strings occupy 40
    bytes. Objects are smaller and would be 40 bytes.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16111

commit cbf6e775ee180cc4db49289f0db774d489fb9a4c
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-02-07 18:30:35 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-02-08 20:47:40 +0900

    darray.h: use ruby_sized_xfree

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16100

commit 3e02e99e425ee1c2e4a7cee625eaea6ed1faf1c4
  Author:     John Hawthorn <john@hawthorn.email>
  AuthorDate: 2026-02-08 01:44:08 +0900
  Commit:     John Hawthorn <john@hawthorn.email>
  CommitDate: 2026-02-08 15:15:37 +0900

    Fix signal crash during keyword argument call

    64f508ade8 changed rb_threadptr_raise to call rb_exception_setup,
    which uses rb_scan_args with RB_SCAN_ARGS_PASS_CALLED_KEYWORDS.
    This checked rb_keyword_given_p(), which read the interrupted
    frame's keyword state rather than the signal raise arguments,
    causing a crash when a signal arrived during a keyword call.

    Revert rb_threadptr_raise to use rb_make_exception directly, and
    have thread_raise_m call rb_exception_setup where
    rb_keyword_given_p() reflects the correct frame.

    [Bug #21865]

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16103

commit bdb3b8640644aa11772e9f76307e4d35b1500f39
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-02-08 10:04:51 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-02-08 11:45:05 +0900

    Remove reserved field in imemo memo

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16107

commit fd089e3e95ebbded14c9a2d51fce376fbbbf289d
  Author:     John Hawthorn <john@hawthorn.email>
  AuthorDate: 2026-02-08 10:50:54 +0900
  Commit:     John Hawthorn <john@hawthorn.email>
  CommitDate: 2026-02-08 11:20:17 +0900

    Revert "Wake timer to create new SNT when needed for dedicated task (#16009)"

    This reverts commit 7b3370a5579956404d742a2e104d72e7c89480e4.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16110

commit d5af159556b63c97ee35199dd7c70b5127e58cb3
  Author:     BurdetteLamar <burdettelamar@yahoo.com>
  AuthorDate: 2026-02-08 04:38:19 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-08 04:44:23 +0900

    [ruby/json] [DOC] Another link fix

    https://github.com/ruby/json/commit/0bbcf80373

commit 2e398533e14915bb8c650975f784f2693171d39a
  Author:     BurdetteLamar <burdettelamar@yahoo.com>
  AuthorDate: 2026-02-08 03:46:36 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-08 04:44:23 +0900

    [ruby/json] [DOC] Fix links

    https://github.com/ruby/json/commit/672e26e3ee

commit 1f0fc3da7090977110d8d64d2ad69bfa3f5cc584
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-02-06 10:06:42 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-02-08 01:12:04 +0900

    Remove dead rb_darray_swap_remove

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16081

commit c9cb17fab28419350ca854bec69c74530b20076c
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-07 22:51:02 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-02-07 22:51:02 +0900

    Omit version check of Unicode headers

    These headers are stored in directories labeled with the current
    Unicode version, so no worry about headers for different versions
    being mixed together.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16102

commit f33076be41394b1ac613b010aaff8c79f7e437f4
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-05 17:37:46 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-02-07 21:18:25 +0900

    Clean rust target when rustc bumped up

    Fix:
    ```
    error[E0514]: found crate `jit` compiled by an incompatible version of rustc
    ```

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16074

commit 51e65c210ed63e3ec8005ab6d5098210b59a158e
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-06 20:20:50 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-02-07 21:18:25 +0900

    Get rid of repeated building load.o

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16074

commit 73fe5bc142496ec8194f17a41fecf21ef65112e7
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-07 19:50:24 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-02-07 19:52:27 +0900

    [DOC] Use rdoc-ref

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16101

commit 804cb80f431376f87027b30575fb3c23e1c2ae31
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-07 19:49:26 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-02-07 19:52:27 +0900

    [DOC] Extract repeated references

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16101

commit 9ab9813c721842656b061e47482c228ccfd9b115
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-07 18:58:32 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-02-07 19:52:27 +0900

    [DOC] Fix the combination of custom option and `-e`

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16101

commit cf997380c5909073d6349d20f0658cbc1dff28be
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-07 17:34:41 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-02-07 19:52:27 +0900

    [DOC] Fix internal links

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16101

commit a87ff5ff95aa144a751f19a30cb343dca7dddd87
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-07 17:16:32 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-02-07 19:52:27 +0900

    [DOC] The order of command line options

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16101

commit d066b9e01ccb2260fac8b2580c10e73335c7c7db
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-02-06 04:38:00 +0900
  Commit:     Benoit Daloze <eregontp@gmail.com>
  CommitDate: 2026-02-07 18:06:36 +0900

    Refactor type error to be more consistent

    [Bug #21864]

    Co-Authored-By:  Benoit Daloze <eregontp@gmail.com>

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16078

commit 96d00640978d78ede1f5b2b63e422cfd1e849891
  Author:     Jacob <jacob.denbeaux@shopify.com>
  AuthorDate: 2026-02-07 12:27:20 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-02-07 12:27:20 +0900

    ZJIT: Fix graphviz generation (#16053)

    Print to a file and fix a bug.

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit ff55280320efd350432e2862cc52e4d84f893936
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-02-06 08:31:18 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-02-07 08:35:59 +0900

    Remove useless reserved field in vm_throw_data

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16080

commit a81e558837208a474ab941b12e697e0e9743e7eb
  Author:     BurdetteLamar <burdettelamar@yahoo.com>
  AuthorDate: 2026-02-07 04:55:01 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-07 08:35:46 +0900

    [ruby/stringio] [DOC] Fix links in StringIO

    https://github.com/ruby/stringio/commit/d4b27b8681

commit aff0581e4f122bf0a650b882eff4d7d082f21bc7
  Author:     BurdetteLamar <burdettelamar@yahoo.com>
  AuthorDate: 2026-02-07 06:07:59 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-02-07 08:35:41 +0900

    [DOC] Fix link in Time

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16098

commit f8eed5846926508451fe274dff09137769fa2a35
  Author:     BurdetteLamar <burdettelamar@yahoo.com>
  AuthorDate: 2026-02-07 04:39:38 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-02-07 08:35:02 +0900

    [DOC] Fix links in String

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16095

commit 474dd925832995e959cd87ccdbc1445679162772
  Author:     BurdetteLamar <burdettelamar@yahoo.com>
  AuthorDate: 2026-02-07 04:01:45 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-07 08:34:57 +0900

    [ruby/net-http] [DOC] Fix links in module Net

    https://github.com/ruby/net-http/commit/e95d812325

commit 900182e2656bf5a74f26e36c1be1108c6ba0f53d
  Author:     Burdette Lamar <BurdetteLamar@Yahoo.com>
  AuthorDate: 2026-02-07 08:33:35 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-07 08:34:00 +0900

    [ruby/strscan] [DOC] Fix links
    (https://github.com/ruby/strscan/pull/190)

    https://github.com/ruby/strscan/commit/f6033e5253

commit d79ce7e4e98f3f37e8afe106e739b71601b1a3e8
  Author:     BurdetteLamar <burdettelamar@yahoo.com>
  AuthorDate: 2026-02-07 03:14:56 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-07 08:32:33 +0900

    [ruby/error_highlight] [DOC] Fix link in ErrorHighlight

    https://github.com/ruby/error_highlight/commit/6096a05b2f

commit 954094a910c2dcf459caeb61e20143df0864f914
  Author:     Luke Gruber <luke.gruber@shopify.com>
  AuthorDate: 2026-02-07 06:08:57 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-02-07 06:08:57 +0900

    Take VM Lock during rb_gc_{un}register_address (#16097)

    The `Rice` C++ library uses an Anchor class that uses RAII to call
    `rb_gc_register_address`, `rb_gc_unregister_address` during init+destruct.
    It's unclear if this API is meant to be used at runtime like this, but we can
    at least lock the VM so it works safely across Ractors and doesn't mangle the
    `global_object_list` table.

  Notes:
    Merged-By: luke-gru <luke.gru@gmail.com>

commit 7b3370a5579956404d742a2e104d72e7c89480e4
  Author:     Luke Gruber <luke.gruber@shopify.com>
  AuthorDate: 2026-02-07 04:26:07 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-02-07 04:26:07 +0900

    Wake timer to create new SNT when needed for dedicated task (#16009)

    When removing a thread from `running_threads`, if we're on a shared
    native thread and we're running a dedicated task, we need to wake
    the timer thread so it can create a new SNT if necessary. We only
    do this if it's waiting forever without the 10ms quantum timeout
    for now, because max 10ms of wait is considered "good enough".
    In the future, perhaps we can force the timer thread to wake if this
    becomes an issue (`timer_thread_wakeup_force`).

    Fixes [Bug #21504]

  Notes:
    Merged-By: luke-gru <luke.gru@gmail.com>

commit 130c37d6e60b0b654b93cb09c37b18718e35c0b9
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-02-07 04:08:46 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-07 04:09:18 +0900

    [ruby/prism] More docs improvements
    (https://github.com/ruby/prism/pull/3910)

    * Update C call seqs

    * Prefixing them with self is unusual
    * Also use `.` instead of `::` to refer to class methods

    * Capitalize location in docs

    It allows it to be linked to in docs

    * Miscelanous other doc tweaks

    * Format code as code
    * Nodoc some missed methods
    * Fix method reference

    * Really try to nodoc ffi module

    The previous approach was wrong, to nodoc the class methods
    it must be specified at the module itself.
    As a result, the private methods like `dump_options` are also removed.

    * Remove some def-style comments

    They are mostly redundant with the method signature and don't look great when rendered.

    Still remaining on nodes. I will improve docs for them in a separate PR

    https://github.com/ruby/prism/commit/94e5525521

commit 545db49ba8063d8e9ed916e508c31523b78d5bb9
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-02-07 00:41:41 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-07 00:42:11 +0900

    [ruby/prism] Document fewer useless methods/classes
    (https://github.com/ruby/prism/pull/3908)

    * Add missing nodocs for FFI

    When generating docs in ruby/prism, this doesn't seem to matter.

    But on docs.ruby-lang.org these take over the actual documentation.

    * Nodoc various utility methods

    They don't tell much of a story and just pull attention away from actually unique methods

    * Nodoc some private functions/modules

    * Nodoc translator implementation details

    As well as some functionality from ripper that is nodoc in ruby

    * Stop documenting visitor implementation details

    These result in so many methods that are searchable
    and give no actual benefit.
    Toplevel docs are all you need to understand the usecase.

    https://github.com/ruby/prism/commit/0bd9a7d373

commit c40fbe388a28de6329392f97cdeb82f8a33ef7a0
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-03 11:06:09 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-02-06 20:44:20 +0900

    [DOC] Exclude `require` in RubyGems not to override the original

    Fix ruby/rdoc#1592.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16086

commit cda16da6e163c592b7150d2360c7a47f568ef873
  Author:     YO4 <ysno@ac.auone-net.jp>
  AuthorDate: 2026-02-04 22:38:06 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-02-06 20:19:14 +0900

    mswin: improve configure.bat syntax

    Introduce shellsplit.cmd command line parsing subroutine.
    Dealing with the limitations of cmd.exe's command-line parsing forces users to use workarounds, and corner cases still remain.
    By implementing our own command line splitting, we conceal the complexity and ensure maintainability.

    Makefile macro definition and opt-dir list now free from quoting.
    now can use like
    ```
    configure.bat --with-opt-dir=c:/src/zlib;c:/src/libffi CC="cl -std:c11" DEFS=-DOPT_THREADED_CODE=2
    ```

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16076

commit d858bed94ed801e788d128fad5e9eb20b6c9f975
  Author:     YO4 <ysno@ac.auone-net.jp>
  AuthorDate: 2026-02-04 23:08:27 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-02-06 20:19:14 +0900

    mswin: fix configure.bat

    Avoid being affected by the existing environment variable `target`
    Ensure `call set` works correctly even if the external command `set` exists
    Make `--disable-install-doc` work again
    Prevent `--with-static-linked-ext` from consuming subsequent arguments
    Make `--with-opt-dir` work correctly when specifying an existing directory

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16076

commit d9674b155253a3510c1141601a5c557a72fd1f51
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-02-05 16:31:50 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-02-06 19:36:56 +0900

    [DOC] Fix -r CLI example

    > <internal:/home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/rubygems/core_ext/kernel_require.rb>:139:in 'Kernel#require': cannot load such file -- CSV (LoadError)

    Maybe it currently works on a case-insensitive file system

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16072

commit 6e18331074f188ef79241e3f5155f225da4bd440
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-02-06 18:03:12 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-06 18:23:16 +0900

    [ruby/json] Stop using RB_ALLOCV

    While it's a very nice API, if the buffer is too big for the
    stack (> 1024B) the buffer object will be mark like a stack region
    which is slow and overkill for a char buffer.

    https://github.com/ruby/json/commit/4dcbcb84a2

commit 17caec3cab53f16ab4e338858560519082e5dd48
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-02-06 17:33:07 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-06 17:48:29 +0900

    [ruby/json] Cleanup function delecarations

    https://github.com/ruby/json/commit/7ddf3499d0

commit f841f9fc9459d033fa7fb18caaa6e1eb3ac7195d
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-06 16:54:19 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-06 17:30:22 +0900

    [ruby/rubygems] Print message when signing in with an existing API key

    https://github.com/ruby/rubygems/commit/b4a8adbb4d

commit 2d054ef64de31a3306fa9cbaea68cbb5aa0faf21
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-06 16:12:32 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-06 17:15:40 +0900

    [ruby/rubygems] Cleaned up bundler .gem and .gemspec files in ensure block.

    https://github.com/ruby/rubygems/commit/dce4ef87bb

commit fa9e63ada9c5e3ede4cf7eca15de5b5967247df7
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-03 15:07:48 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-02-06 16:26:30 +0900

    [DOC] Run make for rdoc-coverage and generating html

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16083

commit 08652f825410d0690831151decd2d84ea207f976
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-06 15:33:34 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-02-06 15:33:34 +0900

    Added instruction to use 'gem "cgi"' or Bundler

commit 26b81bed5050a1ed072cb6a6b10f0369bcdc8cf1
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-06 11:03:52 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-02-06 11:03:52 +0900

    Extend timeout for ci.rvm.jp

commit 728001caaef3435ffae184d84647bd7f29f0d4d9
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-05 20:40:10 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-02-06 07:19:59 +0900

    Set Gem::BUNDLED_GEMS::LIBDIR from Spec::Path realpath with symlink at macOS

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16075

commit 86dba8cfaeabb3b86df921da24b3243b9ce4ab2a
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-05 17:53:48 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-02-05 17:53:48 +0900

    Consolidate Dependabot github-actions updates

commit 9d374b93654f7daddea6a8e96d10e5fff9dbe112
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-05 17:06:02 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-02-05 17:08:14 +0900

    Monitor yjit and zjit cargo directories and group them as JIT group

commit b8a4d2d722041af5d2abef073ff38cfbe984f36c
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-02-05 16:29:14 +0900
  Commit:     Sutou Kouhei <kou@clear-code.com>
  CommitDate: 2026-02-05 16:41:36 +0900

    [DOC] Remove remaining csv docs

    csv is not kept in ruby/ruby anymore

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16071

commit eca5e5c59d474e0b5f0515885125ff874aa2b520
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-05 11:17:52 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-02-05 13:12:24 +0900

    Bypass the conversion of drive letter in `with_destdir`

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16051

commit 103517d97e8267985304ca66c7630c424a69f1e3
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-04 17:47:13 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-02-05 11:59:11 +0900

    Ensure the jobserver is usable

    If invalid, clear jobserver options from the environment variables.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16051

commit 8b46c20e740b5ebdf7aa7aaa6ca8ed11d6bb5568
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-03 15:27:57 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-02-05 11:26:39 +0900

    Split RBCONFIG recipe

    And make `ifchange` a pipeline; it works even on Windows now.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16051

commit ad0ac0ec2fd9bbbe1fc69cb9609a56571ca6d63f
  Author:     tompng <tomoyapenguin@gmail.com>
  AuthorDate: 2026-02-04 21:25:12 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-05 10:59:53 +0900

    [ruby/rubygems] Remove "##" from a comment to require

    In RDoc, comment that starts with "##" is a metaprogramming method definition.
    If it's not a metaprogramming method definition, "##" shouldn't be used.

    https://github.com/ruby/rubygems/commit/b1953a3a09

commit 10b6d543f98fc64b41eab9aceae57b498b093771
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-02-05 09:51:35 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-02-05 09:55:23 +0900

    [DOC] Fix hash style in Array#to_h

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16070

commit bc849a185a96c032448fed787034eb4503c0cc10
  Author:     Burdette Lamar <BurdetteLamar@Yahoo.com>
  AuthorDate: 2026-02-05 07:12:24 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-02-05 07:12:24 +0900

    [DOC] Fix links in Regexp (#16018)

  Notes:
    Merged-By: peterzhu2118 <peter@peterzhu.ca>

commit 48d2c7fd62342ec4f1d3b66768a537aea0968eda
  Author:     Burdette Lamar <BurdetteLamar@Yahoo.com>
  AuthorDate: 2026-02-05 07:08:08 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-02-05 07:08:08 +0900

    [DOC] Harmonize certain Module methods (#15804)

  Notes:
    Merged-By: peterzhu2118 <peter@peterzhu.ca>

commit 9167262940804951127b74aa3012c577a9b8ae09
  Author:     Max Bernstein <rubybugs@bernsteinbear.com>
  AuthorDate: 2026-02-05 03:04:01 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-02-05 03:04:01 +0900

    ZJIT: Upgrade self to HeapBasicObject after setinstancevariable (#16065)

    If self is an immediate, setinstancevariable would have raised.
    Therefore we can conclude that self must not be an immediate. This helps
    us match YJIT type upgrades (YJIT will upgrade to UnknownHeap or
    something similar).

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit 5571212fd363437b70772facf0c1d2281dc9a46a
  Author:     Max Bernstein <rubybugs@bernsteinbear.com>
  AuthorDate: 2026-02-05 00:42:26 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-02-05 00:42:26 +0900

    ZJIT: Remove specialized instructions (#16034)

    * ZJIT: Fix codegen for GuardSuperMethodEntry

    We need to register the VALUE in the generated code so that it is
    visible to the GC. This may be the cause of a crash in the test suite
    that Alan found.

    * ZJIT: Use LoadField+GuardBitEquals instead of GuardSuperMethodEntry

    We have modular instructions. Use them.

    * ZJIT: Use LoadField instead of GetBlockHandler

    We have modular instructions. Use them.

    * ZJIT: Remove unused HIR instructions

    We don't use GuardSuperMethodEntry, GuardShape, or GetBlockHandler
    anymore.

    * ZJIT: Replace GuardNotFrozen with LoadField+GuardNoBitsSet

    * ZJIT: Replace GuardNotShared with LoadField+GuardNoBitsSet

    * ZJIT: Remove unused HIR instructions

    * ZJIT: Remove comment

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit 540ea720e8fbe730d4b6afb68cefe6fb2cf7848e
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-02-04 22:52:44 +0900
  Commit:     Kevin Newton <kddnewton@gmail.com>
  CommitDate: 2026-02-05 00:00:07 +0900

    Add myself as a prism maintainer

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16062

commit 673c37d76ac2767b13a1ab7ba74b0ea8cda17c81
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-02-04 22:31:32 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-04 23:58:08 +0900

    [ruby/prism] Rewrite "version: nearest" to require no maintenance

    Currently I see myself not updating this when a new version is added.

    Instead, rewrite it to just work with new versions:
    * Try to set the version
    * If that doesn't succeed, check if it is lower
    * If it isn't lower, it must be higher

    We can then use `PM_OPTIONS_VERSION_LATEST` which doesn't need to change.

    Also added a very basic test.

    https://github.com/ruby/prism/commit/443e9b9959

commit 1258992bdff8818d3ce868e98ccc3496069d996d
  Author:     Giovanni Tirloni <gtirloni@tirloni.net>
  AuthorDate: 2026-01-28 03:04:30 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-04 18:50:27 +0900

    [ruby/rubygems] Fix gzip cache corruption when recovering from HTTP 416 responses

    When a Range request returns 416 (Range Not Satisfiable), the recovery
    path manually added an "Accept-Encoding: gzip" header before retrying.
    This bypasses Ruby's automatic gzip decompression mechanism.

    Ruby's Net::HTTP only sets decode_content=true (enabling automatic
    decompression) when Accept-Encoding is NOT present in the request
    headers. By manually setting this header, the decode_content flag
    remained false, causing gzip-compressed response bodies to be written
    directly to the compact index cache without decompression.

    This resulted in "ArgumentError: invalid byte sequence in UTF-8" errors
    when the corrupted cache was later read and parsed as text.

    The fix removes the explicit Accept-Encoding header, allowing Ruby's
    Net::HTTP to handle gzip compression transparently (as it does for all
    other requests). Ruby will still add Accept-Encoding: gzip automatically
    AND properly set decode_content=true for automatic decompression.

    Fixes https://github.com/ruby/rubygems/pull/9271

    https://github.com/ruby/rubygems/commit/b48b090e38

commit 9cc2242ee269fcb4d1fd10887a8270c59eb161fc
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-04 16:38:36 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-04 18:22:35 +0900

    [ruby/rubygems] bin/rake man:build

    https://github.com/ruby/rubygems/commit/5e95eba208

commit 395ad09c826db156a79bb763f16215bed68d1b7e
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-04 16:15:29 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-04 18:22:34 +0900

    [ruby/rubygems] Clarify local gem override docs to require git-sourced gems

    https://github.com/ruby/rubygems/commit/a4a5cdb12c

commit c3b6f2e9a2575ea5be0c49fb77ae051fe7981789
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-04 16:32:55 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-02-04 16:32:55 +0900

    Load `rubygems/platform.rb` after setting up the load path

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16059

commit 444a3609a5d6ad44e6a0289110384d7716e42115
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-03 19:12:48 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-02-04 16:28:22 +0900

    Fix the load path in building extensions and encodings

    Add `tool/lib` under the source directory instead of the source
    directory itself, as there is no library to be loaded.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16059

commit 03a17facfdd8c2bbcca5862fa98f51e9979b77ca
  Author:     copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
  AuthorDate: 2026-02-04 11:50:52 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-04 15:02:24 +0900

    [ruby/rubygems] Add test case for git sources with transitive dependencies

    https://github.com/ruby/rubygems/commit/00c8bb7bc5

    Co-authored-by: hsbt <12301+hsbt@users.noreply.github.com>

commit 0c2ded4a07e0ba0e4d2d9ab92d549135300d495b
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-04 10:51:06 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-04 15:02:23 +0900

    [ruby/rubygems] Require parent path source to contain matching specs before selecting it as replacement

    https://github.com/ruby/rubygems/commit/7c89d2588d

commit e6483d98907654d015ececd5de6a0079084f8f33
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-03 21:03:25 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-04 15:02:23 +0900

    [ruby/rubygems] Added failing example

    https://github.com/ruby/rubygems/commit/73735b503c

commit 779c3f928acd6d827b1d753ccb9e85c9e11e62bf
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-04 12:04:20 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-02-04 14:46:20 +0900

    Expand realpath to symlink when running with macOS

    Co-authored-by: Nobuyoshi Nakada <nobu@ruby-lang.org>

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16055

commit d26940e807844f9f64a964fbdc3ec6fb63998c58
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-04 14:02:17 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-02-04 14:40:49 +0900

    Revert "Comment out to disable ppc64le and s390x CI builds"

    This reverts commit e1655dad3a00a7b4026c653ff7c611811e7e34da.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16058

commit cb303ff4b82dca932cb7342e9f7fd337d69dc175
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-06 08:48:29 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-02-04 13:28:34 +0900

    [Bug #21669] Fix void value expression check for pattern-matching

    If the all `in` and `else` branches are void, the `case` is also void.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15498

commit baaf0ccb9c74d902d834c821c4d7e17e4bac4694
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-05 18:52:34 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-02-04 13:28:34 +0900

    [Bug #21669] Fix void value expression check for block

    A block containing a void statement that is not contained in a branch
    is also void.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15498

commit 35b95ec2e2c1b377cb884c706fd0836328e5a90f
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-05 19:18:58 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-02-04 13:28:33 +0900

    [Bug #21669] Add more void value expression check for `if`

    If the both branches are void, the `if`/`unless` is also void.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15498

commit 932ce048feb9f26bcd9e8dc93ada4d2a407ace1f
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-05 19:01:21 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-02-04 13:28:33 +0900

    [Bug #21669] Implement void value expression check for `case`/`when`

    If the all `when` and `else` branches are void, the `case` is also
    void.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15498

commit 4f360107387c47bfd82e7010b8eb7393575d4d76
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-05 18:54:43 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-02-04 13:28:33 +0900

    [Bug #21669] Fix void value expression check for `rescue`-else

    If `rescue`-else node is void, the `rescue`-body is also void.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15498

commit c8b2a453d0fe099064e095d165ce38ee8c3eef38
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-05 18:52:34 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-02-04 13:28:33 +0900

    [Bug #21669] Fix void value expression check for `rescue`

    If any `rescue` node is non-void, the enclosing block is also
    non-void.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15498

commit 995c80bcd8509f59374506c04b60d94128cc2699
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-05 18:52:02 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-02-04 13:28:32 +0900

    Make `rb_node_case2_t` and `rb_node_case3_t` aliases of rb_node_case_t

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15498

commit 2ba2950d20e82f82017a52da9b09fdf1291479a2
  Author:     Koichi Sasada <ko1@atdot.net>
  AuthorDate: 2026-02-03 17:37:05 +0900
  Commit:     Koichi Sasada <ko1@atdot.net>
  CommitDate: 2026-02-04 12:40:59 +0900

    show loadavg if the test fails

    to survey the following failure:

    ```
      1) Failure:
    TestFile#test_stat [/tmp/ruby/src/trunk-repeat20/test/ruby/test_file.rb:412]:
    Expected |1770056232.744032 - 1770056230.6465776| (2.097454309463501) to be <= 1.
    ```

    BTW I found that `test/ruby/test_file.rb:412` `assert_in_delta atime, stat.atime.to_f, delta`
    only fails (mtime, ctime doesn't fail on 100 days).

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16049

commit 2dc4e872e8bc6ee86ee734310970f66cc9dd51af
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-03 19:04:37 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-04 12:25:28 +0900

    [ruby/rubygems] Lock diff-lcs < 2.0

    https://github.com/ruby/rubygems/commit/23aecf4a86

commit 42c1d1dc8fa9ab6cb2b7f62745a02e683feef162
  Author:     Koichi Sasada <ko1@atdot.net>
  AuthorDate: 2026-02-04 12:09:48 +0900
  Commit:     Koichi Sasada <ko1@atdot.net>
  CommitDate: 2026-02-04 12:10:30 +0900

    add deps

commit c10b93cd5f04e1ae2fa34dd1bc3dc9e4de37a115
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-04 08:10:42 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-02-04 08:10:42 +0900

    tool: Support `$NO_COLOR` in `ifchange`

commit 3237be163c313af0b6626b209e55bdb0b33c9f0f
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-01-30 17:30:21 +0900
  Commit:     Kevin Newton <kddnewton@gmail.com>
  CommitDate: 2026-02-04 00:49:21 +0900

    [Bug #21669] Thoroughly implement void value expression check (prism)

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15999

commit 6a4e53f94ddc946b6116b250a2b20b78bef3f0ef
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-02-03 22:44:30 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-04 00:09:24 +0900

    [ruby/prism] Directly use `ruby_version` from `ruby/version.h`

    When I initially wrote this, I used `RUBY_VERSION` so it's easier to stub in tests
    But turns out that doesn't work in CRuby tests

    https://github.com/ruby/prism/commit/e30e2591de

commit ebef4dbae6cbbe636499c93d7ff0bf31dab88d18
  Author:     Benoit Daloze <eregontp@gmail.com>
  AuthorDate: 2026-01-30 04:48:08 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-04 00:09:23 +0900

    [ruby/prism] RB_GC_GUARD() the VALUE for RSTRING_PTR() to ensure the char* does not move

    * See https://github.com/ruby/prism/pull/3886#discussion_r2741579984.

    https://github.com/ruby/prism/commit/98603ce8cc

commit 4bf1cb087bc8ff065b6226037329d7464fa3e96c
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-02-03 20:10:01 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-03 21:33:30 +0900

    [ruby/prism] Better guard against syntax invalid code in ripper lex translator

    Closes https://github.com/ruby/prism/pull/3899

    Also better compatibility by only dropping
    the last token if it is actually EOF

    https://github.com/ruby/prism/commit/128ab52be9

commit cf22fe7f0857f0c980d9966047579b65c7798126
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-03 19:28:42 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-02-03 19:59:12 +0900

    Lock to install uutils-coreutils@0.5.0

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16050

commit f1201bcf1b6ff073f89e84bafe5040a5712dbbf5
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-03 17:27:47 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-03 18:18:09 +0900

    [ruby/rubygems] Update vendored resolv to 0.7.0

    https://github.com/ruby/rubygems/commit/844a05543b

commit 5ebccee59dc327ffb9e46a53cbe2ff853247fcd6
  Author:     Koichi Sasada <ko1@atdot.net>
  AuthorDate: 2026-02-03 16:49:04 +0900
  Commit:     Koichi Sasada <ko1@atdot.net>
  CommitDate: 2026-02-03 18:03:45 +0900

    check zeros

    raise when assert_linear_performance measures only zeros to check the following error:

    ```
      1) Error:
    TestRegexp#test_linear_performance:
    Test::Unit::ProxyError: nil can't be coerced into Integer
        /home/opc/ruby/src/master/test/ruby/test_regexp.rb:2301:in 'TestRegexp#test_linear_performance'
    ```

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16047

commit f045a820edcf3a198c03b4eaa9a849418e31d469
  Author:     Koichi Sasada <ko1@atdot.net>
  AuthorDate: 2026-02-03 17:09:56 +0900
  Commit:     Koichi Sasada <ko1@atdot.net>
  CommitDate: 2026-02-03 17:42:22 +0900

    try to extend timeout

    for the following failure:

    ```
          1) Timeout:
        TestResolvDNS#test_multiple_servers_with_timeout_and_truncated_tcp_fallback
    ```

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16048

commit 2a57e636ae79711d7b4b2dd8fd754fa98629ce49
  Author:     Koichi Sasada <ko1@atdot.net>
  AuthorDate: 2026-02-03 15:17:03 +0900
  Commit:     Koichi Sasada <ko1@atdot.net>
  CommitDate: 2026-02-03 17:25:10 +0900

    try to extend timeout for repeated refine test

    for the following failure:
    ```
        1) Error:
      TestRefinement#test_refining_module_repeatedly:
      Test::Unit::ProxyError: execution of Test::Unit::CoreAssertions#assert_in_out_err expired timeout (10 sec)
      pid 56455 exit 0
      | ok
      |

          /Users/runner/work/ruby/ruby/src/test/ruby/test_refinement.rb:2258:in 'TestRefinement#test_refining_module_repeatedly'
    ```

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16044

commit 8cb3663a54587fcb62242af11e0d96cccdf3ffed
  Author:     Koichi Sasada <ko1@atdot.net>
  AuthorDate: 2026-02-03 15:27:03 +0900
  Commit:     Koichi Sasada <ko1@atdot.net>
  CommitDate: 2026-02-03 17:24:45 +0900

    Try to send SEGV to show C bt

    for the following failure

    ```
        1) Error:
      TestClass#test_safe_multi_ractor_subclasses_list_mutation:
      Test::Unit::ProxyError: execution of Test::Unit::CoreAssertions#assert_separately expired timeout (10 sec)
      pid 814469 killed by SIGTERM (signal 15)
      |
          /tmp/ruby/src/trunk_gcc14/test/ruby/test_class.rb:922:in 'TestClass#test_safe_multi_ractor_subclasses_list_mutation'
    ```

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16045

commit 07a0b68a85be84fa11ad63e60faeec4e4fd02490
  Author:     Koichi Sasada <ko1@atdot.net>
  AuthorDate: 2026-02-03 15:02:16 +0900
  Commit:     Koichi Sasada <ko1@atdot.net>
  CommitDate: 2026-02-03 17:17:19 +0900

    apply timeout scale in wait_exception

    to avoid such case:
    ```
      1) Failure:
    TestProcess#test_wait_exception [/tmp/ruby/src/trunk-asserts-nopara/test/ruby/test_process.rb:1588]:
    [ruby-dev:49176] [Bug #11340]: 3.696015712 seconds to interrupt Process.wait.
    Expected 3.696015712 to be < 3.
    ```

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16042

commit 25422c0d0733f50367c5533c7c4b326426848528
  Author:     Koichi Sasada <ko1@atdot.net>
  AuthorDate: 2026-02-03 15:11:47 +0900
  Commit:     Koichi Sasada <ko1@atdot.net>
  CommitDate: 2026-02-03 17:11:22 +0900

    use SIGSEGV on ractor timeout

    to show C level backtrace for the following failure:

    ```
      1) Error:
    TestObjSpaceRactor#test_undefine_finalizer:
    Test::Unit::ProxyError: execution of Test::Unit::CoreAssertions#assert_separately expired timeout (10 sec)
    pid 861177 killed by SIGTERM (signal 15)
    |
        /tmp/ruby/src/trunk-yjit/test/objspace/test_ractor.rb:17:in 'TestObjSpaceRactor#test_undefine_finalizer'
    ```

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16043

commit 2f8ab8e4703936f650d8dfc0ef69c174b6062761
  Author:     Koichi Sasada <ko1@atdot.net>
  AuthorDate: 2026-02-03 14:54:51 +0900
  Commit:     Koichi Sasada <ko1@atdot.net>
  CommitDate: 2026-02-03 17:07:32 +0900

    filter TracePoint :line events by file

    in target_thread test to avoid such failure:

    ```
    1) Failure:
      TestSetTraceFunc#test_enable_target_thread [/tmp/ruby/src/trunk/test/ruby/test_settracefunc.rb:2595]:
      <[#<Thread:0x000078ca3d778460 run>,
       #<Thread:0x000078ca3d778460 run>,
       #<Thread:0x000078ca3d778460 run>]> expected but was
      <[#<Thread:0x000078ca3d778460 run>,
       #<Thread:0x000078ca3d778460 run>,
       #<Thread:0x000078ca3d778460 run>,
       #<Thread:0x000078ca3d778460 run>,
       #<Thread:0x000078ca3d778460 run>,
       #<Thread:0x000078ca3d778460 run>,
       #<Thread:0x000078ca3d778460 run>,
       #<Thread:0x000078ca3d778460 run>,
       #<Thread:0x000078ca3d778460 run>,
       #<Thread:0x000078ca3d778460 run>,
       #<Thread:0x000078ca3d778460 run>,
       #<Thread:0x000078ca3d778460 run>,
       #<Thread:0x000078ca3d778460 run>,
       #<Thread:0x000078ca3d778460 run>,
       #<Thread:0x000078ca3d778460 run>,
       #<Thread:0x000078ca3d778460 run>,
       #<Thread:0x000078ca3d778460 run>,
       #<Thread:0x000078ca3d778460 run>]>.
    ```

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16041

commit 3820b354f1cbfbdeb60818a96de7b25995c5c1ac
  Author:     copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
  AuthorDate: 2026-02-03 15:46:53 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-02-03 16:56:51 +0900

    Fix typo: wich → which in ractor.md

    Co-authored-by: hsbt <12301+hsbt@users.noreply.github.com>

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16046

commit c0eca60eba638aa6bcb91f1b7d1467d697eec81d
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-02-03 16:39:10 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-03 16:50:19 +0900

    [ruby/json] Remove codepaths under !RUBY_INTEGER_UNIFICATION

    This was for pre Ruby 2.4 support which we dropped a while ago.

    https://github.com/ruby/json/commit/b11ce01ca6

commit 112c86e2640f596a4b7eeca6ebbe8c9909dfec08
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-02-03 16:35:11 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-03 16:36:54 +0900

    [ruby/json] Release 2.18.1

    https://github.com/ruby/json/commit/6ec6e7baff

commit 41238ccd85301b7d287a137d2fd8a94687f45784
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-02-03 03:44:02 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-03 16:24:37 +0900

    [ruby/json] fbuffer_append_str: assume string

    https://github.com/ruby/json/commit/fff25c9f4b

commit 066332465b927cf2d2b05d0d77014d7e3f48d933
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-02-03 06:06:44 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-03 16:24:29 +0900

    [ruby/json] Ensure `Generator::State` is kept on the stack

    Fix: https://github.com/ruby/json/issues/929

    When calling `cState_partial_generate` from `mHash_to_json` or other
    `to_json` funcs, `VState` becomes unreachable very quickly, hence the
    compiler may optimize it out of the stack, and make it invisible to
    the GC stack scanning. This is particularly liekly given how aggressively
    we inline.

    Repro:

    ```ruby
    require 'json'

    test_data = {
      "flag" => true,
      "data" => 10000.times.map { [1.0] },
      :flag => false,
    }

    10.times do
      test_data.to_json
    end
    ```

    But in practice the cause was just that the issued warning calls
    Hash#inspect on a big hash, which triggers GC.

    So it can be triggered even more reliably with:

    ```ruby
    require 'json'

    module JSON
      module Common
        def self.on_mixed_keys_hash(...)
          GC.start
        end
      end
    end

    test_data = {
      "flag" => true,
      "data" => 10000.times.map { [1.0] },
      :flag => false,
    }

    test_data.to_json
    ```

    https://github.com/ruby/json/commit/79b6e168ba

commit e1655dad3a00a7b4026c653ff7c611811e7e34da
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-03 16:13:24 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-02-03 16:13:24 +0900

    Comment out to disable ppc64le and s390x CI builds

    They are cancelled after new permission.

    https://github.com/IBM/actionspz/issues/75

    Other Ubuntu jobs unexpectedly terminated with their cancellation.

commit cf060ad6a6598edc58676dbbd49a78f733d5d499
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-03 13:02:13 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-03 13:06:46 +0900

    [ruby/resolv] [DOC] undocument private module/methods

    https://github.com/ruby/resolv/commit/73f6bb6edb

commit c00b50298f1ece10dcdb14e1afb4cb0037e5baa7
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-03 12:45:51 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-03 12:50:39 +0900

    [ruby/win32-registry] [DOC] document the namespace module

    https://github.com/ruby/win32-registry/commit/3de1a0b727

commit 184d4be89387fb94b4e85b313fc00d891c7f9244
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-03 12:41:44 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-03 12:44:27 +0900

    [ruby/timeout] [DOC] document the private instance method

    https://github.com/ruby/timeout/commit/52e85fed75

commit 99d90125c0d750478c74181809e0fe761ba34783
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-02-02 12:17:24 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-02-03 07:09:07 +0900

    [DOC] Improve docs for Coverage.start

commit c104ede5469cd3a9d78b651bbcf4b1eb16a0b9d4
  Author:     John Hawthorn <john@hawthorn.email>
  AuthorDate: 2026-02-02 23:50:09 +0900
  Commit:     John Hawthorn <john@hawthorn.email>
  CommitDate: 2026-02-03 06:18:15 +0900

    Make Ractor::Port embeddable

commit 03090e2e72f3308571db9c9b76b4126fc271d6ec
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-02-02 04:36:13 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-03 03:26:54 +0900

    [ruby/prism] Change `bin/prism errors` to take source and print errors

    This is more akin to how all the other ones work.
    Instead I added most of this to the errors test like focusing
    a few specifically and creating new expectations.

    https://github.com/ruby/prism/commit/b21922b0a1

commit 30d2e0cd6b94752e939025e2d5751f4b24e601ff
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-02-02 20:59:09 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-03 03:26:20 +0900

    [ruby/prism] Add escaping for doxygen token comment

    Many characters have special meaning and break formatting

    https://github.com/ruby/prism/commit/0b9d516c26

commit 997943219c2d44e60d1d7ae25c8f78c99ce6d970
  Author:     Jun Aruga <jaruga@redhat.com>
  AuthorDate: 2026-01-28 04:01:27 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-03 02:06:08 +0900

    [ruby/openssl] Update the steps to generate the base64-based examples.

    * More precisely
    * Updating the rsa-1.pem file path.

    https://github.com/ruby/openssl/commit/d86270d1df

commit e690a8f39a121a2532586a321db7c4dfa1d867df
  Author:     Jun Aruga <jaruga@redhat.com>
  AuthorDate: 2026-01-19 22:23:24 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-03 02:06:08 +0900

    [ruby/openssl] Fix test_pkcs12.rb in FIPS.

    * OpenSSL::PKCS12.create calling the PKCS12_create() has the argument mac_iter
      which uses a MAC key using PKCS12KDF which is not FIPS-approved.
    * OpenSSL::PKCS12.new with base64-encoded example calling PKCS12_parse()
      verifies the MAC key using PKCS12KDF which is not FIPS-approved.
    * PBE-SHA1-3DES uses PKCS12KDF which is not FIPS-approved according to the RFC
      7292 PKCS#12.
      https://datatracker.ietf.org/doc/html/rfc7292#appendix-C
      > The PBES1 encryption scheme defined in PKCS #5 provides a number of
      > algorithm identifiers for deriving keys and IVs; here, we specify a
      > few more, all of which use the procedure detailed in Appendices B.2
      > and B.3 to construct keys (and IVs, where needed).  As is implied by
      > their names, all of the object identifiers below use the hash
      > function SHA-1.
      > ...
      > pbeWithSHAAnd3-KeyTripleDES-CBC  OBJECT IDENTIFIER ::= {pkcs-12PbeIds 3}

      Note that the pbeWithSHAAnd3-KeyTripleDES-CBC (pkcs12-pbeids 3) in the RFC
      7292 PKCS#12 means PBE-SHA1-3DES in OpenSSL. PKCS12KDF is used in PKCS#12.
      https://oidref.com/1.2.840.113549.1.12.1.3
      https://github.com/openssl/openssl/blob/ed57d1e06dca28689190e00d9893e0fd7ecc67c1/crypto/objects/objects.txt#L385

    https://github.com/ruby/openssl/commit/2aa6d97a54

commit a2ca4aa9ae9b917616b27d4605162003c7009269
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-02-03 00:40:21 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-02-03 01:17:06 +0900

    [DOC] Update incorrect class documentation

    `RCLASS_PRIME_CLASSEXT_PRIME_WRITABLE` doesn't exist, it's
    `RCLASS_PRIME_CLASSEXT_WRITABLE`.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16038

commit 3cbdedb62095db19348355a5ab43d2a490012f40
  Author:     Étienne Barrié <etienne.barrie@gmail.com>
  AuthorDate: 2026-01-21 20:59:28 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-02-02 23:32:06 +0900

    Fix `VCS::GIT#export_changelog`

        + gmake RELNAME=master@0f1eea09490 AUTOCONF=autoconf dist
        /home/chkbuild/.rbenv/versions/3.4.8/bin/ruby --disable=gems  ./tool/make-snapshot \
        -srcdir=. -packages=gzip,zip,all \
        -unicode-version=17.0.0 \
        tmp master@0f1eea09490
        Exporting master@0f1eea09490
        Cloning into '/home/chkbuild/chkbuild/tmp/build/20260121T093003Z/tmp/ruby-snapshot20260121-3800606-t2y44s/ruby'...
        done.
        fatal: bad revision '#<struct VCS::GIT::Branch to_str="master">'
        fatal: bad revision '#<struct VCS::GIT::Branch to_str="master">'
        ./tool/make-snapshot:399: warning: no starting commit found

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15921

commit 9715b29a19c1fcb714b0de67ab373f808fb3ac9d
  Author:     Steven Webb <steve@buildkite.com>
  AuthorDate: 2026-01-11 22:13:27 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-02-02 14:00:17 +0900

    Update array.rb

    Co-authored-by: Nobuyoshi Nakada <nobu@ruby-lang.org>

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15846

commit 9368ec5e8b992856d554f57c56e4d5a9c45f0f38
  Author:     Steven Webb <steven.daniel.webb@gmail.com>
  AuthorDate: 2026-01-11 19:08:09 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-02-02 14:00:17 +0900

    Rewrite Array#find in ruby

    Inspired by https://bugs.ruby-lang.org/issues/20182 and https://github.com/ruby/ruby/pull/9533.

    This PR provides a performance boost to Array#find when run using JIT
    compilation. This is achieved by implementing Array#find in Ruby, which
    the JIT compiler can optimise.

    [PR#15189](https://github.com/ruby/ruby/pull/15189) added a C
    implementation for Array#find instead of relying on Enumerable#find.
    This PR extends this by adding a Ruby implementation.

    I used the so_fasta benchmark to measure performance. No change in
    interpreted performance before/after:

      $ benchmark-driver -e "~/.rubies/ruby-master/bin/ruby; ~/.rubies/ruby-array-find-native/bin/ruby" ../benchmark/so_fasta.rb
      Calculating -------------------------------------
                           ~/.rubies/ruby-master/bin/ruby   ~/.rubies/ruby-array-find-native/bin/ruby
                  so_fasta                          0.393                                       0.393 i/s -       1.000 times in 2.543209s 2.545514s

      Comparison:
                               so_fasta
      ~/.rubies/ruby-master/bin/ruby:         0.4 i/s
      ~/.rubies/ruby-array-find-native/bin/ruby:         0.4 i/s - 1.00x  slower

    With YJIT enabled Array#find is almost twice as fast:

      $ benchmark-driver -e "~/.rubies/ruby-array-find-native/bin/ruby; ~/.rubies/ruby-array-find-native/bin/ruby --yjit" ../benchmark/so_fasta.rb
      Calculating -------------------------------------
                           ~/.rubies/ruby-array-find-native/bin/ruby   ~/.rubies/ruby-array-find-native/bin/ruby --yjit
                  so_fasta                                     0.393                                              0.770 i/s -       1.000 times in 2.547550s 1.298371s

      Comparison:
                               so_fasta
      ~/.rubies/ruby-array-find-native/bin/ruby --yjit:         0.8 i/s
      ~/.rubies/ruby-array-find-native/bin/ruby:         0.4 i/s - 1.96x  slower

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15846

commit 70cc932d2791e885c1f085ca5fdd45ded09dd1a8
  Author:     Ian Ker-Seymer <ian.kerseymer@shopify.com>
  AuthorDate: 2026-02-02 02:45:43 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-02-02 13:55:42 +0900

    [ruby/rubygems] Fix nil `@revision` in `git_proxy.rb`

    https://github.com/ruby/rubygems/commit/69d955eb67

commit 34f848b366f72ef04a29097ed2e72e748ecbb4ae
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-31 07:11:59 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-02-02 12:12:29 +0900

    [DOC] Fix hash style in Hash#dig

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16013

commit 3ab35e5e2e9dfa156aa87d30a90a66593198400d
  Author:     Burdette Lamar <BurdetteLamar@Yahoo.com>
  AuthorDate: 2026-02-02 11:56:21 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-02-02 11:56:21 +0900

    [DOC] Doc for Module.new

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15962

    Merged-By: peterzhu2118 <peter@peterzhu.ca>

commit 5cf4087000ea3d1c2249273bc4484c168df39842
  Author:     Alexander Bulancov <6594487+trinistr@users.noreply.github.com>
  AuthorDate: 2026-02-02 02:51:44 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-02-02 10:04:44 +0900

    [DOC] Fix typos in IO::Buffer's docs

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16032

commit 4e196af17c334de1eb74f7bb036fec12a35b794e
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-02-02 05:19:10 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-02-02 05:57:59 +0900

    Use ruby_sized_xfree

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16033

commit a93604b5ed813c43aca572ad64c1a7b66b715429
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-02-01 09:14:25 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-02-02 00:27:56 +0900

    [DOC] Fix dead links in options.md

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16028

commit 911c1ca2823601d4bcf6e0e9b5a40f1d4aae51bd
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-01 22:08:27 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-02-01 23:57:35 +0900

    Win32: keep --with-opt-dir as-is unless it is a real path

    Allow to expand environment variables in Makefile.

    E.g.:
    ```batch
    set VCPKG_INSTALLED=%HOME%\vcpkg\vcpkg_installed
    win32\configure.bat "--with-opt-dir=$(VCPKG_INSTALLED)/$(MACHINE)-windows"
    ```

commit 2ed817434f2958398773d8f3360a412fbf9384af
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-01 22:03:49 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-02-01 23:57:34 +0900

    Win32: strip double quotes from the batch file name

commit 24bdf6a40e58b172ce67ff61d0b966f194d96757
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-02-01 20:54:55 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-02-01 23:32:28 +0900

    transcode.c: Use ruby_sized_xfree

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16031

commit 32f2596984c30a767b5a0b0d2d890a5653e17960
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-02-01 20:17:51 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-02-01 23:32:28 +0900

    thread_pthread.c: Use ruby_sized_xfree

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16031

commit 1f58302e9f4810c0eb60c90b7933a30b5a0d05ff
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-02-01 20:39:24 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-02-01 23:32:28 +0900

    internal/gc.h: Remove inlined allocation decorator functions

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16031

commit 0a6e365fa036536a6fde88c430e50057264aad88
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-02-01 20:33:28 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-02-01 23:32:28 +0900

    eval_jump.c: Use ruby_sized_xfree

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16031

commit 62da4806322091aa2586f9ec376bd0a70600a32a
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-02-01 20:03:41 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-02-01 23:32:28 +0900

    vm_eval.c,vm_trace.c: Use ruby_sized_xfree

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16031

commit 1276c233eac42d78016027a35b9e728427b215d2
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-02-01 06:57:35 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-02-01 20:17:29 +0900

    thread.c: use ruby_sized_xfree for fdset and interupt tasks

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16026

commit 4d5cd811656bd34a68db9990bebd9fc75043780d
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-02-01 18:35:33 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-02-01 20:17:29 +0900

    ractor_sync.c: use ruby_sized_xfree

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16026

commit ecb28ce3ab49b8039680f1b1624abd4bddf4956c
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-02-01 18:26:00 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-02-01 20:17:29 +0900

    prism_compile.c: use ruby_sized_xfree

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16026

commit 9fa0cdc9239a9f56158d2c593780a1000444b82a
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-02-01 18:10:44 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-02-01 20:17:29 +0900

    vm_method.c: use sized free for css and method_definition

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16026

commit 44b5971e474e1975526c6792955af8457da8f4c1
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-02-01 18:05:21 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-02-01 20:17:29 +0900

    string.c: use ruby_sized_xfree in a few more cases

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16026

commit d328412da84cdd26adb9a162bbf745bd43f7ee75
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-02-01 02:41:55 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-02-01 20:17:29 +0900

    Use ruby_sized_xfree to free embedded Hash and Set

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16026

commit dc6cdb1759166630f29c456279c84fee1c0351d5
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-02-01 04:57:10 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-02-01 20:17:29 +0900

    proc.c: use ruby_sized_xfree to free rb_binding_t

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16026

commit b39c1af417a27874373d8b936b535bcf8ec3276f
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-02-01 03:08:47 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-02-01 20:17:29 +0900

    cont.c: use ruby_sized_xfree to free the stack

    Also use mimalloc rather than raw malloc for `rb_jit_cont`.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16026

commit 3fcd36ff5d149f05cab4cbade20bc40a59989740
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-02-01 02:29:39 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-02-01 20:17:29 +0900

    memory_view.c: Use ruby_sized_xfree

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16026

commit 3b2ad4b741a103d34fc309591ba9573989bb7888
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-01 17:37:33 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-02-01 17:37:33 +0900

    Check the suffix argument always if given

    It also must be ASCII-compatible and must not contain null byte, as
    well as the path argument.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16030

commit d90f78b567ffa6cde84d26d8594c771bd1e4bd86
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-02-01 11:33:45 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-02-01 16:20:32 +0900

    Compare pointers with the end of path

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16029

commit 14ccd1515630de24d75ce31164a35cf74f57bde2
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-02-01 07:48:09 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-02-01 07:52:29 +0900

    [DOC] Fix broken links with slash character

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16027

commit 0796c9a3adc97e295625eba439340accf065a601
  Author:     Burdette Lamar <BurdetteLamar@Yahoo.com>
  AuthorDate: 2026-02-01 07:48:49 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-02-01 07:48:49 +0900

    [DOC] Remove unneeded link (#16014)

  Notes:
    Merged-By: peterzhu2118 <peter@peterzhu.ca>

commit 75d9c4c697eebc4485afbaa04544882ee301b687
  Author:     BurdetteLamar <burdettelamar@yahoo.com>
  AuthorDate: 2026-01-31 11:35:02 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-02-01 07:45:40 +0900

    [DOC] Fix link in IO

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16017

commit 64f35adaadf8f168b46a3991914b87fa7b5feaa8
  Author:     BurdetteLamar <burdettelamar@yahoo.com>
  AuthorDate: 2026-01-31 11:27:35 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-02-01 07:45:03 +0900

    [DOC] Fix link in Hash

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16016

commit 6019cc9dc07f6c31fa231325c2501b36fa4923fd
  Author:     BurdetteLamar <burdettelamar@yahoo.com>
  AuthorDate: 2026-01-31 11:17:17 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-02-01 07:44:45 +0900

    [DOC] Fix link in File

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16015

commit 66fdb15abf47df006a7cd29f34f30bec516f37aa
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-02-01 02:59:22 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-02-01 03:59:40 +0900

    thread_sync.c: Fix leak in Queue and SizedQueue

    This was introduced in 8ce61f90ba4aea3d52e92e258c3803b8b885726e

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16025

commit 4c1120b5fd67cdf15b8c790849e068851369852f
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-02-01 00:54:34 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-02-01 01:54:33 +0900

    ractor.c: Replace ruby_xfree by ruby_sized_xfree

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16023

commit 4292aed14bb9abb4233aa855e1d5ee89c02969f9
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-02-01 00:44:42 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-02-01 01:54:33 +0900

    string.c: Replace ruby_xfree by ruby_sized_xfree

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16023

commit 250fdd13c7a2e80bb4c58469dfc732e60a3a8b54
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-01-31 22:14:28 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-02-01 01:54:33 +0900

    iseq.c: Replace ruby_xfree by ruby_sized_xfree

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16023

commit 50e987bdca0f160412b27b97c8ef49d28b8c515e
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-01-31 21:00:06 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-02-01 01:54:33 +0900

    imemo.c: Replace ruby_xfree by ruby_sized_xfree

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16023

commit 9cc71cb9093caa7ee471def8aa8f0de596e366cf
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-01-31 19:02:17 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-02-01 01:54:33 +0900

    Use static memory instead of mimalloc for the VM, main ractor, main thread.

    Also allocate fibers with ruby_xmalloc.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16023

commit 0b4b30af9e09be12960ad1e9aff89b195b7c3734
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-01-31 15:21:17 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-02-01 01:54:33 +0900

    cont.c: Replace ruby_xfree by ruby_sized_xfree

    Notable exception for `fiber_free` because fibers are allocated
    with `ruby_mimmalloc`.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16023

commit 4ea3d8c773e62c3d808bb5f91e90bf8704926af4
  Author:     Steven Webb <steve@buildkite.com>
  AuthorDate: 2026-01-31 23:02:13 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-31 23:02:13 +0900

    [DOC] Example usage for --zjit-dump-hir (#16021)

    I found learning about the HIR format difficult because I couldn't get ruby/miniruby to output it using the --zjit-dump-hir option. I eventually realised it won't be generated unless the zjit-call-threshold is reached (default 30).

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit 7ef8c470d211af63b0898340074db373d55bc225
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-11-30 17:40:41 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-31 18:41:30 +0900

    Enable check for core data types by `RUBY_DEBUG`

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15352

commit eae7300a09a4b9bd87045b313dcdd464d12dd683
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-11-30 16:53:59 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-31 18:41:29 +0900

    Typed data check for core data types

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15352

commit bd6fa7f5cca426901bc9162724966339440bc6cb
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-01-31 16:53:48 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-01-31 18:35:48 +0900

    ruby_xfree: reject memory allocated by ruby_mimalloc

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16010

commit db52e98520349e2bfcd471a0c2f96d696a4f7498
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-01-31 15:03:17 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-01-31 18:35:48 +0900

    compile.c: Replace ruby_xfree by ruby_sized_xfree

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16010

commit 54df6cddd79f0b04cfc3b2f33b9bb79897a4c78a
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-01-31 14:11:47 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-01-31 18:35:48 +0900

    concurrent_set.c: Replace ruby_xfree by ruby_sized_xfree

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16010

commit a7d4a9df03f8b99432f7b1d58c3cd04dc639965c
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-01-31 13:43:49 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-01-31 18:35:48 +0900

    class.c: Replace ruby_xfree by ruby_sized_xfree when applicable

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16010

commit bcbc6ed57112e1e4ad76fb2db6c9c7b35685b890
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-01-31 13:28:52 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-01-31 18:35:48 +0900

    bignum.c: Replace ruby_xfree by ruby_sized_xfree when applicable

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16010

commit 0584f9fb0951bee3ea2645bdba0af56a2b320ed3
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-01-31 01:00:23 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-01-31 18:35:48 +0900

    gc.c: Replace ruby_xfree by ruby_sized_xfree when applicable

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16010

commit 050c00141c7e8fdded5355b4c31e971ae21403d0
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-01-30 17:52:29 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-01-31 18:35:48 +0900

    variable.c: Replace ruby_xfree by ruby_sized_xfree when applicable

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16010

commit 801cdfefe26da4381c10f994a9f103feae003f18
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-11-30 16:56:44 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-31 17:51:34 +0900

    Fix wrong declaration of `rb_optimized_call`

    `recv` is used as the input argument to `GetProcPtr`, which is a
    `VALUE`.

    Fix up ruby/ruby#6691.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16022

commit 242850727c41244dcd60dffa3ec509476ade5212
  Author:     git[bot] <svn-admin@ruby-lang.org>
  AuthorDate: 2026-01-31 15:59:41 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-31 15:59:41 +0900

    Update bundled gems list as of 2026-01-31

commit 957887b3406b9ec50e67dbb7d7c1cdbc83d56c5d
  Author:     cui <cuiweixie@gmail.com>
  AuthorDate: 2026-01-31 13:33:44 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-31 13:33:44 +0900

    [DOC] Fix typo: regsiter to register (#16020)

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit e8d8f50fa82f1f05cc6fa927be7c3415f028e73c
  Author:     John Hawthorn <john@hawthorn.email>
  AuthorDate: 2026-01-21 04:55:36 +0900
  Commit:     John Hawthorn <john@hawthorn.email>
  CommitDate: 2026-01-31 12:42:26 +0900

    Clear age and unprotected bits for page at once

    This aims to speed up sweeping by clearing all age and wb_unprotected
    bits for unmarked objects. This should be faster because we can clear
    up to a whole plane of objects (64 slots) at once.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16000

commit 6327f59307d8cd62438ed1fee80058b8c7cc5fab
  Author:     John Hawthorn <john@hawthorn.email>
  AuthorDate: 2026-01-21 03:47:21 +0900
  Commit:     John Hawthorn <john@hawthorn.email>
  CommitDate: 2026-01-31 12:42:26 +0900

    Use bit plane for age bits

    Previously we used two adjacent bits in the same word to store the
    object's age. This changes that to instead store the age in the same bit
    position across two adjacent words. This makes age use the exact same
    bit positions as the other bitmaps (just across two words).

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16000

commit 737809bf25e1c8babd3c8280a5fac162354f906b
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-31 07:05:11 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-31 07:10:33 +0900

    [DOC] Fix link in ARGF

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16012

commit d7553015cc63258919f28b41c642eca66d35f8bf
  Author:     Benoit Daloze <eregontp@gmail.com>
  AuthorDate: 2026-01-30 04:39:23 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-31 03:46:00 +0900

    [ruby/prism] Handle String-like objects for Ripper.sexp

    * RSpec relies on this in
      https://github.com/rspec/rspec/blob/rspec-support-v3.13.6/rspec-support/lib/rspec/support/source.rb#L57
      which is given an RSpec::Support::EncodedString.
    * CI failure caused by this on truffleruby:
      https://github.com/sporkmonger/addressable/actions/runs/21457707372/job/61802608154#step:7:14

    https://github.com/ruby/prism/commit/a83cb7b350

commit 1298f9ac1ad390594815bc4d3739eb312bca8887
  Author:     Max Bernstein <rubybugs@bernsteinbear.com>
  AuthorDate: 2026-01-31 02:29:15 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-31 02:29:15 +0900

    ZJIT: Support CFunc inlining in InvokeSuper (#16004)

    Also generally make the CFunc process look more like `optimize_c_calls`.

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit 9be01bc70dca0e727fe1f518ebae1f6f72405b84
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-01-30 21:09:10 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-01-30 23:24:48 +0900

    gc.c: also verify sized_xrealloc old size

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16008

commit 3c100019a4a1b0ef66db76ec3b14f63eac51dd4d
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-01-30 17:41:27 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-01-30 22:48:37 +0900

    st.c: Use ruby_sized_xfree

    Followup: https://github.com/ruby/ruby/pull/15989

    This feeds the GC with useful allocation metrics, but also ensure
    we're correctly keeping track of our allocation sizes which is
    beneficial for safety.

    It also allows to use C23's `free_sized`.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16007

commit 5911a5231e6ec7bb50e15886ec2f3c5aae4e175e
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-01-30 11:01:49 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-30 14:08:16 +0900

    [ruby/rubygems] Handle symlink TMPDIR with macOS

    https://github.com/ruby/rubygems/commit/cf08f1ec4c

commit 9bf8aaa26460b056236738a98521149f38611f88
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-01-27 10:17:12 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-30 14:08:15 +0900

    [ruby/rubygems] Reapply "Merge pull request #8989 from nobu/test-tmpdir""

    This reverts commit https://github.com/ruby/rubygems/commit/6e00da098aba.

    https://github.com/ruby/rubygems/commit/c6abdae812

commit 0d66488f827a9afe63b2f1011908a7b78556f276
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-30 07:18:05 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-30 10:06:55 +0900

    Remove dead gc_stat_sym_weak_references_count

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16003

commit 5068fe85e6f7e662cd6e15f5ed7b80a4be5e6056
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-01-30 09:25:42 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-30 09:26:14 +0900

    [ruby/resolv] v0.7.1

    https://github.com/ruby/resolv/commit/8fc05c1cb6

commit ef583c93ebad9eb9cf988e35bfd8ee22fbedd2c0
  Author:     Luke Gruber <luke.gruber@shopify.com>
  AuthorDate: 2026-01-30 08:34:30 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-30 08:34:30 +0900

    Fix NEWOBJ hook calling `rb_obj_memsize_of` on TypedData object (#16002)

    Fix NEWOBJ hook calling cruby functions on objects not filled yet.

    Objects like `TypedData` need to be zeroed out when calling `rb_obj_memsize_of`.
    Other object types need `fields_obj` to be 0 when they don't have one, etc.

    Fixes [Bug #21854]

  Notes:
    Merged-By: luke-gru <luke.gru@gmail.com>

commit 5fec5456b9cd9dd7fdea18ac9c43b1cf6d4cf4cb
  Author:     Kevin Menard <kevin@nirvdrum.com>
  AuthorDate: 2026-01-30 08:24:50 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-30 08:24:50 +0900

    ZJIT: Optimize `super` calls to C function targets (#15993)

    This PR is an extension of the work in #15816. There, we optimized `super` calls where the target method was an ISeq. The code bailed on any other `super` target method type.

    The discussion for that PR included the ZJIT stats from running the _railsbench_ benchmark in _ruby-bench_. The stats showed the other types of `super` calls we encountered that we didn't process:

    ```
    Top-2 not optimized method types for super (100.0% of total 2,700,015):
        cfunc: 2,680,044 (99.3%)
      attrset:    19,971 ( 0.7%)
    ```

    This PR handles most of the cfunc cases. We still only handle simple method signatures and don't handle blocks at all, but if the target function is a cfunc where `argc != 2`, we now optimize to either `Insn::CCallWithFrame` or `Insn::CCallVariadic` as appropriate. This covers 100% of the C func cases we encounter in _railsbench_.

    <details><summary>Baseline ZJIT stats</summary>
    <p>

    ```
    Top-20 not inlined C methods (51.1% of total 15,736,824):
                                      Hash#key?: 1,260,867 ( 8.0%)
                                  Regexp#match?:   970,899 ( 6.2%)
                                     Hash#fetch:   898,248 ( 5.7%)
                                    Integer#===:   439,075 ( 2.8%)
                                    Hash#delete:   405,821 ( 2.6%)
                                     Array#any?:   403,598 ( 2.6%)
                                     String.new:   401,818 ( 2.6%)
                                       String#b:   319,473 ( 2.0%)
                                  String#to_sym:   272,868 ( 1.7%)
                                     Array#all?:   260,132 ( 1.7%)
                                  Fiber.current:   259,588 ( 1.6%)
                                     Array#join:   257,125 ( 1.6%)
                                 Array#include?:   247,718 ( 1.6%)
                                   Kernel#Array:   244,574 ( 1.6%)
                                      String#<<:   242,475 ( 1.5%)
                               Symbol#end_with?:   239,977 ( 1.5%)
                          String#force_encoding:   239,520 ( 1.5%)
                                     Kernel#dup:   232,701 ( 1.5%)
                                       Array#[]:   225,160 ( 1.4%)
                             Kernel#respond_to?:   220,246 ( 1.4%)
    Top-20 calls to C functions from JIT code (75.3% of total 106,711,108):
                   rb_vm_opt_send_without_block: 22,031,658 (20.6%)
                                   rb_hash_aref:  9,335,540 ( 8.7%)
                                rb_vm_env_write:  7,865,750 ( 7.4%)
                                     rb_vm_send:  6,836,936 ( 6.4%)
           rb_zjit_writebarrier_check_immediate:  5,623,383 ( 5.3%)
                      rb_vm_getinstancevariable:  5,012,846 ( 4.7%)
                 rb_ivar_get_at_no_ractor_check:  4,868,219 ( 4.6%)
                              rb_vm_invokesuper:  3,240,208 ( 3.0%)
                                   rb_hash_aset:  2,061,526 ( 1.9%)
                              rb_obj_is_kind_of:  1,812,573 ( 1.7%)
                              rb_vm_invokeblock:  1,647,238 ( 1.5%)
                     rb_vm_opt_getconstant_path:  1,295,958 ( 1.2%)
                                      Hash#key?:  1,260,867 ( 1.2%)
                     rb_class_allocate_instance:  1,190,707 ( 1.1%)
                          rb_hash_new_with_size:  1,150,766 ( 1.1%)
                      rb_vm_setinstancevariable:  1,119,304 ( 1.0%)
                      rb_ec_ary_new_from_values:  1,050,781 ( 1.0%)
                                   rb_obj_alloc:    993,445 ( 0.9%)
                         rb_str_concat_literals:    984,558 ( 0.9%)
                                  Regexp#match?:    970,899 ( 0.9%)
    Top-2 not optimized method types for send (100.0% of total 3,423,067):
           iseq: 3,410,096 (99.6%)
      optimized:    12,971 ( 0.4%)
    Top-2 not optimized method types for send_without_block (100.0% of total 319,311):
      optimized_send: 246,250 (77.1%)
                null:  73,061 (22.9%)
    Top-2 not optimized method types for super (100.0% of total 2,680,495):
        cfunc: 2,660,334 (99.2%)
      attrset:    20,161 ( 0.8%)
    Top-4 instructions with uncategorized fallback reason (100.0% of total 2,617,553):
                 invokeblock: 1,647,238 (62.9%)
                 sendforward:   748,101 (28.6%)
          invokesuperforward:   199,443 ( 7.6%)
      opt_send_without_block:    22,771 ( 0.9%)
    Top-20 send fallback reasons (100.0% of total 34,703,584):
                              send_without_block_polymorphic: 12,818,893 (36.9%)
                              send_without_block_no_profiles:  5,442,960 (15.7%)
                              send_not_optimized_method_type:  3,423,067 ( 9.9%)
                             super_not_optimized_method_type:  2,680,495 ( 7.7%)
                                               uncategorized:  2,617,553 ( 7.5%)
                                            send_no_profiles:  2,083,822 ( 6.0%)
                                one_or_more_complex_arg_pass:  1,663,149 ( 4.8%)
                                            send_polymorphic:  1,329,141 ( 3.8%)
            send_without_block_not_optimized_need_permission:    510,815 ( 1.5%)
                                       too_many_args_for_lir:    477,266 ( 1.4%)
                                        singleton_class_seen:    441,058 ( 1.3%)
                                     super_complex_args_pass:    331,767 ( 1.0%)
      send_without_block_not_optimized_method_type_optimized:    246,250 ( 0.7%)
                              send_without_block_megamorphic:    228,672 ( 0.7%)
                              super_target_complex_args_pass:    165,855 ( 0.5%)
                send_without_block_not_optimized_method_type:     73,061 ( 0.2%)
                                    obj_to_string_not_string:     67,862 ( 0.2%)
                                       super_call_with_block:     40,004 ( 0.1%)
                  send_without_block_direct_keyword_mismatch:     39,783 ( 0.1%)
                                           super_polymorphic:     22,087 ( 0.1%)
    Top-3 setivar fallback reasons (100.0% of total 1,119,304):
                not_monomorphic: 1,077,792 (96.3%)
                   not_t_object:    41,335 ( 3.7%)
      new_shape_needs_extension:       177 ( 0.0%)
    Top-1 getivar fallback reasons (100.0% of total 5,012,871):
      not_monomorphic: 5,012,871 (100.0%)
    Top-2 definedivar fallback reasons (100.0% of total 142,798):
      not_monomorphic: 142,711 (99.9%)
         not_t_object:      87 ( 0.1%)
    Top-6 invokeblock handler (100.0% of total 1,647,238):
       monomorphic_iseq: 878,253 (53.3%)
            polymorphic: 483,612 (29.4%)
      monomorphic_other: 134,943 ( 8.2%)
      monomorphic_ifunc: 115,175 ( 7.0%)
            megamorphic:  34,939 ( 2.1%)
            no_profiles:     316 ( 0.0%)
    Top-8 popular complex argument-parameter features not optimized (100.0% of total 2,068,581):
      param_forwardable: 729,353 (35.3%)
            param_block: 716,533 (34.6%)
             param_rest: 327,865 (15.8%)
           caller_splat: 114,365 ( 5.5%)
        caller_kw_splat:  99,266 ( 4.8%)
           param_kwrest:  80,149 ( 3.9%)
        caller_blockarg:     877 ( 0.0%)
           caller_kwarg:     173 ( 0.0%)
    Top-1 compile error reasons (100.0% of total 156,707):
      exception_handler: 156,707 (100.0%)
    Top-5 unhandled YARV insns (100.0% of total 201,517):
        getconstant: 160,920 (79.9%)
        expandarray:  19,985 ( 9.9%)
      setblockparam:  19,972 ( 9.9%)
         checkmatch:     480 ( 0.2%)
               once:     160 ( 0.1%)
    Top-2 unhandled HIR insns (100.0% of total 128,647):
              throw: 93,060 (72.3%)
      invokebuiltin: 35,587 (27.7%)
    Top-19 side exit reasons (100.0% of total 3,484,374):
                      guard_shape_failure: 1,042,511 (29.9%)
                       guard_type_failure:   812,342 (23.3%)
      block_param_proxy_not_iseq_or_ifunc:   795,628 (22.8%)
                      unhandled_yarv_insn:   201,517 ( 5.8%)
                            compile_error:   156,707 ( 4.5%)
                       unhandled_hir_insn:   128,647 ( 3.7%)
             unhandled_newarray_send_pack:   119,187 ( 3.4%)
              patchpoint_method_redefined:    80,619 ( 2.3%)
                      unhandled_block_arg:    60,517 ( 1.7%)
               block_param_proxy_modified:    49,695 ( 1.4%)
                       guard_less_failure:    20,033 ( 0.6%)
                   fixnum_lshift_overflow:     9,985 ( 0.3%)
         patchpoint_stable_constant_names:     5,752 ( 0.2%)
                     fixnum_mult_overflow:       570 ( 0.0%)
                   obj_to_string_fallback:       498 ( 0.0%)
                  patchpoint_no_ep_escape:       109 ( 0.0%)
                                interrupt:        43 ( 0.0%)
                 guard_super_method_entry:         8 ( 0.0%)
                 guard_greater_eq_failure:         6 ( 0.0%)
                                 send_count: 133,679,714
                         dynamic_send_count:  34,703,584 (26.0%)
                       optimized_send_count:  98,976,130 (74.0%)
                      dynamic_setivar_count:   1,119,304 ( 0.8%)
                      dynamic_getivar_count:   5,012,871 ( 3.7%)
                  dynamic_definedivar_count:     142,798 ( 0.1%)
                  iseq_optimized_send_count:  38,085,055 (28.5%)
          inline_cfunc_optimized_send_count:  39,628,908 (29.6%)
           inline_iseq_optimized_send_count:   3,624,852 ( 2.7%)
    non_variadic_cfunc_optimized_send_count:  10,434,756 ( 7.8%)
        variadic_cfunc_optimized_send_count:   7,202,559 ( 5.4%)
    compiled_iseq_count:                               2,868
    failed_iseq_count:                                     0
    compile_time:                                    8,809ms
    profile_time:                                      135ms
    gc_time:                                           255ms
    invalidation_time:                                  21ms
    vm_write_pc_count:                           116,809,164
    vm_write_sp_count:                           116,809,164
    vm_write_locals_count:                       111,533,227
    vm_write_stack_count:                        111,533,227
    vm_write_to_parent_iseq_local_count:             521,277
    vm_read_from_parent_iseq_local_count:         12,757,231
    guard_type_count:                            126,653,751
    guard_type_exit_ratio:                              0.6%
    guard_shape_count:                            44,193,824
    guard_shape_exit_ratio:                             2.4%
    code_region_bytes:                            14,336,000
    zjit_alloc_bytes:                             19,282,889
    total_mem_bytes:                              33,618,889
    side_exit_count:                               3,484,374
    total_insn_count:                            697,672,179
    vm_insn_count:                                52,531,010
    zjit_insn_count:                             645,141,169
    ratio_in_zjit:                                     92.5%
    ```

    </p>
    </details>

    <details><summary>Optimized invokesuper stats</summary>
    <p>

    ```
    Top-20 not inlined C methods (51.1% of total 15,736,852):
                                      Hash#key?: 1,260,867 ( 8.0%)
                                  Regexp#match?:   970,900 ( 6.2%)
                                     Hash#fetch:   898,248 ( 5.7%)
                                    Integer#===:   439,075 ( 2.8%)
                                    Hash#delete:   405,825 ( 2.6%)
                                     Array#any?:   403,600 ( 2.6%)
                                     String.new:   401,818 ( 2.6%)
                                       String#b:   319,473 ( 2.0%)
                                  String#to_sym:   272,868 ( 1.7%)
                                     Array#all?:   260,132 ( 1.7%)
                                  Fiber.current:   259,588 ( 1.6%)
                                     Array#join:   257,125 ( 1.6%)
                                 Array#include?:   247,718 ( 1.6%)
                                   Kernel#Array:   244,579 ( 1.6%)
                                      String#<<:   242,475 ( 1.5%)
                               Symbol#end_with?:   239,977 ( 1.5%)
                          String#force_encoding:   239,520 ( 1.5%)
                                     Kernel#dup:   232,706 ( 1.5%)
                                       Array#[]:   225,160 ( 1.4%)
                             Kernel#respond_to?:   220,246 ( 1.4%)
    Top-20 calls to C functions from JIT code (73.2% of total 106,690,862):
                   rb_vm_opt_send_without_block: 22,031,722 (20.7%)
                                   rb_hash_aref:  9,335,543 ( 8.8%)
                                rb_vm_env_write:  7,865,751 ( 7.4%)
                                     rb_vm_send:  6,836,939 ( 6.4%)
           rb_zjit_writebarrier_check_immediate:  5,623,259 ( 5.3%)
                      rb_vm_getinstancevariable:  5,012,844 ( 4.7%)
                 rb_ivar_get_at_no_ractor_check:  4,868,219 ( 4.6%)
                                   rb_hash_aset:  2,061,385 ( 1.9%)
                              rb_obj_is_kind_of:  1,812,575 ( 1.7%)
                              rb_vm_invokeblock:  1,647,238 ( 1.5%)
                     rb_vm_opt_getconstant_path:  1,295,958 ( 1.2%)
                                      Hash#key?:  1,260,867 ( 1.2%)
                     rb_class_allocate_instance:  1,190,704 ( 1.1%)
                          rb_hash_new_with_size:  1,150,765 ( 1.1%)
                      rb_vm_setinstancevariable:  1,119,304 ( 1.0%)
                      rb_ec_ary_new_from_values:  1,050,780 ( 1.0%)
                                   rb_obj_alloc:    993,446 ( 0.9%)
                         rb_str_concat_literals:    984,559 ( 0.9%)
                                  Regexp#match?:    970,900 ( 0.9%)
                        rb_obj_as_string_result:    937,751 ( 0.9%)
    Top-2 not optimized method types for send (100.0% of total 3,423,067):
           iseq: 3,410,096 (99.6%)
      optimized:    12,971 ( 0.4%)
    Top-2 not optimized method types for send_without_block (100.0% of total 319,311):
      optimized_send: 246,250 (77.1%)
                null:  73,061 (22.9%)
    Top-1 not optimized method types for super (100.0% of total 20,161):
      attrset: 20,161 (100.0%)
    Top-4 instructions with uncategorized fallback reason (100.0% of total 2,617,553):
                 invokeblock: 1,647,238 (62.9%)
                 sendforward:   748,101 (28.6%)
          invokesuperforward:   199,443 ( 7.6%)
      opt_send_without_block:    22,771 ( 0.9%)
    Top-20 send fallback reasons (100.0% of total 32,043,318):
                              send_without_block_polymorphic: 12,818,949 (40.0%)
                              send_without_block_no_profiles:  5,442,967 (17.0%)
                              send_not_optimized_method_type:  3,423,067 (10.7%)
                                               uncategorized:  2,617,553 ( 8.2%)
                                            send_no_profiles:  2,083,824 ( 6.5%)
                                one_or_more_complex_arg_pass:  1,663,150 ( 5.2%)
                                            send_polymorphic:  1,329,142 ( 4.1%)
            send_without_block_not_optimized_need_permission:    510,814 ( 1.6%)
                                       too_many_args_for_lir:    477,267 ( 1.5%)
                                        singleton_class_seen:    441,058 ( 1.4%)
                                     super_complex_args_pass:    331,767 ( 1.0%)
      send_without_block_not_optimized_method_type_optimized:    246,250 ( 0.8%)
                              send_without_block_megamorphic:    228,672 ( 0.7%)
                              super_target_complex_args_pass:    165,855 ( 0.5%)
                send_without_block_not_optimized_method_type:     73,061 ( 0.2%)
                                    obj_to_string_not_string:     67,862 ( 0.2%)
                                       super_call_with_block:     40,004 ( 0.1%)
                  send_without_block_direct_keyword_mismatch:     39,783 ( 0.1%)
                                           super_polymorphic:     22,088 ( 0.1%)
                             super_not_optimized_method_type:     20,161 ( 0.1%)
    Top-3 setivar fallback reasons (100.0% of total 1,119,304):
                not_monomorphic: 1,077,792 (96.3%)
                   not_t_object:    41,335 ( 3.7%)
      new_shape_needs_extension:       177 ( 0.0%)
    Top-1 getivar fallback reasons (100.0% of total 5,012,869):
      not_monomorphic: 5,012,869 (100.0%)
    Top-2 definedivar fallback reasons (100.0% of total 142,798):
      not_monomorphic: 142,711 (99.9%)
         not_t_object:      87 ( 0.1%)
    Top-6 invokeblock handler (100.0% of total 1,647,238):
       monomorphic_iseq: 878,253 (53.3%)
            polymorphic: 483,612 (29.4%)
      monomorphic_other: 134,943 ( 8.2%)
      monomorphic_ifunc: 115,175 ( 7.0%)
            megamorphic:  34,939 ( 2.1%)
            no_profiles:     316 ( 0.0%)
    Top-8 popular complex argument-parameter features not optimized (100.0% of total 2,068,582):
      param_forwardable: 729,353 (35.3%)
            param_block: 716,534 (34.6%)
             param_rest: 327,865 (15.8%)
           caller_splat: 114,365 ( 5.5%)
        caller_kw_splat:  99,266 ( 4.8%)
           param_kwrest:  80,149 ( 3.9%)
        caller_blockarg:     877 ( 0.0%)
           caller_kwarg:     173 ( 0.0%)
    Top-1 compile error reasons (100.0% of total 156,707):
      exception_handler: 156,707 (100.0%)
    Top-5 unhandled YARV insns (100.0% of total 201,517):
        getconstant: 160,920 (79.9%)
        expandarray:  19,985 ( 9.9%)
      setblockparam:  19,972 ( 9.9%)
         checkmatch:     480 ( 0.2%)
               once:     160 ( 0.1%)
    Top-2 unhandled HIR insns (100.0% of total 128,646):
              throw: 93,060 (72.3%)
      invokebuiltin: 35,586 (27.7%)
    Top-19 side exit reasons (100.0% of total 3,504,293):
                      guard_shape_failure: 1,042,515 (29.7%)
                       guard_type_failure:   812,249 (23.2%)
      block_param_proxy_not_iseq_or_ifunc:   795,628 (22.7%)
                      unhandled_yarv_insn:   201,517 ( 5.8%)
                            compile_error:   156,707 ( 4.5%)
                       unhandled_hir_insn:   128,646 ( 3.7%)
             unhandled_newarray_send_pack:   119,187 ( 3.4%)
              patchpoint_method_redefined:    80,779 ( 2.3%)
                      unhandled_block_arg:    60,517 ( 1.7%)
               block_param_proxy_modified:    49,695 ( 1.4%)
                       guard_less_failure:    20,033 ( 0.6%)
                 guard_super_method_entry:    19,855 ( 0.6%)
                   fixnum_lshift_overflow:     9,985 ( 0.3%)
         patchpoint_stable_constant_names:     5,752 ( 0.2%)
                     fixnum_mult_overflow:       569 ( 0.0%)
                   obj_to_string_fallback:       498 ( 0.0%)
                  patchpoint_no_ep_escape:       109 ( 0.0%)
                                interrupt:        46 ( 0.0%)
                 guard_greater_eq_failure:         6 ( 0.0%)
                                 send_count: 133,600,402
                         dynamic_send_count:  32,043,318 (24.0%)
                       optimized_send_count: 101,557,084 (76.0%)
                      dynamic_setivar_count:   1,119,304 ( 0.8%)
                      dynamic_getivar_count:   5,012,869 ( 3.8%)
                  dynamic_definedivar_count:     142,798 ( 0.1%)
                  iseq_optimized_send_count:  38,025,870 (28.5%)
          inline_cfunc_optimized_send_count:  39,628,762 (29.7%)
           inline_iseq_optimized_send_count:   3,624,854 ( 2.7%)
    non_variadic_cfunc_optimized_send_count:  12,631,917 ( 9.5%)
        variadic_cfunc_optimized_send_count:   7,645,681 ( 5.7%)
    compiled_iseq_count:                               2,870
    failed_iseq_count:                                     0
    compile_time:                                    8,419ms
    profile_time:                                      133ms
    gc_time:                                           248ms
    invalidation_time:                                  20ms
    vm_write_pc_count:                           116,729,857
    vm_write_sp_count:                           116,729,857
    vm_write_locals_count:                       111,453,921
    vm_write_stack_count:                        111,453,921
    vm_write_to_parent_iseq_local_count:             521,275
    vm_read_from_parent_iseq_local_count:         12,757,225
    guard_type_count:                            126,594,209
    guard_type_exit_ratio:                              0.6%
    guard_shape_count:                            44,193,683
    guard_shape_exit_ratio:                             2.4%
    code_region_bytes:                            14,368,768
    zjit_alloc_bytes:                             19,581,578
    total_mem_bytes:                              33,950,346
    side_exit_count:                               3,504,293
    total_insn_count:                            697,692,070
    vm_insn_count:                                52,828,675
    zjit_insn_count:                             644,863,395
    ratio_in_zjit:                                     92.4%
    ```

    </p>
    </details>

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit 91619f0230c0e5a95c796c1bd4f784c151e15614
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-01-28 21:39:33 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-01-30 07:32:04 +0900

    gc.c: Verify provided size in `rb_gc_impl_free`

    For now the provided size is just for GC statistics, but in the future
    we may want to forward it to C23's `free_sized` and passing an incorrect
    size to it is undefined behavior.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15989

commit 457bb11aa5b2ce4424b611acb489686d130261de
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-27 11:20:38 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-30 07:17:46 +0900

    [ruby/mmtk] Add weak_references_count to GC.stat

    https://github.com/ruby/mmtk/commit/86fa2fd4af

commit d9cc3c278b3535a9eefd0e573e72f0cdc3fec1f1
  Author:     Aaron Patterson <tenderlove@ruby-lang.org>
  AuthorDate: 2026-01-30 05:43:01 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-30 05:43:01 +0900

    ZJIT: Remove PadPatchPoint instructions when lowering to LIR (#15974)

    Basic blocks in LIR should only ever end in control flow instructions such as jump or return. PadPatchPoint is not control flow, so we should not emit it at the end of blocks when lowering.

  Notes:
    Merged-By: tenderlove <aaron.patterson@gmail.com>

commit cfa3a4a7d1e9552e9105b4e9ae13b349a5c78b20
  Author:     Alan Wu <XrXr@users.noreply.github.com>
  AuthorDate: 2026-01-30 04:59:33 +0900
  Commit:     Alan Wu <XrXr@users.noreply.github.com>
  CommitDate: 2026-01-30 05:30:33 +0900

    ZJIT: Make printout and identifier name consistent for `Guard{AnyBit,NoBits}Set`

  Notes:
    Merged: https://github.com/ruby/ruby/pull/16001

commit acc414572c213f2690eee56bac3d2355a24e5930
  Author:     Max Bernstein <rubybugs@bernsteinbear.com>
  AuthorDate: 2026-01-30 04:24:38 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-30 04:24:38 +0900

    ZJIT: Support inlining send-with-block (#15998)

    Autosplat only happens due to `yield` or `.call`, neither of which is permitted in our trivial inliner.

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit b51a11268840d257dade3dcb573b680c004a5a1b
  Author:     Benoit Daloze <eregontp@gmail.com>
  AuthorDate: 2026-01-30 04:12:01 +0900
  Commit:     Benoit Daloze <eregontp@gmail.com>
  CommitDate: 2026-01-30 04:12:01 +0900

    IO::Buffer.map seems not shareable across processes on OpenBSD

    * See https://rubyci.s3.amazonaws.com/openbsd-current/ruby-master/log/20260129T163005Z.fail.html.gz

commit 33d828470bc86b494fe9b8f6b684d7e8153f3b95
  Author:     Max Bernstein <rubybugs@bernsteinbear.com>
  AuthorDate: 2026-01-30 03:02:33 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-30 03:02:33 +0900

    ZJIT: Support polymorphic send without block (#15949)

    Break out the different cases into different blocks in the bytecode to HIR parser. Use a `RefineType` to plumb the case's type through so the type specialization can see it. Then join the logic back to the rest of the current block after each case's send.

    lobsters before
    <details>

    ```
    ***ZJIT: Printing ZJIT statistics on exit***
    Top-20 not inlined C methods (58.7% of total 4,476,259):
                                                   Hash#fetch: 849,219 (19.0%)
                                           String#start_with?: 328,017 ( 7.3%)
                                                Regexp#match?: 148,149 ( 3.3%)
                                                    Hash#key?: 135,034 ( 3.0%)
                                                 Kernel#is_a?: 110,030 ( 2.5%)
                                                 Set#include?:  97,934 ( 2.2%)
                                                  Integer#===:  96,952 ( 2.2%)
                                        Process.clock_gettime:  92,795 ( 2.1%)
                                                  String#sub!:  84,940 ( 1.9%)
                                                   String.new:  80,730 ( 1.8%)
                                     SQLite3::Statement#done?:  73,532 ( 1.6%)
                                      SQLite3::Statement#step:  73,532 ( 1.6%)
                                   Time#plus_without_duration:  66,724 ( 1.5%)
                                                    String#<<:  63,954 ( 1.4%)
                                                    Time#to_i:  60,817 ( 1.4%)
                                                  Hash#delete:  60,664 ( 1.4%)
                                                  Time#subsec:  60,363 ( 1.3%)
                                                  String#hash:  51,261 ( 1.1%)
                                                      IO#read:  47,753 ( 1.1%)
                                                String#to_sym:  43,915 ( 1.0%)
    Top-20 calls to C functions from JIT code (83.7% of total 35,570,418):
                                 rb_vm_opt_send_without_block: 10,516,746 (29.6%)
                                              rb_vm_env_write:  2,382,117 ( 6.7%)
                         rb_zjit_writebarrier_check_immediate:  2,241,285 ( 6.3%)
                                                 rb_hash_aref:  2,189,588 ( 6.2%)
                                    rb_vm_getinstancevariable:  1,762,596 ( 5.0%)
                               rb_ivar_get_at_no_ractor_check:  1,702,246 ( 4.8%)
                                                   rb_vm_send:  1,460,754 ( 4.1%)
                                                 rb_hash_aset:  1,151,302 ( 3.2%)
                                    rb_vm_setinstancevariable:  1,029,286 ( 2.9%)
                                            rb_obj_is_kind_of:  1,000,979 ( 2.8%)
                                   rb_vm_opt_getconstant_path:    623,490 ( 1.8%)
                                            rb_vm_invokesuper:    595,831 ( 1.7%)
                                                   Hash#fetch:    562,212 ( 1.6%)
                                            rb_vm_invokeblock:    545,744 ( 1.5%)
                                   rb_class_allocate_instance:    422,454 ( 1.2%)
                                    rb_ec_ary_new_from_values:    388,035 ( 1.1%)
                                           String#start_with?:    328,017 ( 0.9%)
                                        rb_hash_new_with_size:    289,130 ( 0.8%)
                                                        fetch:    287,007 ( 0.8%)
                                            rb_vm_sendforward:    284,183 ( 0.8%)
    Top-1 not optimized method types for send (100.0% of total 428):
      null: 428 (100.0%)
    Top-3 not optimized method types for send_without_block (100.0% of total 102,413):
            optimized_send: 92,837 (90.6%)
                      null:  8,595 ( 8.4%)
      optimized_block_call:    981 ( 1.0%)
    Top-3 not optimized method types for super (100.0% of total 517,931):
        cfunc: 489,746 (94.6%)
        alias:  26,398 ( 5.1%)
      attrset:   1,787 ( 0.3%)
    Top-4 instructions with uncategorized fallback reason (100.0% of total 868,223):
                 invokeblock: 545,744 (62.9%)
                 sendforward: 284,183 (32.7%)
          invokesuperforward:  29,713 ( 3.4%)
      opt_send_without_block:   8,583 ( 1.0%)
    Top-20 send fallback reasons (100.0% of total 13,432,971):
                              send_without_block_polymorphic: 4,825,641 (35.9%)
                                        singleton_class_seen: 3,257,447 (24.2%)
                              send_without_block_no_profiles: 1,906,060 (14.2%)
                                               uncategorized:   868,223 ( 6.5%)
                                            send_no_profiles:   806,168 ( 6.0%)
                                one_or_more_complex_arg_pass:   537,965 ( 4.0%)
                             super_not_optimized_method_type:   517,931 ( 3.9%)
                              send_without_block_megamorphic:   158,893 ( 1.2%)
                                       too_many_args_for_lir:   127,160 ( 0.9%)
                                            send_polymorphic:   112,628 ( 0.8%)
            send_without_block_not_optimized_need_permission:   100,041 ( 0.7%)
      send_without_block_not_optimized_method_type_optimized:    93,818 ( 0.7%)
                                     super_complex_args_pass:    34,022 ( 0.3%)
                              super_target_complex_args_pass:    25,536 ( 0.2%)
                                           super_polymorphic:    16,853 ( 0.1%)
                                    obj_to_string_not_string:    13,794 ( 0.1%)
                                         argc_param_mismatch:     9,927 ( 0.1%)
                send_without_block_not_optimized_method_type:     8,595 ( 0.1%)
                  send_without_block_direct_keyword_mismatch:     5,568 ( 0.0%)
                                            send_megamorphic:     4,525 ( 0.0%)
    Top-4 setivar fallback reasons (100.0% of total 1,029,286):
                not_monomorphic: 992,723 (96.4%)
                   not_t_object:  21,354 ( 2.1%)
                    too_complex:  15,188 ( 1.5%)
      new_shape_needs_extension:      21 ( 0.0%)
    Top-2 getivar fallback reasons (100.0% of total 1,790,794):
      not_monomorphic: 1,750,108 (97.7%)
          too_complex:    40,686 ( 2.3%)
    Top-3 definedivar fallback reasons (100.0% of total 81,713):
      not_monomorphic: 80,197 (98.1%)
          too_complex:    796 ( 1.0%)
         not_t_object:    720 ( 0.9%)
    Top-6 invokeblock handler (100.0% of total 545,744):
       monomorphic_iseq: 249,809 (45.8%)
            polymorphic: 217,915 (39.9%)
      monomorphic_ifunc:  46,244 ( 8.5%)
      monomorphic_other:  27,938 ( 5.1%)
            megamorphic:   2,943 ( 0.5%)
            no_profiles:     895 ( 0.2%)
    Top-8 popular complex argument-parameter features not optimized (100.0% of total 652,565):
      param_forwardable: 246,421 (37.8%)
            param_block: 198,808 (30.5%)
             param_rest: 101,529 (15.6%)
           param_kwrest:  44,809 ( 6.9%)
        caller_blockarg:  24,596 ( 3.8%)
           caller_splat:  15,969 ( 2.4%)
        caller_kw_splat:  14,227 ( 2.2%)
           caller_kwarg:   6,206 ( 1.0%)
    Top-1 compile error reasons (100.0% of total 38,981):
      exception_handler: 38,981 (100.0%)
    Top-5 unhandled YARV insns (100.0% of total 4,154):
        getconstant: 2,566 (61.8%)
         checkmatch:   929 (22.4%)
      setblockparam:   443 (10.7%)
               once:   171 ( 4.1%)
        expandarray:    45 ( 1.1%)
    Top-3 unhandled HIR insns (100.0% of total 75,904):
              throw: 39,721 (52.3%)
      invokebuiltin: 35,772 (47.1%)
          array_max:    411 ( 0.5%)
    Top-20 side exit reasons (100.0% of total 3,770,125):
                      guard_shape_failure: 1,927,218 (51.1%)
                       guard_type_failure: 1,395,315 (37.0%)
      block_param_proxy_not_iseq_or_ifunc:   257,894 ( 6.8%)
                       unhandled_hir_insn:    75,904 ( 2.0%)
                            compile_error:    38,981 ( 1.0%)
         patchpoint_stable_constant_names:    25,375 ( 0.7%)
               block_param_proxy_modified:    13,713 ( 0.4%)
                   fixnum_lshift_overflow:    10,085 ( 0.3%)
                     fixnum_mult_overflow:     8,550 ( 0.2%)
                      unhandled_yarv_insn:     4,154 ( 0.1%)
                      unhandled_block_arg:     2,548 ( 0.1%)
             unhandled_newarray_send_pack:     2,322 ( 0.1%)
            patchpoint_no_singleton_class:     2,008 ( 0.1%)
                  patchpoint_no_ep_escape:     1,683 ( 0.0%)
                   obj_to_string_fallback:     1,358 ( 0.0%)
              patchpoint_method_redefined:     1,212 ( 0.0%)
                      expandarray_failure:       837 ( 0.0%)
                 guard_super_method_entry:       737 ( 0.0%)
                       guard_less_failure:       163 ( 0.0%)
                                interrupt:        49 ( 0.0%)
                                 send_count: 46,003,239
                         dynamic_send_count: 13,432,971 (29.2%)
                       optimized_send_count: 32,570,268 (70.8%)
                      dynamic_setivar_count:  1,029,286 ( 2.2%)
                      dynamic_getivar_count:  1,790,794 ( 3.9%)
                  dynamic_definedivar_count:     81,713 ( 0.2%)
                  iseq_optimized_send_count: 15,117,301 (32.9%)
          inline_cfunc_optimized_send_count: 11,837,918 (25.7%)
           inline_iseq_optimized_send_count:    884,606 ( 1.9%)
    non_variadic_cfunc_optimized_send_count:  2,597,998 ( 5.6%)
        variadic_cfunc_optimized_send_count:  2,132,445 ( 4.6%)
    compiled_iseq_count:                               5,259
    failed_iseq_count:                                     0
    compile_time:                                    1,409ms
    profile_time:                                       10ms
    gc_time:                                            11ms
    invalidation_time:                                  77ms
    vm_write_pc_count:                            40,924,587
    vm_write_sp_count:                            40,924,587
    vm_write_locals_count:                        39,740,467
    vm_write_stack_count:                         39,740,467
    vm_write_to_parent_iseq_local_count:             306,481
    vm_read_from_parent_iseq_local_count:          4,841,855
    guard_type_count:                             48,810,089
    guard_type_exit_ratio:                              2.9%
    guard_shape_count:                            19,485,073
    guard_shape_exit_ratio:                             9.9%
    code_region_bytes:                            27,262,976
    zjit_alloc_bytes:                             34,517,324
    total_mem_bytes:                              61,780,300
    side_exit_count:                               3,770,125
    total_insn_count:                            273,152,243
    vm_insn_count:                                43,926,931
    zjit_insn_count:                             229,225,312
    ratio_in_zjit:                                     83.9%
    ```

    </details>

    lobsters after
    <details>

    ```
    ***ZJIT: Printing ZJIT statistics on exit***
    Top-20 not inlined C methods (61.7% of total 5,220,252):
                                                   Hash#fetch: 1,274,409 (24.4%)
                                           String#start_with?:   328,017 ( 6.3%)
                                                Regexp#match?:   147,525 ( 2.8%)
                                                    Hash#key?:   139,198 ( 2.7%)
                                                 Kernel#is_a?:   110,178 ( 2.1%)
                                               Class#allocate:   107,143 ( 2.1%)
                                                  Hash#delete:   106,307 ( 2.0%)
                                             Class#superclass:    98,165 ( 1.9%)
                                                 Set#include?:    97,934 ( 1.9%)
                                                  Integer#===:    95,874 ( 1.8%)
                                        Process.clock_gettime:    92,795 ( 1.8%)
                                                  String#sub!:    80,732 ( 1.5%)
                                                   String.new:    80,730 ( 1.5%)
                                     SQLite3::Statement#done?:    73,532 ( 1.4%)
                                      SQLite3::Statement#step:    73,532 ( 1.4%)
                                   Time#plus_without_duration:    66,724 ( 1.3%)
                                                    String#<<:    63,954 ( 1.2%)
                                                   Kernel#dup:    62,590 ( 1.2%)
                                                    Time#to_i:    60,814 ( 1.2%)
                                                  Time#subsec:    60,363 ( 1.2%)
    Top-20 calls to C functions from JIT code (80.8% of total 33,681,248):
                                 rb_vm_opt_send_without_block: 6,869,559 (20.4%)
                                                 rb_hash_aref: 2,487,056 ( 7.4%)
                                              rb_vm_env_write: 2,372,693 ( 7.0%)
                         rb_zjit_writebarrier_check_immediate: 2,238,890 ( 6.6%)
                                    rb_vm_getinstancevariable: 1,861,700 ( 5.5%)
                               rb_ivar_get_at_no_ractor_check: 1,702,246 ( 5.1%)
                                                   rb_vm_send: 1,468,202 ( 4.4%)
                                                 rb_hash_aset: 1,267,469 ( 3.8%)
                                            rb_obj_is_kind_of: 1,126,363 ( 3.3%)
                                    rb_vm_setinstancevariable: 1,055,131 ( 3.1%)
                                                   Hash#fetch:   987,402 ( 2.9%)
                                   rb_vm_opt_getconstant_path:   641,779 ( 1.9%)
                                            rb_vm_invokesuper:   603,416 ( 1.8%)
                                            rb_vm_invokeblock:   545,743 ( 1.6%)
                                   rb_class_allocate_instance:   415,748 ( 1.2%)
                                    rb_ec_ary_new_from_values:   380,080 ( 1.1%)
                                           String#start_with?:   328,017 ( 1.0%)
                                        rb_hash_new_with_size:   289,172 ( 0.9%)
                                                        fetch:   287,007 ( 0.9%)
                                            rb_vm_sendforward:   283,885 ( 0.8%)
    Top-1 not optimized method types for send (100.0% of total 428):
      null: 428 (100.0%)
    Top-3 not optimized method types for send_without_block (100.0% of total 202,329):
            optimized_send: 190,504 (94.2%)
                      null:  10,844 ( 5.4%)
      optimized_block_call:     981 ( 0.5%)
    Top-3 not optimized method types for super (100.0% of total 517,421):
        cfunc: 489,236 (94.6%)
        alias:  26,398 ( 5.1%)
      attrset:   1,787 ( 0.3%)
    Top-4 instructions with uncategorized fallback reason (100.0% of total 867,452):
                 invokeblock: 545,743 (62.9%)
                 sendforward: 283,885 (32.7%)
          invokesuperforward:  29,713 ( 3.4%)
      opt_send_without_block:   8,111 ( 0.9%)
    Top-20 send fallback reasons (100.0% of total 9,800,518):
                                        singleton_class_seen: 3,293,078 (33.6%)
                              send_without_block_no_profiles: 2,142,301 (21.9%)
                                               uncategorized:   867,452 ( 8.9%)
                                            send_no_profiles:   820,538 ( 8.4%)
                              send_without_block_polymorphic:   780,065 ( 8.0%)
                                one_or_more_complex_arg_pass:   556,514 ( 5.7%)
                             super_not_optimized_method_type:   517,421 ( 5.3%)
      send_without_block_not_optimized_method_type_optimized:   191,485 ( 2.0%)
                              send_without_block_megamorphic:   161,550 ( 1.6%)
                                       too_many_args_for_lir:   127,190 ( 1.3%)
                                            send_polymorphic:   111,290 ( 1.1%)
            send_without_block_not_optimized_need_permission:    99,526 ( 1.0%)
                                           super_polymorphic:    45,651 ( 0.5%)
                                     super_complex_args_pass:    33,748 ( 0.3%)
                                    obj_to_string_not_string:    13,794 ( 0.1%)
                send_without_block_not_optimized_method_type:    10,844 ( 0.1%)
                                         argc_param_mismatch:     9,927 ( 0.1%)
                  send_without_block_direct_keyword_mismatch:     6,336 ( 0.1%)
                              super_target_complex_args_pass:     5,108 ( 0.1%)
                                            send_megamorphic:     4,525 ( 0.0%)
    Top-4 setivar fallback reasons (100.0% of total 1,123,837):
                not_monomorphic: 1,087,274 (96.7%)
                   not_t_object:    21,354 ( 1.9%)
                    too_complex:    15,188 ( 1.4%)
      new_shape_needs_extension:        21 ( 0.0%)
    Top-2 getivar fallback reasons (100.0% of total 2,132,203):
      not_monomorphic: 2,092,243 (98.1%)
          too_complex:    39,960 ( 1.9%)
    Top-3 definedivar fallback reasons (100.0% of total 107,264):
      not_monomorphic: 105,748 (98.6%)
          too_complex:     796 ( 0.7%)
         not_t_object:     720 ( 0.7%)
    Top-6 invokeblock handler (100.0% of total 545,743):
       monomorphic_iseq: 249,809 (45.8%)
            polymorphic: 217,914 (39.9%)
      monomorphic_ifunc:  46,244 ( 8.5%)
      monomorphic_other:  27,938 ( 5.1%)
            megamorphic:   2,943 ( 0.5%)
            no_profiles:     895 ( 0.2%)
    Top-8 popular complex argument-parameter features not optimized (100.0% of total 651,185):
      param_forwardable: 233,989 (35.9%)
            param_block: 205,158 (31.5%)
             param_rest: 100,319 (15.4%)
           param_kwrest:  44,596 ( 6.8%)
        caller_blockarg:  21,863 ( 3.4%)
        caller_kw_splat:  20,970 ( 3.2%)
           caller_splat:  18,106 ( 2.8%)
           caller_kwarg:   6,184 ( 0.9%)
    Top-1 compile error reasons (100.0% of total 38,980):
      exception_handler: 38,980 (100.0%)
    Top-5 unhandled YARV insns (100.0% of total 4,154):
        getconstant: 2,566 (61.8%)
         checkmatch:   929 (22.4%)
      setblockparam:   443 (10.7%)
               once:   171 ( 4.1%)
        expandarray:    45 ( 1.1%)
    Top-3 unhandled HIR insns (100.0% of total 75,633):
              throw: 39,447 (52.2%)
      invokebuiltin: 35,775 (47.3%)
          array_max:    411 ( 0.5%)
    Top-20 side exit reasons (100.0% of total 3,734,975):
                      guard_shape_failure: 1,908,302 (51.1%)
                       guard_type_failure: 1,391,624 (37.3%)
      block_param_proxy_not_iseq_or_ifunc:   246,820 ( 6.6%)
                       unhandled_hir_insn:    75,633 ( 2.0%)
                            compile_error:    38,980 ( 1.0%)
         patchpoint_stable_constant_names:    25,375 ( 0.7%)
               block_param_proxy_modified:    13,713 ( 0.4%)
                   fixnum_lshift_overflow:    10,085 ( 0.3%)
                     fixnum_mult_overflow:     8,550 ( 0.2%)
                      unhandled_yarv_insn:     4,154 ( 0.1%)
                      unhandled_block_arg:     2,548 ( 0.1%)
             unhandled_newarray_send_pack:     2,322 ( 0.1%)
            patchpoint_no_singleton_class:     2,008 ( 0.1%)
                  patchpoint_no_ep_escape:     1,683 ( 0.0%)
                   obj_to_string_fallback:     1,358 ( 0.0%)
                      expandarray_failure:       837 ( 0.0%)
              patchpoint_method_redefined:       710 ( 0.0%)
                       guard_less_failure:       163 ( 0.0%)
                 guard_super_method_entry:        53 ( 0.0%)
                                interrupt:        38 ( 0.0%)
                                 send_count: 45,128,693
                         dynamic_send_count:  9,800,518 (21.7%)
                       optimized_send_count: 35,328,175 (78.3%)
                      dynamic_setivar_count:  1,123,837 ( 2.5%)
                      dynamic_getivar_count:  2,132,203 ( 4.7%)
                  dynamic_definedivar_count:    107,264 ( 0.2%)
                  iseq_optimized_send_count: 15,891,453 (35.2%)
          inline_cfunc_optimized_send_count: 12,866,297 (28.5%)
           inline_iseq_optimized_send_count:  1,102,971 ( 2.4%)
    non_variadic_cfunc_optimized_send_count:  2,857,775 ( 6.3%)
        variadic_cfunc_optimized_send_count:  2,609,679 ( 5.8%)
    compiled_iseq_count:                               5,268
    failed_iseq_count:                                     0
    compile_time:                                    1,558ms
    profile_time:                                       10ms
    gc_time:                                            13ms
    invalidation_time:                                  84ms
    vm_write_pc_count:                            39,300,901
    vm_write_sp_count:                            39,300,901
    vm_write_locals_count:                        38,133,357
    vm_write_stack_count:                         38,133,357
    vm_write_to_parent_iseq_local_count:             305,249
    vm_read_from_parent_iseq_local_count:          4,818,083
    guard_type_count:                             48,036,224
    guard_type_exit_ratio:                              2.9%
    guard_shape_count:                            19,302,903
    guard_shape_exit_ratio:                             9.9%
    code_region_bytes:                            29,491,200
    zjit_alloc_bytes:                             34,932,040
    total_mem_bytes:                              64,423,240
    side_exit_count:                               3,734,975
    total_insn_count:                            272,964,960
    vm_insn_count:                                46,583,034
    zjit_insn_count:                             226,381,926
    ratio_in_zjit:                                     82.9%
    ```

    </details>

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit fbff0c936cc8b1a1c5f6fe51ea6e892721c200f1
  Author:     Jeff Zhang <jeff.j.zhang@shopify.com>
  AuthorDate: 2026-01-30 03:00:13 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-30 03:00:13 +0900

    ZJIT: Handle `nil` case for `getblockparamproxy` (#15986)

    Resolves https://github.com/Shopify/ruby/issues/772

    Adds profiling for the `getblockparamproxy` YARV instruction and handles the `nil` block case by pushing `nil` instead of the block proxy object, improves `ratio_in_zjit` a tiny bit (0.1%)

    Profiling data for `getblockparamproxy` on Lobsters
    ```
    Top-6 getblockparamproxy handler (100.0% of total 3,353,291):
      polymorphic: 2,337,372 (69.7%)
              nil:   552,629 (16.5%)
             iseq:   259,636 ( 7.7%)
      no_profiles:   156,734 ( 4.7%)
             proc:    40,223 ( 1.2%)
      megamorphic:     6,697 ( 0.2%)
    ```

    Lobsters benchmark stats:
    <details>
    <summary>Stats before (master):</summary>
    <p>

    ```
    ❯ ./run_benchmarks.rb --chruby 'ruby-zjit --zjit-stats' lobsters
    ***ZJIT: Printing ZJIT statistics on exit***
    ...
    Top-20 side exit reasons (100.0% of total 15,338,024):
                       guard_type_failure: 6,889,050 (44.9%)
                      guard_shape_failure: 6,848,898 (44.7%)
      block_param_proxy_not_iseq_or_ifunc: 1,008,525 ( 6.6%)
                       unhandled_hir_insn:   236,977 ( 1.5%)
                            compile_error:   191,763 ( 1.3%)
                     fixnum_mult_overflow:    50,739 ( 0.3%)
               block_param_proxy_modified:    28,119 ( 0.2%)
         patchpoint_stable_constant_names:    18,229 ( 0.1%)
             unhandled_newarray_send_pack:    14,481 ( 0.1%)
                      unhandled_block_arg:    13,782 ( 0.1%)
                   fixnum_lshift_overflow:    10,085 ( 0.1%)
                  patchpoint_no_ep_escape:     7,815 ( 0.1%)
                      unhandled_yarv_insn:     7,540 ( 0.0%)
                      expandarray_failure:     4,533 ( 0.0%)
                 guard_super_method_entry:     4,475 ( 0.0%)
              patchpoint_method_redefined:     1,207 ( 0.0%)
            patchpoint_no_singleton_class:     1,130 ( 0.0%)
                   obj_to_string_fallback:       412 ( 0.0%)
                       guard_less_failure:       163 ( 0.0%)
                                interrupt:        82 ( 0.0%)
    ...
    ratio_in_zjit:                                     82.1%
    ```
    </p>
    </details>

    <details>
    <summary>Stats after:</summary>
    <p>

    ```
    ❯ ./run_benchmarks.rb --chruby 'ruby-zjit --zjit-stats' lobsters
    ***ZJIT: Printing ZJIT statistics on exit***
    ...
    Top-20 side exit reasons (100.0% of total 15,061,422):
                       guard_type_failure: 6,892,934 (45.8%)
                      guard_shape_failure: 6,850,512 (45.5%)
      block_param_proxy_not_iseq_or_ifunc:   549,823 ( 3.7%)
                       unhandled_hir_insn:   236,979 ( 1.6%)
                            compile_error:   191,782 ( 1.3%)
                      unhandled_yarv_insn:   128,695 ( 0.9%)
                block_param_proxy_not_nil:    68,623 ( 0.5%)
                     fixnum_mult_overflow:    50,739 ( 0.3%)
         patchpoint_stable_constant_names:    18,568 ( 0.1%)
             unhandled_newarray_send_pack:    14,481 ( 0.1%)
               block_param_proxy_modified:    13,819 ( 0.1%)
                      unhandled_block_arg:    13,798 ( 0.1%)
                   fixnum_lshift_overflow:    10,085 ( 0.1%)
                  patchpoint_no_ep_escape:     7,815 ( 0.1%)
                      expandarray_failure:     4,533 ( 0.0%)
                 guard_super_method_entry:     4,475 ( 0.0%)
              patchpoint_method_redefined:     1,207 ( 0.0%)
                   obj_to_string_fallback:     1,140 ( 0.0%)
            patchpoint_no_singleton_class:     1,130 ( 0.0%)
                       guard_less_failure:       163 ( 0.0%)
    ...
    ratio_in_zjit:                                    82.2%
    ```
    </p>
    </details>

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit 5299276e421c3f11c944069fe5c655628634b9e1
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-28 18:35:27 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-29 20:01:39 +0900

    win32: Prevent broken substitution string when variable is undefined

    Avoids an issue where `%undefined:A=B%` expands to a literal `A=B`
    because the parser fails to find the variable before the colon, then
    parses the following percent as the next variable expansion.  Added a
    definition check to ensure safe expansion.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15997

commit b5ecfd1eba928d577d100fc3377375b55bf3cbb1
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-28 15:53:15 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-29 20:01:39 +0900

    Win32: Refactor target detection

    Previously, Visual C++ had only one toolchain for the x86 family, and
    the only option was to select the target processor level.

    In recent versions, there are multiple toolchains with the same
    command name for each host/target platform combination, so it is no
    longer possible to select the target with a command-line option. Also,
    configure.bat assumes that the toolchain has been configured before it
    is executed, so selecting it from this batch file is meaningless.

    Therefore, the only possible check is whether the specified target and
    compiler match.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15997

commit 6cc209600df111549c159ee828c900141ce98f00
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-28 13:12:02 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-29 20:01:39 +0900

    Win32: Make `optdirs` and `pathlist` macros overridable

    Also consider paths with space at splitting the `--with-opt-dir`
    argument.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15997

commit 1cc2e68fdc7cb85e5a581a96559fe00e86421998
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2024-11-22 10:19:46 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-29 20:01:39 +0900

    Win32: Refactor configure

    * Enable double-quoted options with an `=` sign.
    * Replace `$` with `$$` in the batch file without CPP.
    * Support for `--with-destdir`.
    * Allow Makefile macro definition. (Close GH-15935)

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15997

commit 6d07151eb141daffa0f36149dcff1cc044c37893
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-28 15:55:05 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-29 20:01:38 +0900

    Win32: Mark batch files in gitattributes

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15997

commit d3d1a97486136801f9a37d959f32652385ebc741
  Author:     Benoit Daloze <eregontp@gmail.com>
  AuthorDate: 2026-01-29 19:13:19 +0900
  Commit:     Benoit Daloze <eregontp@gmail.com>
  CommitDate: 2026-01-29 19:13:19 +0900

    Update to ruby/spec@8c98a84

commit e48ed4b979b5c9105238011707465c84a2154060
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-29 13:33:32 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-29 17:08:43 +0900

    Do not open to write the fixture files

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15996

commit d3ea389dec2914e8c247f83091ccea922aadae80
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-29 12:23:10 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-29 17:08:43 +0900

    Remove too platform sensitive assertions

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15996

commit 62493b572d2b6a6984cbbdc32db942dbf894d056
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-29 12:18:26 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-29 17:08:42 +0900

    Fix assertions not to be affected by the default encoding

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15996

commit cd26647f537e6c3d1ab3fe5675df47fdbddf8d48
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-29 15:30:10 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-01-29 16:36:27 +0900

    Remove dangling taintedness macros

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15995

commit ba8b0b3a9c867421166083c2eb35204c616beb4b
  Author:     git[bot] <svn-admin@ruby-lang.org>
  AuthorDate: 2026-01-29 16:04:29 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-29 16:04:29 +0900

    Update bundled gems list as of 2026-01-29

commit 6f16e87ff06c412edc0cac334b3c078aa0fafa22
  Author:     Masafumi Koba <473530+ybiquitous@users.noreply.github.com>
  AuthorDate: 2026-01-16 18:23:21 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-29 15:09:25 +0900

    [ruby/open-uri] Improve URI.open documentation with usage example

    This improves the `URI.open` method documentation by adding a code example requiring `open-uri` as a basic usage.

    When reading the current documentation first, I didn't realize that `open-uri` was required to call the method.
    I believe the improved version could be more helpful for new users.

    ```sh-session
    $ ruby -r uri -e 'p URI.open("http://example.com")'
    -e:1:in '<main>': private method 'open' called for module URI (NoMethodError)
    ```

    Ref https://docs.ruby-lang.org/en/master/URI.html#method-c-open

    Also, this improves formatting with code fonts for better readability.

    https://github.com/ruby/open-uri/commit/f4400edc27

commit 40e3e43b9380aa339b16471c7e9d9de6894f5ab3
  Author:     BurdetteLamar <burdettelamar@yahoo.com>
  AuthorDate: 2025-12-17 05:38:15 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-29 14:02:36 +0900

    [ruby/net-http] [DOC] Fix links in requests.rb

    https://github.com/ruby/net-http/commit/a232aea2fc

commit fa09afb15c9cf901d84e2963b86c4c7a7d0e104e
  Author:     Kevin Newton <kddnewton@gmail.com>
  AuthorDate: 2026-01-29 11:23:15 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-29 11:35:38 +0900

    [ruby/prism] Support `version: "nearest"`.

    This clamps to supported versions based on the current Ruby version.

    https://github.com/ruby/prism/commit/eb63748e8b

commit 0c30897d0bf579ee7be08fc828932e1bac1196aa
  Author:     Andrii Furmanets <furmanets.andriy@gmail.com>
  AuthorDate: 2025-11-24 02:19:22 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-29 11:05:46 +0900

    [ruby/rubygems] Remove outdated TODO in RemoteFetcher

    https://github.com/ruby/rubygems/commit/cc81b8b228

commit f2fde274506fa1731e576d9fca237764103b56db
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-01-27 18:28:44 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-29 07:36:57 +0900

    [ruby/rubygems] Only use parent source with Git and Path sources

    https://github.com/ruby/rubygems/commit/c5da276610

commit 554ca2eb622d1cfe886b419a54293d231a6c19f7
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-28 11:05:57 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-29 07:13:39 +0900

    [DOC] Fix broken link in Coverage.setup

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15987

commit c8f01d599b962a7ae0183795162cbdfd9ee7aeb3
  Author:     Benoit Daloze <eregontp@gmail.com>
  AuthorDate: 2026-01-29 06:31:09 +0900
  Commit:     Benoit Daloze <eregontp@gmail.com>
  CommitDate: 2026-01-29 07:01:22 +0900

    ruby/spec no longer supports 3.2

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15994

commit dbd2ff7adca9b49e4bfa7bc3ec8b83bd437f8cb7
  Author:     Benoit Daloze <eregontp@gmail.com>
  AuthorDate: 2026-01-29 06:30:21 +0900
  Commit:     Benoit Daloze <eregontp@gmail.com>
  CommitDate: 2026-01-29 07:01:22 +0900

    Update to ruby/spec@83e26c9

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15994

commit a8b877a843643fbdccd1a42efaf94ad27705dd55
  Author:     Benoit Daloze <eregontp@gmail.com>
  AuthorDate: 2026-01-29 06:30:20 +0900
  Commit:     Benoit Daloze <eregontp@gmail.com>
  CommitDate: 2026-01-29 07:01:22 +0900

    Update to ruby/mspec@5470479

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15994

commit 2d5460e4d78032584dbf261259a8b05b856dffdf
  Author:     Godfrey Chan <godfreykfc@gmail.com>
  AuthorDate: 2026-01-29 06:32:33 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-29 06:32:33 +0900

    ZJIT: Optimize send-with-block to iseq methods (#15911)

    ~~Two commits:~~

    ### zjit: Optimize send-with-block to iseq methods

    This commit enables JIT-to-JIT calls for send instructions with literal blocks (e.g., `foo { |x| x * 2 }`), rather than falling back to the `rb_vm_send` C wrapper. This optimization applies to both methods with explicit block parameters (`def foo(&block)`) and methods implicitly accepting a block (`def foo; yield if block_given?; end`).

    Prior to this change, any callsite with a block would miss out on the JIT-to-JIT fast path and goes through a `rb_vm_send` C wrapper call.

    Initially, as https://github.com/Shopify/ruby/issues/931 suggested, we assumed this would involve changes to the JIT-to-JIT calling convention to accommodate passing a block argument. However, during implementation, I discovered that @nirvdrum had already wired up the `specval` protocol used by the interpreter in their `invokesuper` work (https://github.com/ruby/ruby/pull/887). That infrastructure remained dormant but was exactly what we needed here. After plumbing everything through, it Just Worked™.

    It may be possible to design a more direct JIT-to-JIT protocol for passing blocks. In the HIR for `def foo(&block)`, the BB for the JIT entrypoint already takes two arguments (self + &block, presumably), and since `yield` is a keyword, it may be possible to rewrite the implicit case to be explicit (thanks @tenderlove for the idea), and do "better" than passing via `specval`.

    I'm not sure if that's a goal eventually, but in any case, if `specval` works, there is no harm in enabling this optimization today.

    Implementation notes:

    This initial pass largely duplicates the existing `SendWithoutBlock` to `SendWithoutBlockDirect` specialization logic. A future refactor could potentially collapse Send and SendWithoutBlock into a single instruction variant (with `blockiseq: Option<IseqPtr>`, you can always pattern match the Option if needed), since they now follow very similar paths.

    However, I wanted to keep this PR focused and also get feedback on that direction first before committing to such a big refactor.

    The optimization currently handles `VM_METHOD_TYPE_ISEQ` only. It does not handle "block to block" `VM_METHOD_TYPE_BMETHOD`. It's unclear if that'd be all that difficult, I just didn't try. Happy to do it as a follow-up.

    Any callsites not handled by this specialization continue to fallthrough to the existing rb_vm_send harness safely.

    Test coverage includes both explicit block parameters and yield-based methods.

    Thanks to @tenderlove for initial ideas and walkthrough, and @nirvdrum for the foundation this builds on.

    Closes https://github.com/Shopify/ruby/issues/931

    ### ~~zjit: Allow SendWithoutBlockDirect to def f(&blk)~~

    Saving this for another time

    ### Follow-ups

    * [ ] Refactor and simplify by merging `hir::Insn::Send` and `hir::Insn::SendWithoutBlock`. (Pending feedback/approval.)
    * [ ] Handle block-to-block `VM_METHOD_TYPE_BMETHOD` calls. It appears that `gen_send_iseq_direct` already attempted to handle it.
    * [ ] As far as I can tell, we should be able to just enable `super { ... }` too, happy to do that as a follow-up if @nirvdrum doesn't have time for it.

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit 72f11c8bfaedb4260fe9d29b2f9bd26d83b8c18a
  Author:     Luke Gruber <luke.gruber@shopify.com>
  AuthorDate: 2026-01-29 05:37:14 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-29 05:37:14 +0900

    Attempt to fix failing monitor test (#15992)

  Notes:
    Merged-By: luke-gru <luke.gru@gmail.com>

commit 8d41e57efe2e985e9496e91d63ba25ef0df2399b
  Author:     Luke Gruber <luke.gruber@shopify.com>
  AuthorDate: 2026-01-29 02:32:59 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-29 02:32:59 +0900

    Revert "Prevent starvation when acquiring mutex over and over (#15877)" (#15990)

    This reverts commit 994257ab06072df38de024e70a60aa9a87e36089.

    I saw some failures in CI that are probably related to the change.
    Example:

    ```
     1) Failure:
      TestMonitor#test_timedwait [/Users/runner/work/ruby/ruby/src/test/monitor/test_monitor.rb:282]:
    ```

    This starvation problem has not been an issue in real apps afaik, so for now it's best to revert
    it and think of a better solution.

  Notes:
    Merged-By: luke-gru <luke.gru@gmail.com>

commit 01ace0655ed84708f0afdcc74fb779e680bfc4e0
  Author:     Kevin Newton <kddnewton@gmail.com>
  AuthorDate: 2026-01-28 23:12:51 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-28 23:58:55 +0900

    [ruby/prism] Remove tokens from lex compat

    Instead of having custom classes, use arrays and track which tokens
    we should ignore the state for in the test.

    https://github.com/ruby/prism/commit/a333b56ada

commit 3b22e32fa50c2c18663be87dad4d11a266954773
  Author:     Kevin Newton <kddnewton@gmail.com>
  AuthorDate: 2026-01-28 22:44:13 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-28 22:53:48 +0900

    [ruby/prism] Use align keywords instead of the header

    OpenBSD is advertising to the preprocessor that it supports C11
    but does not include the stdalign.h header. We do not actually need
    the header, since we can just use the keywords.

    https://github.com/ruby/prism/commit/b3e2708fff

commit bea48adbcacc29cce9536977e15ceba0d65c8a02
  Author:     Kuba Suder <mackuba@users.noreply.github.com>
  AuthorDate: 2026-01-28 11:48:37 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-28 11:48:37 +0900

    [DOC] fixed pid shown in the doc comment on fork

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15988

    Merged-By: nobu <nobu@ruby-lang.org>

commit 5eb17ea4aae32d657c1816de64acd3ef7abb454f
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-28 07:07:32 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-28 07:11:52 +0900

    [DOC] Fix hash style in Hash#flatten

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15985

commit d5616094f4625cc4ba96c28c3c84967af742a1dc
  Author:     Kevin Newton <kddnewton@gmail.com>
  AuthorDate: 2026-01-28 05:50:58 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-28 05:51:32 +0900

    [ruby/prism] Mark insert_on_sp as private

    https://github.com/ruby/prism/commit/db72066cde

commit 5c15f9380f9782750ee223140108950a5262075e
  Author:     Benoit Daloze <eregontp@gmail.com>
  AuthorDate: 2026-01-28 05:20:48 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-28 05:49:02 +0900

    [ruby/prism] Use the terminology "column in bytes/characters/code units"

    * Consistent and clear.
    * Avoids the confusion that "column number" might be understood
      as a column in an editor starting at 1 (they all start at 0).

    https://github.com/ruby/prism/commit/91f1c4b9d5

commit 1cd32536a56adc81e3a0f861ad43e5aaf8457a28
  Author:     Kevin Newton <kddnewton@gmail.com>
  AuthorDate: 2026-01-28 05:42:24 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-28 05:48:49 +0900

    [ruby/prism] Mark STATES as a private constant

    https://github.com/ruby/prism/commit/c78f742581

commit af4a1ca021845837fd7bfb1e1b4b5abd7e336c34
  Author:     Kevin Newton <kddnewton@gmail.com>
  AuthorDate: 2026-01-27 11:36:20 +0900
  Commit:     Kevin Newton <kddnewton@gmail.com>
  CommitDate: 2026-01-28 05:30:45 +0900

    Use slices instead of locations

    In the C API, we want to use slices instead of locations in the
    AST. In this case a "slice" is effectively the same thing as the
    location, expect it is represented using a 32-bit offset and a
    32-bit length. This will cut down on half of the space of all of
    the locations in the AST.

    Note that from the Ruby/Java/JavaScript side, this is effectively
    an invisible change. This only impacts the C/Rust side.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15979

commit ec154654a99c07d065108e9c31793eb9ccbd9ad0
  Author:     Kevin Newton <kddnewton@gmail.com>
  AuthorDate: 2026-01-28 05:20:36 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-28 05:30:23 +0900

    [ruby/prism] Bump to v1.9.0

    https://github.com/ruby/prism/commit/e722e577ef

commit 68902e3593d3cfeb219164270d633036deb9b240
  Author:     Kevin Newton <kddnewton@gmail.com>
  AuthorDate: 2026-01-28 05:08:55 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-28 05:17:12 +0900

    [ruby/prism] Add Prism::Node#find_all

    https://github.com/ruby/prism/commit/51df90ef04

commit c983b7aee631db46002ba7438089d792c2b0298b
  Author:     Kevin Newton <kddnewton@gmail.com>
  AuthorDate: 2026-01-28 04:55:09 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-28 05:06:22 +0900

    [ruby/prism] Rename line_to_byte_offset -> byte_offset

    Also, include the column in here. Hopefully we can do some additional
    optimizations later.

    https://github.com/ruby/prism/commit/7759acdd26

commit 39b28e67a6363f9ffe1f478298984414083c96d4
  Author:     Randy Stauner <randy@r4s6.net>
  AuthorDate: 2026-01-28 05:00:33 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-28 05:00:33 +0900

    ZJIT: Remove unused import to eliminate build warning (#15984)

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit 6f6ed79a97a2e816a54a1289fd1f33e238ce22c4
  Author:     Nozomi Hijikata <121233810+nozomemein@users.noreply.github.com>
  AuthorDate: 2026-01-28 04:53:24 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-28 04:53:24 +0900

    ZJIT: Compile invokesuperforward (#15958)

    Closes: https://github.com/Shopify/ruby/issues/862

    Add dynamic dispatch for `invokesuperforward` instruction as a first step.
    Specialization like YJIT’s is not implemented yet and will be handled separately.

    ## Benchmark
    ### lobsters

    <details>

    <summary>before patch</summary>

    ```
    Average of last 10, non-warmup iters: 654ms
    ***ZJIT: Printing ZJIT statistics on exit***
    Top-20 not inlined C methods (59.5% of total 15,599,811):
                                                   Hash#fetch: 3,185,110 (20.4%)
                                                Regexp#match?:   708,802 ( 4.5%)
                                                    Hash#key?:   696,422 ( 4.5%)
                                                  String#sub!:   489,840 ( 3.1%)
                                                 Set#include?:   396,625 ( 2.5%)
                                                    String#<<:   396,279 ( 2.5%)
                                           String#start_with?:   379,336 ( 2.4%)
                                                  Hash#delete:   325,992 ( 2.1%)
                                                   String.new:   307,248 ( 2.0%)
                                                  Integer#===:   279,054 ( 1.8%)
                                             Symbol#end_with?:   255,539 ( 1.6%)
                                                 Kernel#is_a?:   246,961 ( 1.6%)
                                        Process.clock_gettime:   221,588 ( 1.4%)
                                                    Integer#>:   219,718 ( 1.4%)
                                                String#match?:   218,056 ( 1.4%)
                                                   Integer#<=:   202,617 ( 1.3%)
                                                    Time#to_i:   192,214 ( 1.2%)
                                                  Time#subsec:   189,240 ( 1.2%)
                                                String#to_sym:   185,593 ( 1.2%)
                                              String#include?:   182,862 ( 1.2%)
    Top-20 calls to C functions from JIT code (83.7% of total 126,406,213):
                                 rb_vm_opt_send_without_block: 37,054,888 (29.3%)
                                                   rb_vm_send: 10,068,319 ( 8.0%)
                                              rb_vm_env_write:  8,529,584 ( 6.7%)
                                                 rb_hash_aref:  8,014,188 ( 6.3%)
                         rb_zjit_writebarrier_check_immediate:  7,697,828 ( 6.1%)
                                    rb_vm_getinstancevariable:  5,954,987 ( 4.7%)
                               rb_ivar_get_at_no_ractor_check:  4,759,191 ( 3.8%)
                                            rb_obj_is_kind_of:  3,722,656 ( 2.9%)
                                            rb_vm_invokesuper:  2,663,433 ( 2.1%)
                                                 rb_hash_aset:  2,416,121 ( 1.9%)
                                    rb_vm_setinstancevariable:  2,355,463 ( 1.9%)
                                   rb_vm_opt_getconstant_path:  2,297,784 ( 1.8%)
                                                   Hash#fetch:  1,779,524 ( 1.4%)
                                                        fetch:  1,405,586 ( 1.1%)
                                            rb_vm_invokeblock:  1,385,970 ( 1.1%)
                                            rb_str_buf_append:  1,369,178 ( 1.1%)
                                    rb_ec_ary_new_from_values:  1,336,805 ( 1.1%)
                                   rb_class_allocate_instance:  1,281,590 ( 1.0%)
                                        rb_hash_new_with_size:    899,859 ( 0.7%)
                                            rb_vm_sendforward:    798,572 ( 0.6%)
    Top-2 not optimized method types for send (100.0% of total 4,889,764):
      iseq: 4,886,942 (99.9%)
      null:     2,822 ( 0.1%)
    Top-3 not optimized method types for send_without_block (100.0% of total 525,349):
            optimized_send: 478,875 (91.2%)
                      null:  42,175 ( 8.0%)
      optimized_block_call:   4,299 ( 0.8%)
    Top-3 not optimized method types for super (100.0% of total 2,350,295):
        cfunc: 2,239,567 (95.3%)
        alias:   107,374 ( 4.6%)
      attrset:     3,354 ( 0.1%)
    Top-3 instructions with uncategorized fallback reason (100.0% of total 2,216,938):
                 invokeblock: 1,385,970 (62.5%)
                 sendforward:   798,572 (36.0%)
      opt_send_without_block:    32,396 ( 1.5%)
    Top-20 send fallback reasons (99.9% of total 51,971,182):
                              send_without_block_polymorphic: 18,639,354 (35.9%)
                                        singleton_class_seen:  9,274,307 (17.8%)
                              send_without_block_no_profiles:  7,217,551 (13.9%)
                              send_not_optimized_method_type:  4,889,764 ( 9.4%)
                                            send_no_profiles:  2,882,604 ( 5.5%)
                             super_not_optimized_method_type:  2,350,295 ( 4.5%)
                                               uncategorized:  2,216,938 ( 4.3%)
                                one_or_more_complex_arg_pass:  1,543,405 ( 3.0%)
                              send_without_block_megamorphic:    723,037 ( 1.4%)
                                            send_polymorphic:    544,570 ( 1.0%)
      send_without_block_not_optimized_method_type_optimized:    483,174 ( 0.9%)
            send_without_block_not_optimized_need_permission:    390,366 ( 0.8%)
                                       too_many_args_for_lir:    312,568 ( 0.6%)
                                     super_complex_args_pass:    111,053 ( 0.2%)
                              super_target_complex_args_pass:    104,723 ( 0.2%)
                                           super_polymorphic:     87,851 ( 0.2%)
                                         argc_param_mismatch:     50,382 ( 0.1%)
                send_without_block_not_optimized_method_type:     42,175 ( 0.1%)
                                    obj_to_string_not_string:     34,861 ( 0.1%)
                  send_without_block_direct_keyword_mismatch:     32,436 ( 0.1%)
    Top-4 setivar fallback reasons (100.0% of total 2,355,463):
                not_monomorphic: 2,132,748 (90.5%)
                   not_t_object:   125,163 ( 5.3%)
                    too_complex:    97,531 ( 4.1%)
      new_shape_needs_extension:        21 ( 0.0%)
    Top-2 getivar fallback reasons (100.0% of total 6,080,097):
      not_monomorphic: 5,808,527 (95.5%)
          too_complex:   271,570 ( 4.5%)
    Top-3 definedivar fallback reasons (100.0% of total 405,302):
      not_monomorphic: 397,150 (98.0%)
          too_complex:   5,122 ( 1.3%)
         not_t_object:   3,030 ( 0.7%)
    Top-6 invokeblock handler (100.0% of total 1,385,970):
       monomorphic_iseq: 688,147 (49.7%)
            polymorphic: 523,864 (37.8%)
      monomorphic_other: 106,268 ( 7.7%)
      monomorphic_ifunc:  55,505 ( 4.0%)
            megamorphic:   6,762 ( 0.5%)
            no_profiles:   5,424 ( 0.4%)
    Top-8 popular complex argument-parameter features not optimized (100.0% of total 1,850,659):
      param_forwardable: 685,936 (37.1%)
            param_block: 641,355 (34.7%)
             param_rest: 327,046 (17.7%)
           param_kwrest: 120,210 ( 6.5%)
        caller_kw_splat:  36,147 ( 2.0%)
           caller_splat:  34,029 ( 1.8%)
        caller_blockarg:   5,826 ( 0.3%)
           caller_kwarg:     110 ( 0.0%)
    Top-1 compile error reasons (100.0% of total 191,769):
      exception_handler: 191,769 (100.0%)
    Top-6 unhandled YARV insns (100.0% of total 89,278):
      invokesuperforward: 81,667 (91.5%)
             getconstant:  3,318 ( 3.7%)
           setblockparam:  2,837 ( 3.2%)
              checkmatch:    929 ( 1.0%)
             expandarray:    360 ( 0.4%)
                    once:    167 ( 0.2%)
    Top-3 unhandled HIR insns (100.0% of total 236,976):
              throw: 198,481 (83.8%)
      invokebuiltin:  35,774 (15.1%)
          array_max:   2,721 ( 1.1%)
    Top-20 side exit reasons (100.0% of total 15,409,202):
                       guard_type_failure: 6,871,609 (44.6%)
                      guard_shape_failure: 6,854,409 (44.5%)
      block_param_proxy_not_iseq_or_ifunc: 1,008,346 ( 6.5%)
                       unhandled_hir_insn:   236,976 ( 1.5%)
                            compile_error:   191,769 ( 1.2%)
                      unhandled_yarv_insn:    89,278 ( 0.6%)
                     fixnum_mult_overflow:    50,739 ( 0.3%)
               block_param_proxy_modified:    28,119 ( 0.2%)
         patchpoint_stable_constant_names:    19,872 ( 0.1%)
             unhandled_newarray_send_pack:    14,481 ( 0.1%)
                      unhandled_block_arg:    13,787 ( 0.1%)
                   fixnum_lshift_overflow:    10,085 ( 0.1%)
                  patchpoint_no_ep_escape:     7,815 ( 0.1%)
                      expandarray_failure:     4,532 ( 0.0%)
                 guard_super_method_entry:     4,475 ( 0.0%)
              patchpoint_method_redefined:     1,212 ( 0.0%)
            patchpoint_no_singleton_class:     1,130 ( 0.0%)
                   obj_to_string_fallback:       275 ( 0.0%)
                       guard_less_failure:       163 ( 0.0%)
                                interrupt:       111 ( 0.0%)
                                 send_count: 152,221,918
                         dynamic_send_count:  51,971,182 (34.1%)
                       optimized_send_count: 100,250,736 (65.9%)
                      dynamic_setivar_count:   2,355,463 ( 1.5%)
                      dynamic_getivar_count:   6,080,097 ( 4.0%)
                  dynamic_definedivar_count:     405,302 ( 0.3%)
                  iseq_optimized_send_count:  40,162,692 (26.4%)
          inline_cfunc_optimized_send_count:  40,296,415 (26.5%)
           inline_iseq_optimized_send_count:   3,344,046 ( 2.2%)
    non_variadic_cfunc_optimized_send_count:   8,915,909 ( 5.9%)
        variadic_cfunc_optimized_send_count:   7,531,674 ( 4.9%)
    compiled_iseq_count:                               5,554
    failed_iseq_count:                                     0
    compile_time:                                    1,779ms
    profile_time:                                       13ms
    gc_time:                                            19ms
    invalidation_time:                                 248ms
    vm_write_pc_count:                           133,179,978
    vm_write_sp_count:                           133,179,978
    vm_write_locals_count:                       129,160,863
    vm_write_stack_count:                        129,160,863
    vm_write_to_parent_iseq_local_count:             693,262
    vm_read_from_parent_iseq_local_count:         14,736,626
    guard_type_count:                            157,425,618
    guard_type_exit_ratio:                              4.4%
    guard_shape_count:                            64,005,824
    guard_shape_exit_ratio:                            10.7%
    code_region_bytes:                            29,147,136
    zjit_alloc_bytes:                             44,468,338
    total_mem_bytes:                              73,615,474
    side_exit_count:                              15,409,202
    total_insn_count:                            934,468,730
    vm_insn_count:                               166,726,703
    zjit_insn_count:                             767,742,027
    ratio_in_zjit:                                     82.2%
    ```

    </details>

    <details>

    <summary>after patch</summary>

    ```
    Average of last 10, non-warmup iters: 648ms
    ***ZJIT: Printing ZJIT statistics on exit***
    Top-20 not inlined C methods (59.5% of total 15,571,939):
                                                   Hash#fetch: 3,185,114 (20.5%)
                                                Regexp#match?:   708,795 ( 4.6%)
                                                    Hash#key?:   696,422 ( 4.5%)
                                                  String#sub!:   489,841 ( 3.1%)
                                                 Set#include?:   396,625 ( 2.5%)
                                                    String#<<:   396,279 ( 2.5%)
                                           String#start_with?:   370,465 ( 2.4%)
                                                  Hash#delete:   325,992 ( 2.1%)
                                                   String.new:   307,248 ( 2.0%)
                                                  Integer#===:   277,929 ( 1.8%)
                                             Symbol#end_with?:   255,540 ( 1.6%)
                                                 Kernel#is_a?:   246,961 ( 1.6%)
                                        Process.clock_gettime:   221,588 ( 1.4%)
                                                    Integer#>:   219,718 ( 1.4%)
                                                String#match?:   218,057 ( 1.4%)
                                                   Integer#<=:   202,617 ( 1.3%)
                                                    Time#to_i:   192,214 ( 1.2%)
                                                  Time#subsec:   189,240 ( 1.2%)
                                                String#to_sym:   185,593 ( 1.2%)
                                              String#include?:   182,863 ( 1.2%)
    Top-20 calls to C functions from JIT code (83.7% of total 126,248,940):
                                 rb_vm_opt_send_without_block: 36,875,422 (29.2%)
                                                   rb_vm_send: 10,068,311 ( 8.0%)
                                              rb_vm_env_write:  8,529,572 ( 6.8%)
                                                 rb_hash_aref:  8,014,184 ( 6.3%)
                         rb_zjit_writebarrier_check_immediate:  7,697,776 ( 6.1%)
                                    rb_vm_getinstancevariable:  5,934,206 ( 4.7%)
                               rb_ivar_get_at_no_ractor_check:  4,759,185 ( 3.8%)
                                            rb_obj_is_kind_of:  3,745,913 ( 3.0%)
                                            rb_vm_invokesuper:  2,663,429 ( 2.1%)
                                                 rb_hash_aset:  2,416,112 ( 1.9%)
                                    rb_vm_setinstancevariable:  2,361,107 ( 1.9%)
                                   rb_vm_opt_getconstant_path:  2,294,768 ( 1.8%)
                                                   Hash#fetch:  1,779,524 ( 1.4%)
                                                        fetch:  1,405,590 ( 1.1%)
                                            rb_vm_invokeblock:  1,385,975 ( 1.1%)
                                            rb_str_buf_append:  1,369,179 ( 1.1%)
                                    rb_ec_ary_new_from_values:  1,336,806 ( 1.1%)
                                   rb_class_allocate_instance:  1,281,533 ( 1.0%)
                                        rb_hash_new_with_size:    899,857 ( 0.7%)
                                            rb_vm_sendforward:    798,572 ( 0.6%)
    Top-2 not optimized method types for send (100.0% of total 4,889,758):
      iseq: 4,886,936 (99.9%)
      null:     2,822 ( 0.1%)
    Top-3 not optimized method types for send_without_block (100.0% of total 525,350):
            optimized_send: 478,875 (91.2%)
                      null:  42,176 ( 8.0%)
      optimized_block_call:   4,299 ( 0.8%)
    Top-3 not optimized method types for super (100.0% of total 2,350,289):
        cfunc: 2,239,565 (95.3%)
        alias:   107,374 ( 4.6%)
      attrset:     3,350 ( 0.1%)
    Top-4 instructions with uncategorized fallback reason (100.0% of total 2,298,609):
                 invokeblock: 1,385,975 (60.3%)
                 sendforward:   798,572 (34.7%)
          invokesuperforward:    81,666 ( 3.6%)
      opt_send_without_block:    32,396 ( 1.4%)
    Top-20 send fallback reasons (99.9% of total 51,873,375):
                              send_without_block_polymorphic: 18,540,291 (35.7%)
                                        singleton_class_seen:  9,210,394 (17.8%)
                              send_without_block_no_profiles:  7,202,051 (13.9%)
                              send_not_optimized_method_type:  4,889,758 ( 9.4%)
                                            send_no_profiles:  2,882,602 ( 5.6%)
                             super_not_optimized_method_type:  2,350,289 ( 4.5%)
                                               uncategorized:  2,298,609 ( 4.4%)
                                one_or_more_complex_arg_pass:  1,543,404 ( 3.0%)
                              send_without_block_megamorphic:    723,037 ( 1.4%)
                                            send_polymorphic:    544,570 ( 1.0%)
      send_without_block_not_optimized_method_type_optimized:    483,174 ( 0.9%)
            send_without_block_not_optimized_need_permission:    389,384 ( 0.8%)
                                       too_many_args_for_lir:    312,568 ( 0.6%)
                                     super_complex_args_pass:    111,054 ( 0.2%)
                              super_target_complex_args_pass:    104,723 ( 0.2%)
                                           super_polymorphic:     87,852 ( 0.2%)
                                         argc_param_mismatch:     50,382 ( 0.1%)
                send_without_block_not_optimized_method_type:     42,176 ( 0.1%)
                                    obj_to_string_not_string:     34,853 ( 0.1%)
                  send_without_block_direct_keyword_mismatch:     32,436 ( 0.1%)
    Top-4 setivar fallback reasons (100.0% of total 2,361,107):
                not_monomorphic: 2,138,392 (90.6%)
                   not_t_object:   125,163 ( 5.3%)
                    too_complex:    97,531 ( 4.1%)
      new_shape_needs_extension:        21 ( 0.0%)
    Top-2 getivar fallback reasons (100.0% of total 6,059,319):
      not_monomorphic: 5,787,746 (95.5%)
          too_complex:   271,573 ( 4.5%)
    Top-3 definedivar fallback reasons (100.0% of total 405,302):
      not_monomorphic: 397,150 (98.0%)
          too_complex:   5,122 ( 1.3%)
         not_t_object:   3,030 ( 0.7%)
    Top-6 invokeblock handler (100.0% of total 1,385,975):
       monomorphic_iseq: 688,157 (49.7%)
            polymorphic: 523,861 (37.8%)
      monomorphic_other: 106,268 ( 7.7%)
      monomorphic_ifunc:  55,505 ( 4.0%)
            megamorphic:   6,760 ( 0.5%)
            no_profiles:   5,424 ( 0.4%)
    Top-8 popular complex argument-parameter features not optimized (100.0% of total 1,850,658):
      param_forwardable: 685,941 (37.1%)
            param_block: 641,355 (34.7%)
             param_rest: 327,046 (17.7%)
           param_kwrest: 120,209 ( 6.5%)
        caller_kw_splat:  36,147 ( 2.0%)
           caller_splat:  34,029 ( 1.8%)
        caller_blockarg:   5,821 ( 0.3%)
           caller_kwarg:     110 ( 0.0%)
    Top-1 compile error reasons (100.0% of total 191,769):
      exception_handler: 191,769 (100.0%)
    Top-5 unhandled YARV insns (100.0% of total 7,611):
        getconstant: 3,318 (43.6%)
      setblockparam: 2,837 (37.3%)
         checkmatch:   929 (12.2%)
        expandarray:   360 ( 4.7%)
               once:   167 ( 2.2%)
    Top-3 unhandled HIR insns (100.0% of total 236,976):
              throw: 198,481 (83.8%)
      invokebuiltin:  35,774 (15.1%)
          array_max:   2,721 ( 1.1%)
    Top-20 side exit reasons (100.0% of total 15,343,302):
                       guard_type_failure: 6,886,972 (44.9%)
                      guard_shape_failure: 6,854,835 (44.7%)
      block_param_proxy_not_iseq_or_ifunc: 1,008,346 ( 6.6%)
                       unhandled_hir_insn:   236,976 ( 1.5%)
                            compile_error:   191,769 ( 1.2%)
                     fixnum_mult_overflow:    50,739 ( 0.3%)
               block_param_proxy_modified:    28,119 ( 0.2%)
         patchpoint_stable_constant_names:    19,858 ( 0.1%)
             unhandled_newarray_send_pack:    14,481 ( 0.1%)
                      unhandled_block_arg:    13,787 ( 0.1%)
                   fixnum_lshift_overflow:    10,085 ( 0.1%)
                  patchpoint_no_ep_escape:     7,815 ( 0.1%)
                      unhandled_yarv_insn:     7,611 ( 0.0%)
                      expandarray_failure:     4,533 ( 0.0%)
                 guard_super_method_entry:     4,475 ( 0.0%)
              patchpoint_method_redefined:     1,212 ( 0.0%)
            patchpoint_no_singleton_class:     1,130 ( 0.0%)
                   obj_to_string_fallback:       275 ( 0.0%)
                       guard_less_failure:       163 ( 0.0%)
                                interrupt:       102 ( 0.0%)
                                 send_count: 152,019,764
                         dynamic_send_count:  51,873,375 (34.1%)
                       optimized_send_count: 100,146,389 (65.9%)
                      dynamic_setivar_count:   2,361,107 ( 1.6%)
                      dynamic_getivar_count:   6,059,319 ( 4.0%)
                  dynamic_definedivar_count:     405,302 ( 0.3%)
                  iseq_optimized_send_count:  40,149,182 (26.4%)
          inline_cfunc_optimized_send_count:  40,168,875 (26.4%)
           inline_iseq_optimized_send_count:   3,408,619 ( 2.2%)
    non_variadic_cfunc_optimized_send_count:   8,896,927 ( 5.9%)
        variadic_cfunc_optimized_send_count:   7,522,786 ( 4.9%)
    compiled_iseq_count:                               5,554
    failed_iseq_count:                                     0
    compile_time:                                    1,784ms
    profile_time:                                       13ms
    gc_time:                                            19ms
    invalidation_time:                                 261ms
    vm_write_pc_count:                           133,027,580
    vm_write_sp_count:                           133,027,580
    vm_write_locals_count:                       129,024,228
    vm_write_stack_count:                        129,024,228
    vm_write_to_parent_iseq_local_count:             693,264
    vm_read_from_parent_iseq_local_count:         14,727,716
    guard_type_count:                            157,500,381
    guard_type_exit_ratio:                              4.4%
    guard_shape_count:                            64,160,894
    guard_shape_exit_ratio:                            10.7%
    code_region_bytes:                            29,196,288
    zjit_alloc_bytes:                             44,686,498
    total_mem_bytes:                              73,882,786
    side_exit_count:                              15,343,302
    total_insn_count:                            934,219,385
    vm_insn_count:                               167,485,651
    zjit_insn_count:                             766,733,734
    ratio_in_zjit:                                     82.1%
    ```

    </details>




    ### rails-bench

    <details>

    <summary>before patch</summary>

    ```
    Average of last 10, non-warmup iters: 1146ms
    ***ZJIT: Printing ZJIT statistics on exit***
    Top-20 not inlined C methods (52.4% of total 38,306,776):
                                      Hash#key?: 3,141,619 ( 8.2%)
                                  Regexp#match?: 2,420,225 ( 6.3%)
                                     Hash#fetch: 2,245,557 ( 5.9%)
                                    Integer#===: 1,098,163 ( 2.9%)
                                    Hash#delete: 1,014,375 ( 2.6%)
                                     Array#any?: 1,007,766 ( 2.6%)
                                     String.new: 1,004,713 ( 2.6%)
                                       String#b:   797,913 ( 2.1%)
                                  String#to_sym:   680,943 ( 1.8%)
                                     Array#all?:   650,132 ( 1.7%)
                                  Fiber.current:   649,003 ( 1.7%)
                                     Array#join:   641,038 ( 1.7%)
                                 Array#include?:   613,837 ( 1.6%)
                                   Kernel#Array:   610,311 ( 1.6%)
                                      String#<<:   606,240 ( 1.6%)
                               Symbol#end_with?:   598,807 ( 1.6%)
                          String#force_encoding:   593,535 ( 1.5%)
                                     Kernel#dup:   580,051 ( 1.5%)
                                       Array#[]:   562,360 ( 1.5%)
                             Kernel#respond_to?:   550,441 ( 1.4%)
    Top-20 calls to C functions from JIT code (75.5% of total 262,197,810):
                   rb_vm_opt_send_without_block: 54,534,682 (20.8%)
                                   rb_hash_aref: 22,920,285 ( 8.7%)
                                rb_vm_env_write: 19,385,633 ( 7.4%)
                                     rb_vm_send: 17,070,477 ( 6.5%)
           rb_zjit_writebarrier_check_immediate: 13,780,973 ( 5.3%)
                      rb_vm_getinstancevariable: 12,379,513 ( 4.7%)
                 rb_ivar_get_at_no_ractor_check: 12,156,906 ( 4.6%)
                              rb_vm_invokesuper:  8,086,665 ( 3.1%)
                                   rb_hash_aset:  5,043,536 ( 1.9%)
                              rb_obj_is_kind_of:  4,431,123 ( 1.7%)
                              rb_vm_invokeblock:  4,036,483 ( 1.5%)
                                      Hash#key?:  3,141,619 ( 1.2%)
                     rb_vm_opt_getconstant_path:  3,053,319 ( 1.2%)
                     rb_class_allocate_instance:  2,878,526 ( 1.1%)
                          rb_hash_new_with_size:  2,823,745 ( 1.1%)
                      rb_ec_ary_new_from_values:  2,585,553 ( 1.0%)
                         rb_str_concat_literals:  2,450,764 ( 0.9%)
                                  Regexp#match?:  2,420,225 ( 0.9%)
                                   rb_obj_alloc:  2,419,171 ( 0.9%)
                      rb_vm_setinstancevariable:  2,357,067 ( 0.9%)
    Top-2 not optimized method types for send (100.0% of total 8,550,760):
           iseq: 8,518,289 (99.6%)
      optimized:    32,471 ( 0.4%)
    Top-2 not optimized method types for send_without_block (100.0% of total 789,641):
      optimized_send: 606,885 (76.9%)
                null: 182,756 (23.1%)
    Top-2 not optimized method types for super (100.0% of total 6,689,859):
        cfunc: 6,640,180 (99.3%)
      attrset:    49,679 ( 0.7%)
    Top-3 instructions with uncategorized fallback reason (100.0% of total 5,962,039):
                 invokeblock: 4,036,483 (67.7%)
                 sendforward: 1,871,601 (31.4%)
      opt_send_without_block:    53,955 ( 0.9%)
    Top-20 send fallback reasons (100.0% of total 85,599,908):
                              send_without_block_polymorphic: 31,804,276 (37.2%)
                              send_without_block_no_profiles: 13,349,825 (15.6%)
                              send_not_optimized_method_type:  8,550,760 (10.0%)
                             super_not_optimized_method_type:  6,689,859 ( 7.8%)
                                               uncategorized:  5,962,039 ( 7.0%)
                                            send_no_profiles:  5,200,278 ( 6.1%)
                                one_or_more_complex_arg_pass:  4,198,502 ( 4.9%)
                                            send_polymorphic:  3,318,658 ( 3.9%)
            send_without_block_not_optimized_need_permission:  1,274,177 ( 1.5%)
                                       too_many_args_for_lir:  1,139,487 ( 1.3%)
                                        singleton_class_seen:  1,101,973 ( 1.3%)
                                     super_complex_args_pass:    829,842 ( 1.0%)
      send_without_block_not_optimized_method_type_optimized:    606,885 ( 0.7%)
                              send_without_block_megamorphic:    565,874 ( 0.7%)
                              super_target_complex_args_pass:    414,600 ( 0.5%)
                send_without_block_not_optimized_method_type:    182,756 ( 0.2%)
                                    obj_to_string_not_string:    158,141 ( 0.2%)
                                       super_call_with_block:    100,004 ( 0.1%)
                  send_without_block_direct_keyword_mismatch:     99,588 ( 0.1%)
                                           super_polymorphic:     52,360 ( 0.1%)
    Top-2 setivar fallback reasons (100.0% of total 2,357,067):
      not_monomorphic: 2,255,283 (95.7%)
         not_t_object:   101,784 ( 4.3%)
    Top-1 getivar fallback reasons (100.0% of total 12,379,538):
      not_monomorphic: 12,379,538 (100.0%)
    Top-2 definedivar fallback reasons (100.0% of total 350,548):
      not_monomorphic: 350,461 (100.0%)
         not_t_object:      87 ( 0.0%)
    Top-6 invokeblock handler (100.0% of total 4,036,483):
       monomorphic_iseq: 2,189,057 (54.2%)
            polymorphic: 1,207,002 (29.9%)
      monomorphic_other:   334,248 ( 8.3%)
      monomorphic_ifunc:   221,225 ( 5.5%)
            megamorphic:    84,439 ( 2.1%)
            no_profiles:       512 ( 0.0%)
    Top-8 popular complex argument-parameter features not optimized (100.0% of total 5,212,154):
      param_forwardable: 1,824,953 (35.0%)
            param_block: 1,792,214 (34.4%)
             param_rest:   861,894 (16.5%)
           caller_splat:   283,669 ( 5.4%)
        caller_kw_splat:   248,291 ( 4.8%)
           param_kwrest:   200,208 ( 3.8%)
        caller_blockarg:       752 ( 0.0%)
           caller_kwarg:       173 ( 0.0%)
    Top-1 compile error reasons (100.0% of total 391,562):
      exception_handler: 391,562 (100.0%)
    Top-6 unhandled YARV insns (100.0% of total 1,000,531):
      invokesuperforward: 498,993 (49.9%)
             getconstant: 400,945 (40.1%)
             expandarray:  49,985 ( 5.0%)
           setblockparam:  49,972 ( 5.0%)
              checkmatch:     480 ( 0.0%)
                    once:     156 ( 0.0%)
    Top-2 unhandled HIR insns (100.0% of total 268,151):
              throw: 232,560 (86.7%)
      invokebuiltin:  35,591 (13.3%)
    Top-19 side exit reasons (100.0% of total 8,709,784):
                      guard_shape_failure: 2,497,335 (28.7%)
      block_param_proxy_not_iseq_or_ifunc: 1,988,408 (22.8%)
                       guard_type_failure: 1,722,007 (19.8%)
                      unhandled_yarv_insn: 1,000,531 (11.5%)
                            compile_error:   391,562 ( 4.5%)
             unhandled_newarray_send_pack:   298,017 ( 3.4%)
                       unhandled_hir_insn:   268,151 ( 3.1%)
              patchpoint_method_redefined:   200,632 ( 2.3%)
                      unhandled_block_arg:   151,295 ( 1.7%)
               block_param_proxy_modified:   124,245 ( 1.4%)
                       guard_less_failure:    50,126 ( 0.6%)
                   fixnum_lshift_overflow:     9,985 ( 0.1%)
         patchpoint_stable_constant_names:     6,350 ( 0.1%)
                     fixnum_mult_overflow:       570 ( 0.0%)
                   obj_to_string_fallback:       405 ( 0.0%)
                  patchpoint_no_ep_escape:       109 ( 0.0%)
                                interrupt:        42 ( 0.0%)
                 guard_super_method_entry:         8 ( 0.0%)
                 guard_greater_eq_failure:         6 ( 0.0%)
                                 send_count: 329,199,237
                         dynamic_send_count:  85,599,908 (26.0%)
                       optimized_send_count: 243,599,329 (74.0%)
                      dynamic_setivar_count:   2,357,067 ( 0.7%)
                      dynamic_getivar_count:  12,379,538 ( 3.8%)
                  dynamic_definedivar_count:     350,548 ( 0.1%)
                  iseq_optimized_send_count:  93,946,576 (28.5%)
          inline_cfunc_optimized_send_count:  97,478,983 (29.6%)
           inline_iseq_optimized_send_count:   9,138,886 ( 2.8%)
    non_variadic_cfunc_optimized_send_count:  25,367,116 ( 7.7%)
        variadic_cfunc_optimized_send_count:  17,667,768 ( 5.4%)
    compiled_iseq_count:                               2,888
    failed_iseq_count:                                     0
    compile_time:                                      876ms
    profile_time:                                       28ms
    gc_time:                                             6ms
    invalidation_time:                                   8ms
    vm_write_pc_count:                           287,051,837
    vm_write_sp_count:                           287,051,837
    vm_write_locals_count:                       273,948,883
    vm_write_stack_count:                        273,948,883
    vm_write_to_parent_iseq_local_count:           1,079,877
    vm_read_from_parent_iseq_local_count:         30,814,984
    guard_type_count:                            310,888,965
    guard_type_exit_ratio:                              0.6%
    guard_shape_count:                           108,669,058
    guard_shape_exit_ratio:                             2.3%
    code_region_bytes:                            14,352,384
    zjit_alloc_bytes:                             18,992,674
    total_mem_bytes:                              33,345,058
    side_exit_count:                               8,709,784
    total_insn_count:                          1,705,856,454
    vm_insn_count:                               122,246,885
    zjit_insn_count:                           1,583,609,569
    ratio_in_zjit:                                     92.8%
    ```

    </details>

    <details>

    <summary>after patch</summary>

    ```
    Average of last 10, non-warmup iters: 1072ms
    ***ZJIT: Printing ZJIT statistics on exit***
    Top-20 not inlined C methods (52.5% of total 38,239,504):
                                      Hash#key?: 3,141,619 ( 8.2%)
                                  Regexp#match?: 2,420,215 ( 6.3%)
                                     Hash#fetch: 2,245,557 ( 5.9%)
                                    Integer#===: 1,097,515 ( 2.9%)
                                    Hash#delete: 1,014,375 ( 2.7%)
                                     Array#any?: 1,007,756 ( 2.6%)
                                     String.new: 1,004,713 ( 2.6%)
                                       String#b:   797,913 ( 2.1%)
                                  String#to_sym:   680,943 ( 1.8%)
                                     Array#all?:   650,132 ( 1.7%)
                                  Fiber.current:   649,003 ( 1.7%)
                                     Array#join:   641,038 ( 1.7%)
                                 Array#include?:   613,837 ( 1.6%)
                                   Kernel#Array:   610,311 ( 1.6%)
                                      String#<<:   606,240 ( 1.6%)
                               Symbol#end_with?:   598,807 ( 1.6%)
                          String#force_encoding:   593,535 ( 1.6%)
                                     Kernel#dup:   580,051 ( 1.5%)
                                       Array#[]:   562,360 ( 1.5%)
                             Kernel#respond_to?:   550,441 ( 1.4%)
    Top-20 calls to C functions from JIT code (75.4% of total 262,218,592):
                   rb_vm_opt_send_without_block: 54,249,429 (20.7%)
                                   rb_hash_aref: 22,920,271 ( 8.7%)
                                rb_vm_env_write: 19,385,609 ( 7.4%)
                                     rb_vm_send: 17,070,463 ( 6.5%)
           rb_zjit_writebarrier_check_immediate: 13,780,893 ( 5.3%)
                      rb_vm_getinstancevariable: 12,322,924 ( 4.7%)
                 rb_ivar_get_at_no_ractor_check: 12,156,898 ( 4.6%)
                              rb_vm_invokesuper:  8,086,659 ( 3.1%)
                                   rb_hash_aset:  5,043,532 ( 1.9%)
                              rb_obj_is_kind_of:  4,474,826 ( 1.7%)
                              rb_vm_invokeblock:  4,036,471 ( 1.5%)
                                      Hash#key?:  3,141,619 ( 1.2%)
                     rb_vm_opt_getconstant_path:  3,053,286 ( 1.2%)
                     rb_class_allocate_instance:  2,878,505 ( 1.1%)
                          rb_hash_new_with_size:  2,823,748 ( 1.1%)
                      rb_ec_ary_new_from_values:  2,585,561 ( 1.0%)
                         rb_str_concat_literals:  2,450,756 ( 0.9%)
                                  Regexp#match?:  2,420,215 ( 0.9%)
                                   rb_obj_alloc:  2,419,146 ( 0.9%)
                      rb_vm_setinstancevariable:  2,357,065 ( 0.9%)
    Top-2 not optimized method types for send (100.0% of total 8,550,755):
           iseq: 8,518,284 (99.6%)
      optimized:    32,471 ( 0.4%)
    Top-2 not optimized method types for send_without_block (100.0% of total 789,641):
      optimized_send: 606,885 (76.9%)
                null: 182,756 (23.1%)
    Top-2 not optimized method types for super (100.0% of total 6,689,853):
        cfunc: 6,640,178 (99.3%)
      attrset:    49,675 ( 0.7%)
    Top-4 instructions with uncategorized fallback reason (100.0% of total 6,461,020):
                 invokeblock: 4,036,471 (62.5%)
                 sendforward: 1,871,601 (29.0%)
          invokesuperforward:   498,993 ( 7.7%)
      opt_send_without_block:    53,955 ( 0.8%)
    Top-20 send fallback reasons (100.0% of total 85,813,616):
                              send_without_block_polymorphic: 31,519,543 (36.7%)
                              send_without_block_no_profiles: 13,349,751 (15.6%)
                              send_not_optimized_method_type:  8,550,755 (10.0%)
                             super_not_optimized_method_type:  6,689,853 ( 7.8%)
                                               uncategorized:  6,461,020 ( 7.5%)
                                            send_no_profiles:  5,200,273 ( 6.1%)
                                one_or_more_complex_arg_pass:  4,198,498 ( 4.9%)
                                            send_polymorphic:  3,318,658 ( 3.9%)
            send_without_block_not_optimized_need_permission:  1,273,739 ( 1.5%)
                                       too_many_args_for_lir:  1,139,487 ( 1.3%)
                                        singleton_class_seen:  1,101,973 ( 1.3%)
                                     super_complex_args_pass:    829,842 ( 1.0%)
      send_without_block_not_optimized_method_type_optimized:    606,885 ( 0.7%)
                              send_without_block_megamorphic:    565,874 ( 0.7%)
                              super_target_complex_args_pass:    414,600 ( 0.5%)
                send_without_block_not_optimized_method_type:    182,756 ( 0.2%)
                                    obj_to_string_not_string:    158,133 ( 0.2%)
                                       super_call_with_block:    100,004 ( 0.1%)
                  send_without_block_direct_keyword_mismatch:     99,588 ( 0.1%)
                                           super_polymorphic:     52,360 ( 0.1%)
    Top-2 setivar fallback reasons (100.0% of total 2,357,065):
      not_monomorphic: 2,255,281 (95.7%)
         not_t_object:   101,784 ( 4.3%)
    Top-1 getivar fallback reasons (100.0% of total 12,322,949):
      not_monomorphic: 12,322,949 (100.0%)
    Top-2 definedivar fallback reasons (100.0% of total 350,548):
      not_monomorphic: 350,461 (100.0%)
         not_t_object:      87 ( 0.0%)
    Top-6 invokeblock handler (100.0% of total 4,036,471):
       monomorphic_iseq: 2,189,045 (54.2%)
            polymorphic: 1,207,002 (29.9%)
      monomorphic_other:   334,248 ( 8.3%)
      monomorphic_ifunc:   221,225 ( 5.5%)
            megamorphic:    84,439 ( 2.1%)
            no_profiles:       512 ( 0.0%)
    Top-8 popular complex argument-parameter features not optimized (100.0% of total 5,212,150):
      param_forwardable: 1,824,953 (35.0%)
            param_block: 1,792,214 (34.4%)
             param_rest:   861,894 (16.5%)
           caller_splat:   283,669 ( 5.4%)
        caller_kw_splat:   248,291 ( 4.8%)
           param_kwrest:   200,208 ( 3.8%)
        caller_blockarg:       748 ( 0.0%)
           caller_kwarg:       173 ( 0.0%)
    Top-1 compile error reasons (100.0% of total 391,562):
      exception_handler: 391,562 (100.0%)
    Top-5 unhandled YARV insns (100.0% of total 501,538):
        getconstant: 400,945 (79.9%)
        expandarray:  49,985 (10.0%)
      setblockparam:  49,972 (10.0%)
         checkmatch:     480 ( 0.1%)
               once:     156 ( 0.0%)
    Top-2 unhandled HIR insns (100.0% of total 268,152):
              throw: 232,560 (86.7%)
      invokebuiltin:  35,592 (13.3%)
    Top-19 side exit reasons (100.0% of total 8,210,699):
                      guard_shape_failure: 2,497,552 (30.4%)
      block_param_proxy_not_iseq_or_ifunc: 1,988,408 (24.2%)
                       guard_type_failure: 1,721,809 (21.0%)
                      unhandled_yarv_insn:   501,538 ( 6.1%)
                            compile_error:   391,562 ( 4.8%)
             unhandled_newarray_send_pack:   298,017 ( 3.6%)
                       unhandled_hir_insn:   268,152 ( 3.3%)
              patchpoint_method_redefined:   200,632 ( 2.4%)
                      unhandled_block_arg:   151,295 ( 1.8%)
               block_param_proxy_modified:   124,245 ( 1.5%)
                       guard_less_failure:    50,033 ( 0.6%)
                   fixnum_lshift_overflow:     9,985 ( 0.1%)
         patchpoint_stable_constant_names:     6,342 ( 0.1%)
                     fixnum_mult_overflow:       570 ( 0.0%)
                   obj_to_string_fallback:       405 ( 0.0%)
                  patchpoint_no_ep_escape:       109 ( 0.0%)
                                interrupt:        31 ( 0.0%)
                 guard_super_method_entry:         8 ( 0.0%)
                 guard_greater_eq_failure:         6 ( 0.0%)
                                 send_count: 328,805,013
                         dynamic_send_count:  85,813,616 (26.1%)
                       optimized_send_count: 242,991,397 (73.9%)
                      dynamic_setivar_count:   2,357,065 ( 0.7%)
                      dynamic_getivar_count:  12,322,949 ( 3.7%)
                  dynamic_definedivar_count:     350,548 ( 0.1%)
                  iseq_optimized_send_count:  93,990,621 (28.6%)
          inline_cfunc_optimized_send_count:  96,851,696 (29.5%)
           inline_iseq_optimized_send_count:   9,181,467 ( 2.8%)
    non_variadic_cfunc_optimized_send_count:  25,304,458 ( 7.7%)
        variadic_cfunc_optimized_send_count:  17,663,155 ( 5.4%)
    compiled_iseq_count:                               2,886
    failed_iseq_count:                                     0
    compile_time:                                      875ms
    profile_time:                                       27ms
    gc_time:                                            66ms
    invalidation_time:                                   9ms
    vm_write_pc_count:                           287,186,308
    vm_write_sp_count:                           287,186,308
    vm_write_locals_count:                       274,139,228
    vm_write_stack_count:                        274,139,228
    vm_write_to_parent_iseq_local_count:           1,079,877
    vm_read_from_parent_iseq_local_count:         30,810,378
    guard_type_count:                            310,644,961
    guard_type_exit_ratio:                              0.6%
    guard_shape_count:                           109,072,242
    guard_shape_exit_ratio:                             2.3%
    code_region_bytes:                            14,352,384
    zjit_alloc_bytes:                             19,186,174
    total_mem_bytes:                              33,538,558
    side_exit_count:                               8,210,699
    total_insn_count:                          1,705,193,555
    vm_insn_count:                               123,691,343
    zjit_insn_count:                           1,581,502,212
    ratio_in_zjit:                                     92.7%
    ```

    </details>

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit 52e71ad4b766d57236e66ebbc419a4447fb0b491
  Author:     Luke Gruber <luke.gruber@shopify.com>
  AuthorDate: 2026-01-28 02:36:55 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-28 02:36:55 +0900

    Fix test for mutex starvation as well as small fix in thread_sync.c (#15982)

    Don't reset `th->running_time_us` when unlocking from `mutex_free` or
    force unlocking during thread destruction. Follow-up to 994257ab06072d.

  Notes:
    Merged-By: luke-gru <luke.gru@gmail.com>

commit 5d769228c1055524205437860beb1fc2de2d11a0
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-01-27 01:28:31 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-27 23:43:51 +0900

    [ruby/prism] Remove `Prism.lex_ripper`

    Since `on_sp` is emitted, it doesn't do a whole lot anymore.

    This leaves one incompatibility for code like `"x#$%"`

    Ripper confuses this for bare interpolation with a global, but `$%` is not a valid global name. Still,
    it emits two string tokens in such a case. It doesn't make sense for prism to work around this bug,
    so the affected files are added as excludes.

    Since the only usage of this method makes sense for testing in prism itself,
    the method is removed instead of deprecated.

    https://github.com/ruby/prism/commit/31be379f98

commit 83713db7f1d0c927984350954ec6b8e72662482a
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-01-27 19:18:31 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-01-27 21:51:06 +0900

    gc.c: Fix `rb_gc_obj_needs_cleanup_p`

    - T_BIGNUM may have fields via `#object_id`.
    - The T_DATA logic was inversed. If `dfree` is unset we don't need cleanup.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15981

commit ade85c45da666a174b618170cc9e680351a18a1b
  Author:     Michael Yang <themichaelyang@gmail.com>
  AuthorDate: 2026-01-16 18:10:16 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-27 19:02:02 +0900

    [ruby/resolv] remove test for every class

    https://github.com/ruby/resolv/commit/96e483d55b

commit c55d214ed383b6583ee68cffee69a63a2c92fe32
  Author:     Michael Yang <themichaelyang@gmail.com>
  AuthorDate: 2025-12-20 20:23:56 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-27 19:02:02 +0900

    [ruby/resolv] add getresources test for every resource typeclass

    https://github.com/ruby/resolv/commit/4bad8bccfc

commit 09872ea950b932947fd55e02ffad7200845672d0
  Author:     Michael Yang <themichaelyang@gmail.com>
  AuthorDate: 2025-12-20 20:11:07 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-27 19:02:02 +0900

    [ruby/resolv] add missing typeclasses to doc

    https://github.com/ruby/resolv/commit/78df896829

commit 969fd30cb17a45943011768f40f281f5f270acc6
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-27 11:00:32 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-27 12:40:07 +0900

    [ruby/net-http] [DOC] Fix links

    The RDoc link format has changed so these are all broken links.

    https://github.com/ruby/net-http/commit/97fe6085c3

commit 491e38902c2f5deef5dbb249cdf609ae2bb52f1e
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-27 07:10:35 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-27 07:18:19 +0900

    [DOC] Fix links to What's Here

    The RDoc link format has changed so these are all broken links.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15976

commit 6b0dda496e9bdf7c24e7a58514f9fcb5879dad2f
  Author:     Max Bernstein <rubybugs@bernsteinbear.com>
  AuthorDate: 2026-01-27 07:11:06 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-27 07:11:06 +0900

    ZJIT: Add temporary local definite assignment validator (#15973)

    Until we get our global register allocator, we need our HIR to be in
    100% block-local SSA. Add a validator to enforce that.

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit b7102933ee66639a3c92928f4166356b92786744
  Author:     BurdetteLamar <burdettelamar@yahoo.com>
  AuthorDate: 2026-01-26 02:18:51 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-27 07:07:53 +0900

    [DOC] Doc for Module.nesting

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15961

commit 21f8472e77c3c393f1a40524fc70aad3714026f6
  Author:     BurdetteLamar <burdettelamar@yahoo.com>
  AuthorDate: 2026-01-26 08:19:16 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-27 07:05:18 +0900

    [DOC] Fix links in Array

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15963

commit ed0a5c6f0f09eadafe1ecdfad78ff79571c007b8
  Author:     BurdetteLamar <burdettelamar@yahoo.com>
  AuthorDate: 2026-01-26 08:40:57 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-27 07:04:58 +0900

    [DOC] Fix links in Complex

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15964

commit 2605d4e5fce35a0018957634f98acffc8c5370e6
  Author:     Aaron Patterson <tenderlove@ruby-lang.org>
  AuthorDate: 2026-01-23 02:58:25 +0900
  Commit:     Aaron Patterson <aaron.patterson@gmail.com>
  CommitDate: 2026-01-27 05:47:56 +0900

    ZJIT: Extract VRegId from a usize

    We would like to do type matching on the VRegId.  Extracting the VRegID
    from a usize makes the code a bit easier to understand and refactor.
    MemBase uses a VReg, and there is also a VReg in Opnd.  We should be
    sharing types between these two, so this is a step in the direction of
    sharing a type

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15938

commit 994257ab06072df38de024e70a60aa9a87e36089
  Author:     Luke Gruber <luke.gruber@shopify.com>
  AuthorDate: 2026-01-27 04:34:37 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-27 04:34:37 +0900

    Prevent starvation when acquiring mutex over and over (#15877)

    Continually locking a mutex m can lead to starvation if all other threads are on the waitq of m.

    See https://bugs.ruby-lang.org/issues/21840 for more details.

    Solution:

    When a thread `T1` wakes up `T2` during mutex unlock but `T1` or any other thread successfully acquires it
    before `T2`, then we record the `running_time` of the thread during mutex acquisition. Then during unlock, if
    that thread's running_time is less than the saved running time, we set it back to the saved time.

    Fixes [Bug #21840]

  Notes:
    Merged-By: luke-gru <luke.gru@gmail.com>

commit 3c634893e245c578181e8337b4025d1f673d77e8
  Author:     Matt Valentine-House <matt@eightbitraptor.com>
  AuthorDate: 2026-01-26 21:46:00 +0900
  Commit:     Matt Valentine-House <matt@eightbitraptor.com>
  CommitDate: 2026-01-27 03:01:09 +0900

    Remove the unnecesary integer comparison

    Most compilers will optimise this anyway

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15885

commit d15117e2937b78b0868e0f41336f6350bbf1a1c4
  Author:     Matt Valentine-House <matt@eightbitraptor.com>
  AuthorDate: 2026-01-26 19:48:48 +0900
  Commit:     Matt Valentine-House <matt@eightbitraptor.com>
  CommitDate: 2026-01-27 03:01:09 +0900

    BIGNUM can't have fields other than object_id

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15885

commit 7444f415db75c1436e11b61a4ce2f461158d234c
  Author:     Matt Valentine-House <matt@eightbitraptor.com>
  AuthorDate: 2026-01-24 01:45:57 +0900
  Commit:     Matt Valentine-House <matt@eightbitraptor.com>
  CommitDate: 2026-01-27 03:01:09 +0900

    rename rb_gc_obj_free_on_sweep -> rb_gc_obj_needs_cleanup_p

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15885

commit 8e73aa7ffe6f5504be9f1a90e5d9dcbe3ae8376a
  Author:     Matt Valentine-House <matt@eightbitraptor.com>
  AuthorDate: 2026-01-24 01:11:17 +0900
  Commit:     Matt Valentine-House <matt@eightbitraptor.com>
  CommitDate: 2026-01-27 03:01:09 +0900

    We don't need this wrapper function anymore

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15885

commit efde37b7122b23775b906ad90cf4e88e05b756a8
  Author:     Matt Valentine-House <matt@eightbitraptor.com>
  AuthorDate: 2026-01-23 07:28:24 +0900
  Commit:     Matt Valentine-House <matt@eightbitraptor.com>
  CommitDate: 2026-01-27 03:01:09 +0900

    Move the gc fast path out of the default GC impl

    It relies too much on VM level concerns, such that it can't be built
    with modular GC enabled.

    We'll move it into the VM, and then expose it to the GC
    implementations so they can use it.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15885

commit 211714f1bfd8d0927c704713545e37f18cc75229
  Author:     Matt Valentine-House <matt@eightbitraptor.com>
  AuthorDate: 2026-01-21 03:49:03 +0900
  Commit:     Matt Valentine-House <matt@eightbitraptor.com>
  CommitDate: 2026-01-27 03:01:09 +0900

    Clarify the use of some FLAGS

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15885

commit c21f3490d1f28b43564639ae8563bc2e02e828a4
  Author:     Matt Valentine-House <matt@eightbitraptor.com>
  AuthorDate: 2026-01-15 06:51:49 +0900
  Commit:     Matt Valentine-House <matt@eightbitraptor.com>
  CommitDate: 2026-01-27 03:01:09 +0900

    Implement a fast path for sweeping (gc_sweep_fast_path_p).

    [Feature #21846]

    There is a single path through our GC Sweeping code, and we always call
    rb_gc_obj_free_vm_weak_references and rb_gc_obj_free before adding the
    object back to the freelist.

    We do this even when the object has no external resources that require
    being free'd and has no weak references pointing to it.

    This commit introduces a conservative fast path through gc_sweep_plane
    that uses the object flags to identify certain cases where these calls
    can be skipped - for these objects we just add them straight back on the
    freelist. Any object for which gc_sweep_fast_path_p returns false will
    use the current full sweep code (referred to here as the slow path).

    Currently there are 2 checks that
    will _always_ require an object to go down the slow path:

    1. Has it's object_id been observed and stored in the id2ref_table
    2. Has it got generic ivars in the gen_fields table

    If neither of these are true, then we run some flag checks on the object
    and send the following cases down the fast path:

    - Objects that are not heap allocated
    - Embedded strings that aren't in the fstring table
    - Embedded Arrays
    - Embedded Hashes
    - Embedded Bignums
    - Embedded Strings
    - Floats, Rationals and Complex
    - Various IMEMO subtypes that do no allocation

    We've benchmarked this code using ruby-bench as well as the gcbench
    benchmarks inside Ruby (benchmarks/gc) and this patch results in a
    modest speed improvement on almost all of the headline benchmarks (2% in
    railsbench with YJIT enabled), and an observable 30% improvement in time
    spent sweeping during the GC benchmarks:

    ```
    master: ruby 4.1.0dev (2026-01-19T12:03:33Z master 859920dfd2) +YJIT +PRISM [x86_64-linux]
    experiment: ruby 4.1.0dev (2026-01-16T21:36:46Z mvh-sweep-fast-pat.. c3ffe377a1) +YJIT +PRISM [x86_64-linux]

    --------------  -----------  ----------  ---------------  ----------  ------------------  -----------------
    bench           master (ms)  stddev (%)  experiment (ms)  stddev (%)  experiment 1st itr  master/experiment
    lobsters        N/A          N/A         N/A              N/A         N/A                 N/A
    activerecord    132.5        0.9         132.5            1.0         1.056               1.001
    chunky-png      577.2        0.4         580.1            0.4         0.994               0.995
    erubi-rails     902.9        0.2         894.3            0.2         1.040               1.010
    hexapdf         1763.9       3.3         1760.6           3.7         1.027               1.002
    liquid-c        56.9         0.6         56.7             1.4         1.004               1.003
    liquid-compile  46.3         2.1         46.1             2.1         1.005               1.004
    liquid-render   77.8         0.8         75.1             0.9         1.023               1.036
    mail            114.7        0.4         113.0            1.4         1.054               1.015
    psych-load      1635.4       1.4         1625.9           0.5         0.988               1.006
    railsbench      1685.4       2.4         1650.1           2.0         0.989               1.021
    rubocop         133.5        8.1         130.3            7.8         1.002               1.024
    ruby-lsp        140.3        1.9         137.5            1.8         1.007               1.020
    sequel          64.6         0.7         63.9             0.7         1.003               1.011
    shipit          1196.2       4.3         1181.5           4.2         1.003               1.012
    --------------  -----------  ----------  ---------------  ----------  ------------------  -----------------

    Legend:
    - experiment 1st itr: ratio of master/experiment time for the first benchmarking iteration.
    - master/experiment: ratio of master/experiment time. Higher is better for experiment. Above 1 represents a speedup.
    ```

    ```
    Benchmark      │    Wall(B)   Sweep(B)  Mark(B) │    Wall(E)   Sweep(E)  Mark(E) │   Wall Δ  Sweep Δ
    ───────────────┼─────────────────────────────────┼─────────────────────────────────┼──────────────────
    null           │     0.000s        1ms      4ms │     0.000s        1ms      4ms │       0%       0%
    hash1          │     4.330s      875ms     46ms │     3.960s      531ms     44ms │ +8.6% +39.3%
    hash2          │     6.356s      243ms    988ms │     6.298s      176ms    1.03s │ +0.9% +27.6%
    rdoc           │    37.337s      2.42s    1.09s │    36.678s      2.11s    1.20s │ +1.8% +13.1%
    binary_trees   │     3.366s      426ms    252ms │     3.082s      275ms    239ms │ +8.4% +35.4%
    ring           │     5.252s       14ms    2.47s │     5.327s       12ms    2.43s │ -1.4% +14.3%
    redblack       │     2.966s       28ms     41ms │     2.940s       21ms     38ms │ +0.9% +25.0%
    ───────────────┼─────────────────────────────────┼─────────────────────────────────┼──────────────────

    Legend: (B) = Baseline, (E) = Experiment, Δ = improvement (positive = faster)
            Wall = total wallclock, Sweep = GC sweeping time, Mark = GC marking time
            Times are median of 3 runs
    ```

    These results are also borne out when YJIT is disabled:

    ```
    master: ruby 4.1.0dev (2026-01-19T12:03:33Z master 859920dfd2) +PRISM [x86_64-linux]
    experiment: ruby 4.1.0dev (2026-01-16T21:36:46Z mvh-sweep-fast-pat.. c3ffe377a1) +PRISM [x86_64-linux]

    --------------  -----------  ----------  ---------------  ----------  ------------------  -----------------
    bench           master (ms)  stddev (%)  experiment (ms)  stddev (%)  experiment 1st itr  master/experiment
    lobsters        N/A          N/A         N/A              N/A         N/A                 N/A
    activerecord    389.6        0.3         377.5            0.3         1.032               1.032
    chunky-png      1123.4       0.2         1109.2           0.2         1.013               1.013
    erubi-rails     1754.3       0.1         1725.7           0.1         1.035               1.017
    hexapdf         3346.5       0.9         3326.9           0.7         1.003               1.006
    liquid-c        84.0         0.5         83.5             0.5         0.992               1.006
    liquid-compile  74.0         1.5         73.5             1.4         1.011               1.008
    liquid-render   199.9        0.4         199.6            0.4         1.000               1.002
    mail            177.8        0.4         176.4            0.4         1.069               1.008
    psych-load      2749.6       0.7         2777.0           0.0         0.980               0.990
    railsbench      2983.0       1.0         2965.5           0.8         1.041               1.006
    rubocop         228.8        1.0         227.5            1.2         1.015               1.005
    ruby-lsp        221.8        0.9         216.1            0.8         1.011               1.026
    sequel          89.1         0.5         89.1             1.8         1.005               1.000
    shipit          2385.6       1.6         2371.8           1.0         1.002               1.006
    --------------  -----------  ----------  ---------------  ----------  ------------------  -----------------

    Legend:
    - experiment 1st itr: ratio of master/experiment time for the first benchmarking iteration.
    - master/experiment: ratio of master/experiment time. Higher is better for experiment. Above 1 represents a speedup.
    ```

    ```
    Benchmark      │    Wall(B)   Sweep(B)  Mark(B) │    Wall(E)   Sweep(E)  Mark(E) │   Wall Δ  Sweep Δ
    ───────────────┼─────────────────────────────────┼─────────────────────────────────┼──────────────────
    null           │     0.000s        1ms      4ms │     0.000s        1ms      3ms │       0%       0%
    hash1          │     4.349s      877ms     45ms │     4.045s      532ms     44ms │ +7.0% +39.3%
    hash2          │     6.575s      235ms    967ms │     6.540s      181ms    1.04s │ +0.5% +23.0%
    rdoc           │    45.782s      2.23s    1.14s │    44.925s      1.90s    1.01s │ +1.9% +15.0%
    binary_trees   │     6.433s      426ms    252ms │     6.268s      278ms    240ms │ +2.6% +34.7%
    ring           │     6.584s       17ms    2.33s │     6.738s       13ms    2.33s │ -2.3% +30.8%
    redblack       │    13.334s       31ms     42ms │    13.296s       24ms    107ms │ +0.3% +22.6%
    ───────────────┼─────────────────────────────────┼─────────────────────────────────┼──────────────────

    Legend: (B) = Baseline, (E) = Experiment, Δ = improvement (positive = faster)
            Wall = total wallclock, Sweep = GC sweeping time, Mark = GC marking time
            Times are median of 3 runs
    ```

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15885

commit 5add7c3ea9a13e657fc7cba78b2633b9548a55aa
  Author:     Chris Hasiński <krzysztof.hasinski@gmail.com>
  AuthorDate: 2026-01-27 00:17:35 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-27 00:17:35 +0900

    Fix RUBY_MN_THREADS sleep returning prematurely (#15868)

    timer_thread_check_exceed() was returning true when the remaining time
    was less than 1ms, treating it as "too short time". This caused
    sub-millisecond sleeps (like sleep(0.0001)) to return immediately
    instead of actually sleeping.

    The fix removes this optimization that was incorrectly short-circuiting
    short sleep durations. Now the timeout is only considered exceeded when
    the actual deadline has passed.

    Note: There's still a separate performance issue where MN_THREADS mode
    is slower for sub-millisecond sleeps due to the timer thread using
    millisecond-resolution polling. This will require a separate fix to
    use sub-millisecond timeouts in kqueue/epoll.

    [Bug #21836]

  Notes:
    Merged-By: luke-gru <luke.gru@gmail.com>

commit 2947aa41d4e6aa340edb0979c3e59bb6b6aca3a4
  Author:     Kevin Newton <kddnewton@gmail.com>
  AuthorDate: 2026-01-26 23:08:27 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-26 23:43:01 +0900

    [ruby/prism] Use each_line to avoid allocating array

    Though very unlikely, it could potentially allocate a large array
    of whitespace.

    https://github.com/ruby/prism/commit/3389947819

commit 5f254209184f4bcddc3155a85da7dc970f5708bf
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-01-26 20:16:34 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-26 20:34:49 +0900

    [ruby/prism] Fix `on_words_sep` for ripper translator with newlines

    Ripper emits a token each per line.

    https://github.com/ruby/prism/commit/4b5c9f5437

commit e410d938fa1b8474fd4763b9b8383defa7f1db3f
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-01-26 19:40:36 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-01-26 20:24:14 +0900

    Workround for directly loading Gem::Version

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15968

commit a30831133604cc5cc4a96309bd909a8897e42a2f
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-01-26 18:11:27 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-26 18:38:31 +0900

    [ruby/rubygems] Removed unused deprecate loading

    https://github.com/ruby/rubygems/commit/e379022ed0

commit ace5b10de44acc7ce7717d4109beaeba9a130700
  Author:     Edouard CHIN <chin.edouard@gmail.com>
  AuthorDate: 2026-01-16 01:09:35 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-26 17:48:22 +0900

    [ruby/rubygems] Fix Bundler that re-exec $0 when a `version` is present in the config:

    - ### Problem

      If you have a `version` in your config file (this feature was
      introduced in #6817), then running any `bundle` command will
      make Bundler re-exec and ultimately run the `bundle` binstub twice.

      ### Details

      When the `bundle` binstub gets executed, a `require "bundler"` is
      evaluated. RubyGems tries to require the `bundler.rb` file from
      the right `bundler` gem (in the event where you have multiple
      bundler versions in your system).
      RubyGems will prioritize a bundler version based on a few
      heurisitics.

      https://github.com/ruby/rubygems/blob/b50c40c92abb00bb172f1579356cc73c242b1849/lib/rubygems/bundler_version_finder.rb#L19-L21

      This prioritize logic doesn't take into account the bundler version
      a user has specific in this config. So what happens is:

      1. User execute the `bundle` binstub
      2. `require 'bundler'` is evaluated.
      3. RubyGems prioritize activating the bundler version specified
         in the Gemfile.lock
      4. The CLI starts, and [Auto switch kicks in](https://github.com/ruby/rubygems/blob/b50c40c92abb00bb172f1579356cc73c242b1849/bundler/lib/bundler/cli.rb#L81). Bundler detects that
         user specifed a version in its config and the current Bundler
         version doesn't match.
      5. Bundler exit and re-exec with the right bundler version.

      ### Solution

      This patch introduce two fixes. First, it reads the bundler config
      file and check for the local config first and then the global
      config. This is because the local has precedence over global.

      Second, the prioritization takes into account the version in config
      and let RubyGems activate the right version in order to prevent
      re-exec moments later.

      Finally, I also want to fix this problem because its a step toward
      fixing https://github.com/ruby/rubygems/issues/8106. I'll open
      a follow up patch to explain.

    https://github.com/ruby/rubygems/commit/d6e0f43133

commit b3cca1e201238def12f57a9ad21da8ef65ad3563
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-01-26 17:15:49 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-26 17:44:50 +0900

    [ruby/rubygems] Re-generate certificates with sha256WithRSAEncryption for modern OS

    https://github.com/ruby/rubygems/commit/41612df71d

commit 6e00da098abacd8c9ef0ea621cb1832e654b1813
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-01-26 16:19:19 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-26 16:46:45 +0900

    [ruby/rubygems] Revert "Merge pull request #8989 from nobu/test-tmpdir"

    This reverts commit https://github.com/ruby/rubygems/commit/3aa3ee3ee440, reversing
    changes made to https://github.com/ruby/rubygems/commit/d1ff3df70f55.

    https://github.com/ruby/rubygems/commit/0231b5b1bc

commit 016b2628e86fdd611782faf8ffd8e7f7c04a7650
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-01-26 15:27:37 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-26 16:01:48 +0900

    [ruby/rubygems] Fixed missing classname

    https://github.com/ruby/rubygems/commit/b2002d47d2

commit b96416802d24ffe80ef844b6a347919d5b858820
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-01-17 20:18:11 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-26 16:01:47 +0900

    [ruby/rubygems] Do not pollute source directory by tests

    https://github.com/ruby/rubygems/commit/ab3c2200d2

commit 78d9b454ce553463b8ca2b928ab0e3cf92853e57
  Author:     Edouard CHIN <chin.edouard@gmail.com>
  AuthorDate: 2026-01-14 03:04:11 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-26 14:56:37 +0900

    [ruby/rubygems] Fix RubyGems not able to require the right gem:

    - Fix https://github.com/ruby/rubygems/issues/9238
    - ### Problem

      This is an issue that bites gem maintainers from time to time, with
      the most recent one in https://github.com/minitest/minitest/issues/1040#issuecomment-3679370619

      The issue is summarized as follow:

      1) A gem "X" has a feature in "lib/feature.rb"
      2) Maintainer wants to extract this feature into its own gem "Y"
      3) Maintainer cut a release of X without that new feature.
      4) Users install the new version of X and also install the new
         gem "Y" since the feature is now extracted.
      5) When a call to "require 'feature'" is encountered, RG will
         fail to load the right gem, resulting in a `LoadError`.

      ### Details

      Now that we have two gems (old version of X and new gem Y) with
      the same path, RubyGems will detect that `feature.rb` can be loaded
      from the old version of X, but if the new version of X had already
      been loaded, then RubyGems will raise due to versions conflicting.

      ```ruby
      require 'x' # Loads the new version of X without the feature which was extracted.
      require 'feature' # Rubygems see that the old version of X include that file and tries to activate the spec.
      ```

      ### Solution

      I propose that RubyGems fallback to a spec that's not yet loaded.
      We try to find a spec by its path and filter it out in case a spec
      with the same name has already been loaded.

      Its worth to note that RubyGems already has a
      `find_inactive_by_path` but we can't use it. This method only checks
      if the spec object is active and doesn't look if other spec with the
      same name have been loaded. The new method we are introducing
      verifies this.

    https://github.com/ruby/rubygems/commit/f298e2c68e

commit 2856aa67df48409a1743b9126ff3bdc875ab2a98
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-26 10:09:35 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-26 10:09:35 +0900

    [DOC] State that an interpolated string in `%W` is not split

    It is split statically at the parse time, not the whole string is
    built then split.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15965

commit 9269069e9056ba3ab74a885b68fc9d8c167f014d
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-01-26 05:33:48 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-26 06:14:13 +0900

    [ruby/prism] Optimize ripper translator token sorting

    With the benchmark from https://github.com/ruby/prism/commit/2ea81398cc6f776dca686125847dbf9b0af58c16
    Prism is:
    * 1.33x slower before
    * 1.07x slower after

    https://github.com/ruby/prism/commit/a18b0acd80

commit b75938e2c3f9345dcc3e4f00179363bb5a211d07
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-25 10:33:18 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-26 00:09:17 +0900

    [DOC] Improve class doc for Coverage

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15956

commit f23e554f68027fe7786f0c8e865f48ff45692c5c
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-25 19:40:19 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-25 20:05:55 +0900

    Fix missing `return`

    And align the condition with `enc_find_basename` to remove the code
    path that `*baselen` potentially can be unset in that function.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15959

commit 8f9aade9be6f213871357b46b410789bf78e7ac7
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-25 10:50:21 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-25 11:31:09 +0900

    Fix warning in rb_file_s_basename

        file.c:5053:16: warning: `f` may be used uninitialized [-Wmaybe-uninitialized]
        5053 |             if (!(f = rmext(p, f, n, fp, RSTRING_LEN(fext), enc))) {
             |                ^

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15957

commit a00cc983ddcf622f8170dfac8e757ed2e25ef181
  Author:     Stan Lo <stan001212@gmail.com>
  AuthorDate: 2026-01-25 10:47:23 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-25 10:47:23 +0900

    Ignore AI agents related files (#15955)

  Notes:
    Merged-By: st0012 <stan001212@gmail.com>

commit 985b58a4ed03913509834c578a31105c0dd3204a
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-01-25 00:51:30 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-25 08:11:19 +0900

    [ruby/prism] Remove unneeded lex_compat token types

    These are either fixed in prism or ruby/ripper itself.

    https://github.com/ruby/prism/commit/41c7c126b2

commit f7bc28d8244cd69b78382d193421abda1204aa73
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-01-25 04:34:23 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-25 08:10:34 +0900

    [ruby/prism] Further optimize ripper translator by not using `delegate`

    Using it seems pretty bad for performance:

    ```rb
    require "benchmark/ips"
    require "prism"
    require "ripper"

    codes = Dir["**/*.rb"].map { File.read(it) }

    Benchmark.ips do |x|
      x.report("prism") { codes.each { Prism::Translation::Ripper.lex(it) } }
      x.report("ripper") { codes.each { Ripper.lex(it) } }
      x.compare!
    end
    ```

    ```
    # Before
    ruby 4.0.0 (2025-12-25 revision https://github.com/ruby/prism/commit/553f1675f3) +PRISM [x86_64-linux]
    Warming up --------------------------------------
                   prism     1.000 i/100ms
                  ripper     1.000 i/100ms
    Calculating -------------------------------------
                   prism      0.319 (± 0.0%) i/s     (3.14 s/i) -      2.000 in   6.276154s
                  ripper      0.647 (± 0.0%) i/s     (1.54 s/i) -      4.000 in   6.182662s

    Comparison:
                  ripper:        0.6 i/s
                   prism:        0.3 i/s - 2.03x  slower
    # After
    ruby 4.0.0 (2025-12-25 revision https://github.com/ruby/prism/commit/553f1675f3) +PRISM [x86_64-linux]
    Warming up --------------------------------------
                   prism     1.000 i/100ms
                  ripper     1.000 i/100ms
    Calculating -------------------------------------
                   prism      0.482 (± 0.0%) i/s     (2.08 s/i) -      3.000 in   6.225603s
                  ripper      0.645 (± 0.0%) i/s     (1.55 s/i) -      4.000 in   6.205636s

    Comparison:
                  ripper:        0.6 i/s
                   prism:        0.5 i/s - 1.34x  slower
    ```

    `vernier` tells me it does `method_missing` even for explicitly defined methods like `location`.

    https://github.com/ruby/prism/commit/2ea81398cc

commit 1de6133825862ef987160a5ba39f5af685610f4e
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-24 23:37:49 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-24 23:43:54 +0900

    [DOC] Fix hash style in Hash#except

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15954

commit 3dd928c284b9365d9b4edc5ab5e47800633b6c38
  Author:     Bodhi Russell Silberling <bodhirussellsilberling@yahoo.com>
  AuthorDate: 2026-01-24 12:41:36 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-24 12:41:36 +0900

    [DOC] Fix typo: occurences -> occurrences

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15951

    Merged-By: nobu <nobu@ruby-lang.org>

commit 3328246b91cbf1d69a2ba48dd5b5010490542084
  Author:     Nelli Simkova <nelli.simkova@fccho-moscow.ru>
  AuthorDate: 2026-01-23 18:31:41 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-01-24 12:38:15 +0900

    [DOC] Fix typo in String#scrub doc

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15948

commit 887913efc0fecdcfd67c86d52d1d92ad79c23fac
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-23 07:12:59 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-24 07:36:06 +0900

    [DOC] Improve docs for eval

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15941

commit 7c75dbe51e9fd9ebd84bc796acec4a4e60c5d367
  Author:     Max Bernstein <rubybugs@bernsteinbear.com>
  AuthorDate: 2026-01-24 06:14:59 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-24 06:14:59 +0900

    ZJIT: Reset all the counters in RubyVM::ZJIT::reset_stats! (#15950)

    We previously forgot about these.

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit e7e930323660c6b0b277a998e178f18b074c3d5c
  Author:     Luke Gruber <luke.gruber@shopify.com>
  AuthorDate: 2026-01-24 01:54:44 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-24 01:54:44 +0900

    Fix kqueue timeout for 0-valued timespec (#15940)

    Timeout with 0-valued timespec means try to get an event, but return
    immediately if there is none. Apparently timespec can have other
    members, so best to 0 it out in that case.

  Notes:
    Merged-By: luke-gru <luke.gru@gmail.com>

commit 48848e8da43a1caa6169db68b1a826a185d2549c
  Author:     Kazuki Yamaguchi <k@rhe.jp>
  AuthorDate: 2025-03-04 01:56:07 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-24 01:47:31 +0900

    [ruby/openssl] ssl: update tests for SSLContext#servername_cb callback

    If an exception is raised by the SSLContext#servername_cb proc, the
    handshake should be canceled by sending an "unrecognized_name" alert to
    the client, and the exception should be re-raised from SSLSocket#accept.

    Add more direct assertions to confirm these behaviors.

    https://github.com/ruby/openssl/commit/ac8df7f30f

commit 0fddb9afcac8d68da07a24a2db3763e237f59a22
  Author:     Kazuki Yamaguchi <k@rhe.jp>
  AuthorDate: 2025-12-08 00:55:15 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-24 01:41:17 +0900

    [ruby/openssl] ssl: refactor peeraddr_ip_str()

    Remove an unnecessary instance variable lookup and constant lookup.
    Ruby's public headers provide rb_eSystemCallError.

    https://github.com/ruby/openssl/commit/46c92233fb

commit 0379aab6c0f345908e03868ced03936c07b7651a
  Author:     Kazuki Yamaguchi <k@rhe.jp>
  AuthorDate: 2025-12-03 02:57:18 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-24 01:41:17 +0900

    [ruby/openssl] ssl: fix errno display in exception messages

    The errno reported in an OpenSSL::SSL::SSLError raised by
    SSLSocket#accept and #connect sometimes does not match what SSL_accept()
    or SSL_connect() actually encountered. Depending on the evaluation order
    of arguments passed to ossl_raise(), errno may be overwritten by
    peeraddr_ip_str().

    While we could just fix peeraddr_ip_str(), we should avoid passing
    around errno since it is error-prone. Replace rb_sys_fail() and
    rb_io_{maybe_,}wait_{read,writ}able() with equivalents that do not read
    errno.

    https://github.com/ruby/openssl/commit/bfc7df860f

commit 05b85fc1abdefd81a5561ac7d7aed433b7a01400
  Author:     Sharon Rosner <sharon@noteflakes.com>
  AuthorDate: 2026-01-19 17:15:41 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-24 00:38:19 +0900

    [ruby/openssl] Add `sync_close` kwarg to `SSLSocket.new` (fixes
    https://github.com/ruby/openssl/pull/955)

    https://github.com/ruby/openssl/commit/8d9a676dfa

commit aba48bd5d6a36328026e87e72a34897475d73145
  Author:     Benoit Daloze <eregontp@gmail.com>
  AuthorDate: 2026-01-17 21:36:20 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-01-23 15:03:49 +0900

    [ruby/pathname] Remove omit's for File.path since it is fixed in the last TruffleRuby release

    https://github.com/ruby/pathname/commit/97c97bc956

commit 5b7b81a7b19225736cb62f34e2be83f27db46445
  Author:     Benoit Daloze <eregontp@gmail.com>
  AuthorDate: 2025-12-07 02:03:17 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-01-23 15:03:33 +0900

    [ruby/pathname] Reenable truffleruby in CI and omit the 2 failing tests

    * See https://github.com/ruby/pathname/pull/73

    https://github.com/ruby/pathname/commit/a8d7f8bde3

commit 7d7c776fdfe03e54537164ed91e22ca722a24259
  Author:     BurdetteLamar <burdettelamar@yahoo.com>
  AuthorDate: 2026-01-04 00:38:41 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-01-23 14:56:11 +0900

    [ruby/pathname] [DOC] Doc for ::getwd

    https://github.com/ruby/pathname/commit/d99e62665e

commit 489916a607861f62512c3ae1bc583fd043ce4ab6
  Author:     BurdetteLamar <burdettelamar@yahoo.com>
  AuthorDate: 2026-01-04 01:49:06 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-01-23 14:56:11 +0900

    [ruby/pathname] Add details

    https://github.com/ruby/pathname/commit/b4016cba98

commit bf098417a19f9a39381fd30464674bf14e46d12c
  Author:     BurdetteLamar <burdettelamar@yahoo.com>
  AuthorDate: 2026-01-02 09:42:02 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-01-23 14:56:10 +0900

    [ruby/pathname] [DOC] Doc for Pathname#+

    https://github.com/ruby/pathname/commit/c6d32879c4

commit 4449100a1116d8cce85bb4a0854c22a83ce7443d
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-07 23:08:01 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-01-23 14:56:10 +0900

    [ruby/pathname] Omit failure on JRuby and truffleruby

    https://github.com/ruby/pathname/commit/fc70010d40

commit 5c5832706577219cef99f735735c7aac102e8a09
  Author:     Nozomi Hijikata <121233810+nozomemein@users.noreply.github.com>
  AuthorDate: 2026-01-23 14:01:26 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-23 14:01:26 +0900

    ZJIT: Resolve alias in reduce_send_to_ccall (#15947)

    Just minor fix to resolve aliases in `reduce_send_to_ccall`.

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit f5ae56c8a28c3cfac94556aff8f3828e9236c610
  Author:     Étienne Barrié <etienne.barrie@gmail.com>
  AuthorDate: 2026-01-21 20:03:37 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-01-23 13:44:03 +0900

    Remove unused variable warning

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15920

commit 6ef0eb29c6579db58e2cf3407b41d58c687ee742
  Author:     Augustin Gottlieb <33221555+aguspe@users.noreply.github.com>
  AuthorDate: 2026-01-23 11:00:37 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-23 11:00:37 +0900

    Add early type validation for ObjectSpace.memsize_of_all klass argument

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15937

    Merged-By: nobu <nobu@ruby-lang.org>

commit 1d497946af51e49e84da6a60096364bf1ad277f8
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-23 07:19:19 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-23 10:10:35 +0900

    [DOC] Fix hash style in Hash#[]

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15942

commit 13bb5599a45e15a19cd9e186bfa570fb39d68c73
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-01-20 18:46:00 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-23 09:24:03 +0900

    [ruby/rubygems] Validate executable names for invalid characters

    https://github.com/ruby/rubygems/commit/95dabef672

commit 459222a4e2481ddb579247fb0338b52f13ce6c4c
  Author:     Ufuk Kayserilioglu <ufuk.kayserilioglu@shopify.com>
  AuthorDate: 2026-01-23 08:57:21 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-23 08:57:21 +0900

    [DOC] ZJIT: Add ZJIT logo to the docs page (#15943)

    Add ZJIT logo to the docs page

  Notes:
    Merged-By: k0kubun <takashikkbn@gmail.com>

commit c1dde6d3877ad6f08879627689f4eb61d2eed478
  Author:     Max Bernstein <rubybugs@bernsteinbear.com>
  AuthorDate: 2026-01-23 07:53:28 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-23 07:53:28 +0900

    ZJIT: Count GuardBitEquals for shapes as GuardShape in stats (#15936)

    This brings back the GuardShape exit ratio in stats.

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit 51a030833c61255ea85e7b75951f873c957e393b
  Author:     BurdetteLamar <burdettelamar@yahoo.com>
  AuthorDate: 2026-01-23 07:08:15 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-23 07:33:20 +0900

    [ruby/json] Improve class JSON intro

    https://github.com/ruby/json/commit/062fcdd228

commit 319f142a3a95fb896318c3be012c2a3ce19f5a0a
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-22 07:48:46 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-23 07:11:44 +0900

    [DOC] Improve docs for Coverage.setup

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15927

commit 253bfd7d09b78171f7c30444bade28aed458a067
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-01-23 03:20:28 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-23 03:20:28 +0900

    Check for folder in `sync_default_gems` (#15933)

    It was not clear to me that you have to do anything for this command to work.
    Previous versions (for example on the 3.4 branch) had this check
    but it got lost along the way.

    Without this when the folder doesn't exist, you get this error (after it deleted all the files):
    ```
    $ ./tool/sync_default_gems.rb syntax_suggest
    Sync ruby/syntax_suggest
    ./tool/sync_default_gems.rb:464:in 'SyncDefaultGems.check_prerelease_version': undefined method 'version' for nil (NoMethodError)

        puts "#{gem}-#{spec.version} is not latest version of rubygems.org" if spec.version.to_s != latest_version
                                                                                   ^^^^^^^^
            from ./tool/sync_default_gems.rb:436:in 'SyncDefaultGems.sync_default_gems'
            from ./tool/sync_default_gems.rb:942:in '<module:SyncDefaultGems>'
            from ./tool/sync_default_gems.rb:10:in '<main>'
    ```

    Now you get

    ```
    $ ./tool/sync_default_gems.rb syntax_suggest
    Sync ruby/syntax_suggest
    Expected '../ruby/syntax_suggest' (/home/earlopain/Documents/ruby/syntax_suggest)  to be a directory, but it didn't exist.
    ```

    This was changed in https://github.com/ruby/ruby/commit/b722631b481314023b9fa2f3fd16fa9ab0b4bf9c

    Since then, `sync_lib` is unused, delete it

  Notes:
    Merged-By: k0kubun <takashikkbn@gmail.com>

commit fd7bf518a6cf5c73ab957c4c19a3e974fa6b9fbe
  Author:     Max Bernstein <rubybugs@bernsteinbear.com>
  AuthorDate: 2026-01-23 02:35:11 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-23 02:35:11 +0900

    ZJIT: Make sure to add a LIR basic block in compile failure entrypoint (#15932)

    We need to add a dummy block for this stub otherwise it won't be able to
    push any instructions. Without this, `--zjit-stats` is broken.

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit a7a0c36b2002c65ceafca592a4837c261426ab62
  Author:     Max Bernstein <rubybugs@bernsteinbear.com>
  AuthorDate: 2026-01-23 01:41:23 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-23 01:41:23 +0900

    ZJIT: Clean up partial SSI (#15929)

    After Kokubun requested named unions, I realized we don't actually need
    a `Type::subtract` function. They were only used for the ad-hoc unions.

    Also, add a test that is illustrative of what we can get from this
    partial SSI.

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit 61724b9e4ae72c00ec7f554aaac7046f67e6fda4
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-01-22 15:04:08 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-01-22 15:04:08 +0900

    Update the latest versions of actions

commit 7f8994f15bdf9e64259344bfa6d3c16b1856cc7e
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-01-22 12:18:52 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-01-22 12:19:57 +0900

    Update the latest maintenance status of Pathname

commit 6c2ecb231a90eee2a6d2a50164e44a185b52dfe9
  Author:     Kevin Menard <kevin@nirvdrum.com>
  AuthorDate: 2026-01-22 09:19:55 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-22 09:19:55 +0900

    ZJIT: Use `TypeDistribution` to track stats about the `super` CME (#15928)

    This is a follow up to #15816. Since I was only optimizing `invokesuper` for monomorphic cases, I could track that with a boolean value (actually, `Option` in this case). But, `TypeDistribution` is a better way to track this information and will put us on better footing if we end up handling polymorphic cases.

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit 436ec3a9d68ae9282fbc79e9400382d93d05e800
  Author:     Nozomi Hijikata <121233810+nozomemein@users.noreply.github.com>
  AuthorDate: 2026-01-22 08:54:10 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-22 08:54:10 +0900

    ZJIT: Compile getblockparam (#15896)

    Closes: https://github.com/Shopify/ruby/issues/863

    Compile `getblockparam` insn to `GetBlockParam` HIR so that we can handle it in ZJIT.

    ## Benchmark
    ### lobsters

    <details>

    <summary>before patch</summary>

    ```
    Average of last 10, non-warmup iters: 778ms
    ***ZJIT: Printing ZJIT statistics on exit***
    Top-20 not inlined C methods (58.4% of total 16,091,748):
                                                   Hash#fetch: 3,237,974 (20.1%)
                                                Regexp#match?:   708,838 ( 4.4%)
                                                    Hash#key?:   702,565 ( 4.4%)
                                                  String#sub!:   489,843 ( 3.0%)
                                                 Set#include?:   402,395 ( 2.5%)
                                                    String#<<:   396,364 ( 2.5%)
                                           String#start_with?:   379,338 ( 2.4%)
                                                  Hash#delete:   331,679 ( 2.1%)
                                                   String.new:   308,268 ( 1.9%)
                                                  Integer#===:   279,074 ( 1.7%)
                                             Symbol#end_with?:   255,538 ( 1.6%)
                                                 Kernel#is_a?:   250,000 ( 1.6%)
                                        Process.clock_gettime:   221,598 ( 1.4%)
                                                    Integer#>:   219,718 ( 1.4%)
                                                String#match?:   218,057 ( 1.4%)
                                              String#downcase:   213,127 ( 1.3%)
                                                   Integer#<=:   202,617 ( 1.3%)
                                                    Time#to_i:   195,248 ( 1.2%)
                                                  Time#subsec:   192,277 ( 1.2%)
                                                    Time#utc?:   188,500 ( 1.2%)
    Top-20 calls to C functions from JIT code (83.4% of total 126,501,142):
                                 rb_vm_opt_send_without_block: 35,338,443 (27.9%)
                                                   rb_vm_send: 10,126,272 ( 8.0%)
                                                 rb_hash_aref:  9,221,146 ( 7.3%)
                                              rb_vm_env_write:  8,615,394 ( 6.8%)
                         rb_zjit_writebarrier_check_immediate:  7,666,061 ( 6.1%)
                                    rb_vm_getinstancevariable:  5,902,473 ( 4.7%)
                               rb_ivar_get_at_no_ractor_check:  4,775,750 ( 3.8%)
                                            rb_obj_is_kind_of:  3,718,303 ( 2.9%)
                                            rb_vm_invokesuper:  2,705,394 ( 2.1%)
                                                 rb_hash_aset:  2,422,892 ( 1.9%)
                                    rb_vm_setinstancevariable:  2,385,262 ( 1.9%)
                                   rb_vm_opt_getconstant_path:  2,321,875 ( 1.8%)
                                                   Hash#fetch:  1,819,675 ( 1.4%)
                                                        fetch:  1,418,299 ( 1.1%)
                                            rb_vm_invokeblock:  1,387,466 ( 1.1%)
                                            rb_str_buf_append:  1,378,634 ( 1.1%)
                                    rb_ec_ary_new_from_values:  1,338,599 ( 1.1%)
                                   rb_class_allocate_instance:  1,300,827 ( 1.0%)
                                        rb_hash_new_with_size:    906,352 ( 0.7%)
                                            rb_vm_sendforward:    799,626 ( 0.6%)
    Top-2 not optimized method types for send (100.0% of total 5,166,211):
      iseq: 5,163,389 (99.9%)
      null:     2,822 ( 0.1%)
    Top-3 not optimized method types for send_without_block (100.0% of total 526,119):
            optimized_send: 479,643 (91.2%)
                      null:  42,176 ( 8.0%)
      optimized_block_call:   4,300 ( 0.8%)
    Top-3 not optimized method types for super (100.0% of total 2,365,999):
        cfunc: 2,251,438 (95.2%)
        alias:   111,257 ( 4.7%)
      attrset:     3,304 ( 0.1%)
    Top-3 instructions with uncategorized fallback reason (100.0% of total 2,214,821):
                 invokeblock: 1,387,466 (62.6%)
                 sendforward:   799,626 (36.1%)
      opt_send_without_block:    27,729 ( 1.3%)
    Top-20 send fallback reasons (100.0% of total 50,357,201):
                              send_without_block_polymorphic: 18,307,466 (36.4%)
                                        singleton_class_seen:  9,310,336 (18.5%)
                              send_not_optimized_method_type:  5,166,211 (10.3%)
                              send_without_block_no_profiles:  4,756,165 ( 9.4%)
                                one_or_more_complex_arg_pass:  2,906,412 ( 5.8%)
                                            send_no_profiles:  2,864,323 ( 5.7%)
                             super_not_optimized_method_type:  2,365,999 ( 4.7%)
                                               uncategorized:  2,214,821 ( 4.4%)
                              send_without_block_megamorphic:    581,552 ( 1.2%)
      send_without_block_not_optimized_method_type_optimized:    483,943 ( 1.0%)
            send_without_block_not_optimized_need_permission:    390,364 ( 0.8%)
                                            send_polymorphic:    329,064 ( 0.7%)
                                       too_many_args_for_lir:    173,570 ( 0.3%)
                              super_target_complex_args_pass:    131,841 ( 0.3%)
                                     super_complex_args_pass:    111,056 ( 0.2%)
                                           super_polymorphic:     86,986 ( 0.2%)
                                         argc_param_mismatch:     48,546 ( 0.1%)
                send_without_block_not_optimized_method_type:     42,176 ( 0.1%)
                  send_without_block_direct_keyword_mismatch:     37,484 ( 0.1%)
                                    obj_to_string_not_string:     34,865 ( 0.1%)
    Top-4 setivar fallback reasons (100.0% of total 2,385,262):
                not_monomorphic: 2,162,525 (90.7%)
                   not_t_object:   125,178 ( 5.2%)
                    too_complex:    97,538 ( 4.1%)
      new_shape_needs_extension:        21 ( 0.0%)
    Top-2 getivar fallback reasons (100.0% of total 6,027,586):
      not_monomorphic: 5,776,418 (95.8%)
          too_complex:   251,168 ( 4.2%)
    Top-3 definedivar fallback reasons (100.0% of total 406,027):
      not_monomorphic: 397,876 (98.0%)
          too_complex:   5,122 ( 1.3%)
         not_t_object:   3,029 ( 0.7%)
    Top-6 invokeblock handler (100.0% of total 1,387,466):
       monomorphic_iseq: 700,051 (50.5%)
            polymorphic: 513,455 (37.0%)
      monomorphic_other: 106,268 ( 7.7%)
      monomorphic_ifunc:  55,505 ( 4.0%)
            megamorphic:   6,762 ( 0.5%)
            no_profiles:   5,425 ( 0.4%)
    Top-9 popular complex argument-parameter features not optimized (100.0% of total 3,353,961):
           param_kw_opt: 1,408,663 (42.0%)
      param_forwardable:   697,209 (20.8%)
            param_block:   632,488 (18.9%)
             param_rest:   346,363 (10.3%)
           param_kwrest:   139,856 ( 4.2%)
        caller_kw_splat:    79,861 ( 2.4%)
           caller_splat:    43,585 ( 1.3%)
        caller_blockarg:     5,826 ( 0.2%)
           caller_kwarg:       110 ( 0.0%)
    Top-1 compile error reasons (100.0% of total 188,362):
      exception_handler: 188,362 (100.0%)
    Top-7 unhandled YARV insns (100.0% of total 184,408):
           getblockparam: 95,129 (51.6%)
      invokesuperforward: 81,668 (44.3%)
             getconstant:  3,318 ( 1.8%)
           setblockparam:  2,837 ( 1.5%)
              checkmatch:    929 ( 0.5%)
             expandarray:    360 ( 0.2%)
                    once:    167 ( 0.1%)
    Top-3 unhandled HIR insns (100.0% of total 237,876):
              throw: 199,380 (83.8%)
      invokebuiltin:  35,775 (15.0%)
          array_max:   2,721 ( 1.1%)
    Top-20 side exit reasons (100.0% of total 15,592,861):
                       guard_type_failure: 6,993,070 (44.8%)
                      guard_shape_failure: 6,862,785 (44.0%)
      block_param_proxy_not_iseq_or_ifunc: 1,006,781 ( 6.5%)
                       unhandled_hir_insn:   237,876 ( 1.5%)
                            compile_error:   188,362 ( 1.2%)
                      unhandled_yarv_insn:   184,408 ( 1.2%)
               block_param_proxy_modified:    29,130 ( 0.2%)
         patchpoint_stable_constant_names:    22,145 ( 0.1%)
             unhandled_newarray_send_pack:    14,481 ( 0.1%)
                      unhandled_block_arg:    13,788 ( 0.1%)
                     fixnum_mult_overflow:    10,866 ( 0.1%)
                   fixnum_lshift_overflow:    10,085 ( 0.1%)
                  patchpoint_no_ep_escape:     7,815 ( 0.1%)
                      expandarray_failure:     4,533 ( 0.0%)
                 guard_super_method_entry:     4,475 ( 0.0%)
              patchpoint_method_redefined:     1,212 ( 0.0%)
            patchpoint_no_singleton_class:       423 ( 0.0%)
                   obj_to_string_fallback:       330 ( 0.0%)
                       guard_less_failure:       163 ( 0.0%)
                                interrupt:       114 ( 0.0%)
                                 send_count: 152,442,683
                         dynamic_send_count:  50,357,201 (33.0%)
                       optimized_send_count: 102,085,482 (67.0%)
                      dynamic_setivar_count:   2,385,262 ( 1.6%)
                      dynamic_getivar_count:   6,027,586 ( 4.0%)
                  dynamic_definedivar_count:     406,027 ( 0.3%)
                  iseq_optimized_send_count:  39,671,621 (26.0%)
          inline_cfunc_optimized_send_count:  42,053,762 (27.6%)
           inline_iseq_optimized_send_count:   3,462,562 ( 2.3%)
    non_variadic_cfunc_optimized_send_count:   9,195,248 ( 6.0%)
        variadic_cfunc_optimized_send_count:   7,702,289 ( 5.1%)
    compiled_iseq_count:                              5,552
    failed_iseq_count:                                    0
    compile_time:                                   1,926ms
    profile_time:                                      20ms
    gc_time:                                           27ms
    invalidation_time:                                531ms
    vm_write_pc_count:                          132,750,117
    vm_write_sp_count:                          132,750,117
    vm_write_locals_count:                      128,780,465
    vm_write_stack_count:                       128,780,465
    vm_write_to_parent_iseq_local_count:            694,799
    vm_read_from_parent_iseq_local_count:        14,812,747
    guard_type_count:                           159,813,452
    guard_type_exit_ratio:                             4.4%
    guard_shape_count:                                    0
    code_region_bytes:                           29,425,664
    zjit_alloc_bytes:                            44,592,776
    total_mem_bytes:                             74,018,440
    side_exit_count:                             15,592,861
    total_insn_count:                           938,453,078
    vm_insn_count:                              167,693,539
    zjit_insn_count:                            770,759,539
    ratio_in_zjit:                                    82.1%

    ```

    </details>

    <details>

    <summary>after patch</summary>

    ```
    Average of last 10, non-warmup iters: 725ms
    ***ZJIT: Printing ZJIT statistics on exit***
    Top-20 not inlined C methods (58.2% of total 16,004,664):
                                                   Hash#fetch: 3,185,115 (19.9%)
                                                Regexp#match?:   708,806 ( 4.4%)
                                                    Hash#key?:   702,551 ( 4.4%)
                                                  String#sub!:   489,841 ( 3.1%)
                                                 Set#include?:   396,625 ( 2.5%)
                                                    String#<<:   396,279 ( 2.5%)
                                           String#start_with?:   379,337 ( 2.4%)
                                                  Hash#delete:   331,667 ( 2.1%)
                                                   String.new:   307,248 ( 1.9%)
                                                  Integer#===:   279,054 ( 1.7%)
                                             Symbol#end_with?:   255,538 ( 1.6%)
                                                 Kernel#is_a?:   246,961 ( 1.5%)
                                        Process.clock_gettime:   221,588 ( 1.4%)
                                                    Integer#>:   219,718 ( 1.4%)
                                                String#match?:   218,059 ( 1.4%)
                                              String#downcase:   213,109 ( 1.3%)
                                                   Integer#<=:   202,617 ( 1.3%)
                                                    Time#to_i:   192,211 ( 1.2%)
                                                  Time#subsec:   189,240 ( 1.2%)
                                                String#to_sym:   185,947 ( 1.2%)
    Top-20 calls to C functions from JIT code (83.4% of total 126,772,007):
                                 rb_vm_opt_send_without_block: 35,829,863 (28.3%)
                                                   rb_vm_send: 10,108,894 ( 8.0%)
                                                 rb_hash_aref:  9,009,231 ( 7.1%)
                                              rb_vm_env_write:  8,571,665 ( 6.8%)
                         rb_zjit_writebarrier_check_immediate:  7,702,599 ( 6.1%)
                                    rb_vm_getinstancevariable:  5,930,325 ( 4.7%)
                               rb_ivar_get_at_no_ractor_check:  4,764,439 ( 3.8%)
                                            rb_obj_is_kind_of:  3,722,865 ( 2.9%)
                                            rb_vm_invokesuper:  2,687,484 ( 2.1%)
                                                 rb_hash_aset:  2,421,186 ( 1.9%)
                                    rb_vm_setinstancevariable:  2,355,461 ( 1.9%)
                                   rb_vm_opt_getconstant_path:  2,295,528 ( 1.8%)
                                                   Hash#fetch:  1,779,524 ( 1.4%)
                                                        fetch:  1,405,591 ( 1.1%)
                                            rb_vm_invokeblock:  1,385,989 ( 1.1%)
                                            rb_str_buf_append:  1,369,177 ( 1.1%)
                                    rb_ec_ary_new_from_values:  1,337,865 ( 1.1%)
                                   rb_class_allocate_instance:  1,295,755 ( 1.0%)
                                        rb_hash_new_with_size:    902,684 ( 0.7%)
                                            rb_vm_sendforward:    798,572 ( 0.6%)
    Top-2 not optimized method types for send (100.0% of total 4,902,716):
      iseq: 4,899,894 (99.9%)
      null:     2,822 ( 0.1%)
    Top-3 not optimized method types for send_without_block (100.0% of total 526,064):
            optimized_send: 479,589 (91.2%)
                      null:  42,176 ( 8.0%)
      optimized_block_call:   4,299 ( 0.8%)
    Top-3 not optimized method types for super (100.0% of total 2,350,245):
        cfunc: 2,239,567 (95.3%)
        alias:   107,374 ( 4.6%)
      attrset:     3,304 ( 0.1%)
    Top-3 instructions with uncategorized fallback reason (100.0% of total 2,216,683):
                 invokeblock: 1,385,989 (62.5%)
                 sendforward:   798,572 (36.0%)
      opt_send_without_block:    32,122 ( 1.4%)
    Top-20 send fallback reasons (99.9% of total 50,810,802):
                              send_without_block_polymorphic: 18,668,686 (36.7%)
                                        singleton_class_seen:  9,323,039 (18.3%)
                              send_not_optimized_method_type:  4,902,716 ( 9.6%)
                              send_without_block_no_profiles:  4,824,297 ( 9.5%)
                                            send_no_profiles:  2,853,944 ( 5.6%)
                                one_or_more_complex_arg_pass:  2,829,717 ( 5.6%)
                             super_not_optimized_method_type:  2,350,245 ( 4.6%)
                                               uncategorized:  2,216,683 ( 4.4%)
                              send_without_block_megamorphic:    723,037 ( 1.4%)
                                            send_polymorphic:    544,026 ( 1.1%)
      send_without_block_not_optimized_method_type_optimized:    483,888 ( 1.0%)
            send_without_block_not_optimized_need_permission:    390,364 ( 0.8%)
                                       too_many_args_for_lir:    172,809 ( 0.3%)
                              super_target_complex_args_pass:    128,824 ( 0.3%)
                                     super_complex_args_pass:    111,053 ( 0.2%)
                                           super_polymorphic:     87,851 ( 0.2%)
                                         argc_param_mismatch:     50,382 ( 0.1%)
                send_without_block_not_optimized_method_type:     42,176 ( 0.1%)
                                    obj_to_string_not_string:     34,861 ( 0.1%)
                  send_without_block_direct_keyword_mismatch:     32,436 ( 0.1%)
    Top-4 setivar fallback reasons (100.0% of total 2,355,461):
                not_monomorphic: 2,132,746 (90.5%)
                   not_t_object:   125,163 ( 5.3%)
                    too_complex:    97,531 ( 4.1%)
      new_shape_needs_extension:        21 ( 0.0%)
    Top-2 getivar fallback reasons (100.0% of total 6,055,438):
      not_monomorphic: 5,806,179 (95.9%)
          too_complex:   249,259 ( 4.1%)
    Top-3 definedivar fallback reasons (100.0% of total 405,302):
      not_monomorphic: 397,150 (98.0%)
          too_complex:   5,122 ( 1.3%)
         not_t_object:   3,030 ( 0.7%)
    Top-6 invokeblock handler (100.0% of total 1,385,989):
       monomorphic_iseq: 688,167 (49.7%)
            polymorphic: 523,864 (37.8%)
      monomorphic_other: 106,268 ( 7.7%)
      monomorphic_ifunc:  55,505 ( 4.0%)
            megamorphic:   6,761 ( 0.5%)
            no_profiles:   5,424 ( 0.4%)
    Top-9 popular complex argument-parameter features not optimized (100.0% of total 3,234,958):
           param_kw_opt: 1,381,881 (42.7%)
      param_forwardable:   685,939 (21.2%)
            param_block:   640,948 (19.8%)
             param_rest:   327,046 (10.1%)
           param_kwrest:   120,209 ( 3.7%)
        caller_kw_splat:    38,970 ( 1.2%)
           caller_splat:    34,029 ( 1.1%)
        caller_blockarg:     5,826 ( 0.2%)
           caller_kwarg:       110 ( 0.0%)
    Top-1 compile error reasons (100.0% of total 187,347):
      exception_handler: 187,347 (100.0%)
    Top-6 unhandled YARV insns (100.0% of total 89,278):
      invokesuperforward: 81,667 (91.5%)
             getconstant:  3,318 ( 3.7%)
           setblockparam:  2,837 ( 3.2%)
              checkmatch:    929 ( 1.0%)
             expandarray:    360 ( 0.4%)
                    once:    167 ( 0.2%)
    Top-3 unhandled HIR insns (100.0% of total 236,977):
              throw: 198,481 (83.8%)
      invokebuiltin:  35,775 (15.1%)
          array_max:   2,721 ( 1.1%)
    Top-20 side exit reasons (100.0% of total 15,458,443):
                       guard_type_failure: 6,918,397 (44.8%)
                      guard_shape_failure: 6,859,686 (44.4%)
      block_param_proxy_not_iseq_or_ifunc: 1,008,346 ( 6.5%)
                       unhandled_hir_insn:   236,977 ( 1.5%)
                            compile_error:   187,347 ( 1.2%)
                      unhandled_yarv_insn:    89,278 ( 0.6%)
                     fixnum_mult_overflow:    50,739 ( 0.3%)
               block_param_proxy_modified:    28,119 ( 0.2%)
         patchpoint_stable_constant_names:    22,145 ( 0.1%)
             unhandled_newarray_send_pack:    14,481 ( 0.1%)
                      unhandled_block_arg:    13,787 ( 0.1%)
                   fixnum_lshift_overflow:    10,085 ( 0.1%)
                  patchpoint_no_ep_escape:     7,815 ( 0.1%)
                      expandarray_failure:     4,533 ( 0.0%)
                 guard_super_method_entry:     4,475 ( 0.0%)
              patchpoint_method_redefined:     1,212 ( 0.0%)
            patchpoint_no_singleton_class:       423 ( 0.0%)
                   obj_to_string_fallback:       330 ( 0.0%)
                       guard_less_failure:       163 ( 0.0%)
                                interrupt:        86 ( 0.0%)
                                 send_count: 151,889,096
                         dynamic_send_count:  50,810,802 (33.5%)
                       optimized_send_count: 101,078,294 (66.5%)
                      dynamic_setivar_count:   2,355,461 ( 1.6%)
                      dynamic_getivar_count:   6,055,438 ( 4.0%)
                  dynamic_definedivar_count:     405,302 ( 0.3%)
                  iseq_optimized_send_count:  39,470,508 (26.0%)
          inline_cfunc_optimized_send_count:  41,381,565 (27.2%)
           inline_iseq_optimized_send_count:   3,370,961 ( 2.2%)
    non_variadic_cfunc_optimized_send_count:   9,210,651 ( 6.1%)
        variadic_cfunc_optimized_send_count:   7,644,609 ( 5.0%)
    compiled_iseq_count:                              5,552
    failed_iseq_count:                                    0
    compile_time:                                   1,809ms
    profile_time:                                      15ms
    gc_time:                                           21ms
    invalidation_time:                                526ms
    vm_write_pc_count:                          132,774,559
    vm_write_sp_count:                          132,774,559
    vm_write_locals_count:                      128,748,998
    vm_write_stack_count:                       128,748,998
    vm_write_to_parent_iseq_local_count:            693,262
    vm_read_from_parent_iseq_local_count:        14,737,431
    guard_type_count:                           158,811,089
    guard_type_exit_ratio:                             4.4%
    guard_shape_count:                                    0
    code_region_bytes:                           29,458,432
    zjit_alloc_bytes:                            44,650,569
    total_mem_bytes:                             74,109,001
    side_exit_count:                             15,458,443
    total_insn_count:                           934,491,306
    vm_insn_count:                              166,025,364
    zjit_insn_count:                            768,465,942
    ratio_in_zjit:                                    82.2%
    ```

    </details>




    ### rails-bench

    <details>

    <summary>before patch</summary>

    ```
    Average of last 10, non-warmup iters: 1254ms
    ***ZJIT: Printing ZJIT statistics on exit***
    Top-20 not inlined C methods (52.8% of total 39,182,033):
                                      Hash#key?: 3,141,634 ( 8.0%)
                                  Regexp#match?: 2,420,227 ( 6.2%)
                                     Hash#fetch: 2,245,557 ( 5.7%)
                                     Array#any?: 1,157,418 ( 3.0%)
                                    Hash#delete: 1,114,346 ( 2.8%)
                                    Integer#===: 1,098,163 ( 2.8%)
                                     String.new: 1,004,713 ( 2.6%)
                                   MatchData#[]:   831,442 ( 2.1%)
                                       String#b:   797,913 ( 2.0%)
                                  String#to_sym:   680,943 ( 1.7%)
                                     Kernel#dup:   680,022 ( 1.7%)
                                     Array#all?:   650,132 ( 1.7%)
                                  Fiber.current:   649,003 ( 1.7%)
                                     Array#join:   641,038 ( 1.6%)
                                 Array#include?:   613,837 ( 1.6%)
                                   Kernel#Array:   610,311 ( 1.6%)
                                      String#<<:   606,240 ( 1.5%)
                               Symbol#end_with?:   598,807 ( 1.5%)
                          String#force_encoding:   593,535 ( 1.5%)
                             Kernel#respond_to?:   550,441 ( 1.4%)
    Top-20 calls to C functions from JIT code (75.2% of total 260,204,372):
                   rb_vm_opt_send_without_block: 52,620,850 (20.2%)
                                   rb_hash_aref: 22,920,184 ( 8.8%)
                                rb_vm_env_write: 19,484,445 ( 7.5%)
                                     rb_vm_send: 16,570,926 ( 6.4%)
           rb_zjit_writebarrier_check_immediate: 13,628,686 ( 5.2%)
                      rb_vm_getinstancevariable: 12,378,112 ( 4.8%)
                 rb_ivar_get_at_no_ractor_check: 12,208,856 ( 4.7%)
                              rb_vm_invokesuper:  8,086,664 ( 3.1%)
                                   rb_hash_aset:  5,043,532 ( 1.9%)
                              rb_obj_is_kind_of:  4,431,294 ( 1.7%)
                              rb_vm_invokeblock:  4,036,483 ( 1.6%)
                                      Hash#key?:  3,141,634 ( 1.2%)
                     rb_vm_opt_getconstant_path:  3,051,909 ( 1.2%)
                     rb_class_allocate_instance:  2,878,743 ( 1.1%)
                          rb_hash_new_with_size:  2,873,398 ( 1.1%)
                      rb_ec_ary_new_from_values:  2,584,790 ( 1.0%)
                         rb_str_concat_literals:  2,450,752 ( 0.9%)
                                  Regexp#match?:  2,420,227 ( 0.9%)
                                   rb_obj_alloc:  2,419,180 ( 0.9%)
                      rb_vm_setinstancevariable:  2,357,067 ( 0.9%)
    Top-2 not optimized method types for send (100.0% of total 8,550,761):
           iseq: 8,518,290 (99.6%)
      optimized:    32,471 ( 0.4%)
    Top-2 not optimized method types for send_without_block (100.0% of total 790,792):
      optimized_send: 608,036 (76.9%)
                null: 182,756 (23.1%)
    Top-2 not optimized method types for super (100.0% of total 6,689,860):
        cfunc: 6,640,181 (99.3%)
      attrset:    49,679 ( 0.7%)
    Top-3 instructions with uncategorized fallback reason (100.0% of total 5,911,882):
                 invokeblock: 4,036,483 (68.3%)
                 sendforward: 1,871,601 (31.7%)
      opt_send_without_block:     3,798 ( 0.1%)
    Top-20 send fallback reasons (100.0% of total 83,186,524):
                              send_without_block_polymorphic: 33,814,235 (40.6%)
                              send_not_optimized_method_type:  8,550,761 (10.3%)
                              send_without_block_no_profiles:  8,405,471 (10.1%)
                             super_not_optimized_method_type:  6,689,860 ( 8.0%)
                                               uncategorized:  5,911,882 ( 7.1%)
                                one_or_more_complex_arg_pass:  5,502,146 ( 6.6%)
                                            send_no_profiles:  4,700,820 ( 5.7%)
                                            send_polymorphic:  3,318,564 ( 4.0%)
            send_without_block_not_optimized_need_permission:  1,274,177 ( 1.5%)
                                        singleton_class_seen:  1,101,973 ( 1.3%)
                                       too_many_args_for_lir:    905,412 ( 1.1%)
                                     super_complex_args_pass:    829,842 ( 1.0%)
      send_without_block_not_optimized_method_type_optimized:    608,036 ( 0.7%)
                              send_without_block_megamorphic:    565,874 ( 0.7%)
                              super_target_complex_args_pass:    414,600 ( 0.5%)
                send_without_block_not_optimized_method_type:    182,756 ( 0.2%)
                                    obj_to_string_not_string:    158,141 ( 0.2%)
                                       super_call_with_block:    100,004 ( 0.1%)
                  send_without_block_direct_keyword_mismatch:     99,588 ( 0.1%)
                                           super_polymorphic:     52,358 ( 0.1%)
    Top-2 setivar fallback reasons (100.0% of total 2,357,067):
      not_monomorphic: 2,255,283 (95.7%)
         not_t_object:   101,784 ( 4.3%)
    Top-1 getivar fallback reasons (100.0% of total 12,378,137):
      not_monomorphic: 12,378,137 (100.0%)
    Top-2 definedivar fallback reasons (100.0% of total 350,548):
      not_monomorphic: 350,461 (100.0%)
         not_t_object:      87 ( 0.0%)
    Top-6 invokeblock handler (100.0% of total 4,036,483):
       monomorphic_iseq: 2,189,057 (54.2%)
            polymorphic: 1,207,002 (29.9%)
      monomorphic_other:   334,248 ( 8.3%)
      monomorphic_ifunc:   221,225 ( 5.5%)
            megamorphic:    84,439 ( 2.1%)
            no_profiles:       512 ( 0.0%)
    Top-9 popular complex argument-parameter features not optimized (100.0% of total 7,096,505):
           param_kw_opt: 1,834,705 (25.9%)
      param_forwardable: 1,824,953 (25.7%)
            param_block: 1,792,214 (25.3%)
             param_rest:   861,894 (12.1%)
        caller_kw_splat:   297,937 ( 4.2%)
           caller_splat:   283,669 ( 4.0%)
           param_kwrest:   200,208 ( 2.8%)
        caller_blockarg:       752 ( 0.0%)
           caller_kwarg:       173 ( 0.0%)
    Top-1 compile error reasons (100.0% of total 391,562):
      exception_handler: 391,562 (100.0%)
    Top-7 unhandled YARV insns (100.0% of total 1,899,393):
           getblockparam: 898,862 (47.3%)
      invokesuperforward: 498,993 (26.3%)
             getconstant: 400,945 (21.1%)
             expandarray:  49,985 ( 2.6%)
           setblockparam:  49,972 ( 2.6%)
              checkmatch:     480 ( 0.0%)
                    once:     156 ( 0.0%)
    Top-2 unhandled HIR insns (100.0% of total 268,151):
              throw: 232,560 (86.7%)
      invokebuiltin:  35,591 (13.3%)
    Top-19 side exit reasons (100.0% of total 9,609,677):
                      guard_shape_failure: 2,498,160 (26.0%)
      block_param_proxy_not_iseq_or_ifunc: 1,988,408 (20.7%)
                      unhandled_yarv_insn: 1,899,393 (19.8%)
                       guard_type_failure: 1,722,167 (17.9%)
                            compile_error:   391,562 ( 4.1%)
             unhandled_newarray_send_pack:   298,017 ( 3.1%)
                       unhandled_hir_insn:   268,151 ( 2.8%)
              patchpoint_method_redefined:   200,632 ( 2.1%)
                      unhandled_block_arg:   151,295 ( 1.6%)
               block_param_proxy_modified:   124,245 ( 1.3%)
                       guard_less_failure:    50,126 ( 0.5%)
                   fixnum_lshift_overflow:     9,985 ( 0.1%)
         patchpoint_stable_constant_names:     6,366 ( 0.1%)
                     fixnum_mult_overflow:       570 ( 0.0%)
                   obj_to_string_fallback:       429 ( 0.0%)
                  patchpoint_no_ep_escape:       109 ( 0.0%)
                                interrupt:        48 ( 0.0%)
                 guard_super_method_entry:         8 ( 0.0%)
                 guard_greater_eq_failure:         6 ( 0.0%)
                                 send_count: 328,547,991
                         dynamic_send_count:  83,186,524 (25.3%)
                       optimized_send_count: 245,361,467 (74.7%)
                      dynamic_setivar_count:   2,357,067 ( 0.7%)
                      dynamic_getivar_count:  12,378,137 ( 3.8%)
                  dynamic_definedivar_count:     350,548 ( 0.1%)
                  iseq_optimized_send_count:  93,424,465 (28.4%)
          inline_cfunc_optimized_send_count:  98,338,280 (29.9%)
           inline_iseq_optimized_send_count:   9,338,763 ( 2.8%)
    non_variadic_cfunc_optimized_send_count:  26,452,910 ( 8.1%)
        variadic_cfunc_optimized_send_count:  17,807,049 ( 5.4%)
    compiled_iseq_count:                               2,887
    failed_iseq_count:                                     0
    compile_time:                                      877ms
    profile_time:                                       32ms
    gc_time:                                            11ms
    invalidation_time:                                  15ms
    vm_write_pc_count:                           284,341,923
    vm_write_sp_count:                           284,341,923
    vm_write_locals_count:                       272,137,494
    vm_write_stack_count:                        272,137,494
    vm_write_to_parent_iseq_local_count:           1,079,867
    vm_read_from_parent_iseq_local_count:         30,816,135
    guard_type_count:                            313,667,907
    guard_type_exit_ratio:                              0.5%
    guard_shape_count:                                     0
    code_region_bytes:                            14,417,920
    zjit_alloc_bytes:                             19,075,183
    total_mem_bytes:                              33,493,103
    side_exit_count:                               9,609,677
    total_insn_count:                          1,706,360,231
    vm_insn_count:                               124,793,155
    zjit_insn_count:                           1,581,567,076
    ratio_in_zjit:                                     92.7%
    ```

    </details>

    <details>

    <summary>after patch</summary>

    ```
    Average of last 10, non-warmup iters: 1136ms
    ***ZJIT: Printing ZJIT statistics on exit***
    Top-20 not inlined C methods (52.8% of total 39,182,033):
                                      Hash#key?: 3,141,634 ( 8.0%)
                                  Regexp#match?: 2,420,227 ( 6.2%)
                                     Hash#fetch: 2,245,557 ( 5.7%)
                                     Array#any?: 1,157,418 ( 3.0%)
                                    Hash#delete: 1,114,346 ( 2.8%)
                                    Integer#===: 1,098,163 ( 2.8%)
                                     String.new: 1,004,713 ( 2.6%)
                                   MatchData#[]:   831,442 ( 2.1%)
                                       String#b:   797,913 ( 2.0%)
                                  String#to_sym:   680,943 ( 1.7%)
                                     Kernel#dup:   680,022 ( 1.7%)
                                     Array#all?:   650,132 ( 1.7%)
                                  Fiber.current:   649,003 ( 1.7%)
                                     Array#join:   641,038 ( 1.6%)
                                 Array#include?:   613,837 ( 1.6%)
                                   Kernel#Array:   610,311 ( 1.6%)
                                      String#<<:   606,240 ( 1.5%)
                               Symbol#end_with?:   598,807 ( 1.5%)
                          String#force_encoding:   593,535 ( 1.5%)
                             Kernel#respond_to?:   550,441 ( 1.4%)
    Top-20 calls to C functions from JIT code (74.8% of total 261,805,313):
                   rb_vm_opt_send_without_block: 52,621,173 (20.1%)
                                   rb_hash_aref: 22,920,184 ( 8.8%)
                                rb_vm_env_write: 19,484,925 ( 7.4%)
                                     rb_vm_send: 16,571,020 ( 6.3%)
           rb_zjit_writebarrier_check_immediate: 13,780,332 ( 5.3%)
                      rb_vm_getinstancevariable: 12,378,114 ( 4.7%)
                 rb_ivar_get_at_no_ractor_check: 12,208,856 ( 4.7%)
                              rb_vm_invokesuper:  8,086,666 ( 3.1%)
                                   rb_hash_aset:  5,043,537 ( 1.9%)
                              rb_obj_is_kind_of:  4,431,299 ( 1.7%)
                              rb_vm_invokeblock:  4,036,481 ( 1.5%)
                                      Hash#key?:  3,141,634 ( 1.2%)
                     rb_vm_opt_getconstant_path:  3,051,909 ( 1.2%)
                     rb_class_allocate_instance:  2,878,746 ( 1.1%)
                          rb_hash_new_with_size:  2,873,398 ( 1.1%)
                      rb_ec_ary_new_from_values:  2,585,224 ( 1.0%)
                         rb_str_concat_literals:  2,450,752 ( 0.9%)
                                  Regexp#match?:  2,420,227 ( 0.9%)
                                   rb_obj_alloc:  2,419,182 ( 0.9%)
                      rb_vm_setinstancevariable:  2,357,067 ( 0.9%)
    Top-2 not optimized method types for send (100.0% of total 8,550,761):
           iseq: 8,518,290 (99.6%)
      optimized:    32,471 ( 0.4%)
    Top-2 not optimized method types for send_without_block (100.0% of total 790,792):
      optimized_send: 608,036 (76.9%)
                null: 182,756 (23.1%)
    Top-2 not optimized method types for super (100.0% of total 6,689,860):
        cfunc: 6,640,181 (99.3%)
      attrset:    49,679 ( 0.7%)
    Top-3 instructions with uncategorized fallback reason (100.0% of total 5,911,883):
                 invokeblock: 4,036,481 (68.3%)
                 sendforward: 1,871,601 (31.7%)
      opt_send_without_block:     3,801 ( 0.1%)
    Top-20 send fallback reasons (100.0% of total 83,186,941):
                              send_without_block_polymorphic: 33,814,528 (40.6%)
                              send_not_optimized_method_type:  8,550,761 (10.3%)
                              send_without_block_no_profiles:  8,405,497 (10.1%)
                             super_not_optimized_method_type:  6,689,860 ( 8.0%)
                                               uncategorized:  5,911,883 ( 7.1%)
                                one_or_more_complex_arg_pass:  5,502,147 ( 6.6%)
                                            send_no_profiles:  4,700,820 ( 5.7%)
                                            send_polymorphic:  3,318,658 ( 4.0%)
            send_without_block_not_optimized_need_permission:  1,274,177 ( 1.5%)
                                        singleton_class_seen:  1,101,973 ( 1.3%)
                                       too_many_args_for_lir:    905,412 ( 1.1%)
                                     super_complex_args_pass:    829,842 ( 1.0%)
      send_without_block_not_optimized_method_type_optimized:    608,036 ( 0.7%)
                              send_without_block_megamorphic:    565,874 ( 0.7%)
                              super_target_complex_args_pass:    414,600 ( 0.5%)
                send_without_block_not_optimized_method_type:    182,756 ( 0.2%)
                                    obj_to_string_not_string:    158,141 ( 0.2%)
                                       super_call_with_block:    100,004 ( 0.1%)
                  send_without_block_direct_keyword_mismatch:     99,588 ( 0.1%)
                                           super_polymorphic:     52,360 ( 0.1%)
    Top-2 setivar fallback reasons (100.0% of total 2,357,067):
      not_monomorphic: 2,255,283 (95.7%)
         not_t_object:   101,784 ( 4.3%)
    Top-1 getivar fallback reasons (100.0% of total 12,378,139):
      not_monomorphic: 12,378,139 (100.0%)
    Top-2 definedivar fallback reasons (100.0% of total 350,548):
      not_monomorphic: 350,461 (100.0%)
         not_t_object:      87 ( 0.0%)
    Top-6 invokeblock handler (100.0% of total 4,036,481):
       monomorphic_iseq: 2,189,057 (54.2%)
            polymorphic: 1,207,002 (29.9%)
      monomorphic_other:   334,248 ( 8.3%)
      monomorphic_ifunc:   221,223 ( 5.5%)
            megamorphic:    84,439 ( 2.1%)
            no_profiles:       512 ( 0.0%)
    Top-9 popular complex argument-parameter features not optimized (100.0% of total 7,096,506):
           param_kw_opt: 1,834,706 (25.9%)
      param_forwardable: 1,824,953 (25.7%)
            param_block: 1,792,214 (25.3%)
             param_rest:   861,894 (12.1%)
        caller_kw_splat:   297,937 ( 4.2%)
           caller_splat:   283,669 ( 4.0%)
           param_kwrest:   200,208 ( 2.8%)
        caller_blockarg:       752 ( 0.0%)
           caller_kwarg:       173 ( 0.0%)
    Top-1 compile error reasons (100.0% of total 391,562):
      exception_handler: 391,562 (100.0%)
    Top-6 unhandled YARV insns (100.0% of total 1,000,531):
      invokesuperforward: 498,993 (49.9%)
             getconstant: 400,945 (40.1%)
             expandarray:  49,985 ( 5.0%)
           setblockparam:  49,972 ( 5.0%)
              checkmatch:     480 ( 0.0%)
                    once:     156 ( 0.0%)
    Top-2 unhandled HIR insns (100.0% of total 268,154):
              throw: 232,560 (86.7%)
      invokebuiltin:  35,594 (13.3%)
    Top-19 side exit reasons (100.0% of total 8,710,811):
                      guard_shape_failure: 2,498,161 (28.7%)
      block_param_proxy_not_iseq_or_ifunc: 1,988,408 (22.8%)
                       guard_type_failure: 1,722,168 (19.8%)
                      unhandled_yarv_insn: 1,000,531 (11.5%)
                            compile_error:   391,562 ( 4.5%)
             unhandled_newarray_send_pack:   298,017 ( 3.4%)
                       unhandled_hir_insn:   268,154 ( 3.1%)
              patchpoint_method_redefined:   200,632 ( 2.3%)
                      unhandled_block_arg:   151,295 ( 1.7%)
               block_param_proxy_modified:   124,245 ( 1.4%)
                       guard_less_failure:    50,126 ( 0.6%)
                   fixnum_lshift_overflow:     9,985 ( 0.1%)
         patchpoint_stable_constant_names:     6,366 ( 0.1%)
                     fixnum_mult_overflow:       570 ( 0.0%)
                   obj_to_string_fallback:       429 ( 0.0%)
                  patchpoint_no_ep_escape:       109 ( 0.0%)
                                interrupt:        39 ( 0.0%)
                 guard_super_method_entry:         8 ( 0.0%)
                 guard_greater_eq_failure:         6 ( 0.0%)
                                 send_count: 328,747,903
                         dynamic_send_count:  83,186,941 (25.3%)
                       optimized_send_count: 245,560,962 (74.7%)
                      dynamic_setivar_count:   2,357,067 ( 0.7%)
                      dynamic_getivar_count:  12,378,139 ( 3.8%)
                  dynamic_definedivar_count:     350,548 ( 0.1%)
                  iseq_optimized_send_count:  93,623,831 (28.5%)
          inline_cfunc_optimized_send_count:  98,338,311 (29.9%)
           inline_iseq_optimized_send_count:   9,338,766 ( 2.8%)
    non_variadic_cfunc_optimized_send_count:  26,453,005 ( 8.0%)
        variadic_cfunc_optimized_send_count:  17,807,049 ( 5.4%)
    compiled_iseq_count:                               2,888
    failed_iseq_count:                                     0
    compile_time:                                      858ms
    profile_time:                                       29ms
    gc_time:                                            59ms
    invalidation_time:                                  15ms
    vm_write_pc_count:                           285,990,091
    vm_write_sp_count:                           285,990,091
    vm_write_locals_count:                       272,886,376
    vm_write_stack_count:                        272,886,376
    vm_write_to_parent_iseq_local_count:           1,079,877
    vm_read_from_parent_iseq_local_count:         30,816,135
    guard_type_count:                            314,169,071
    guard_type_exit_ratio:                              0.5%
    guard_shape_count:                                     0
    code_region_bytes:                            14,401,536
    zjit_alloc_bytes:                             19,128,598
    total_mem_bytes:                              33,530,134
    side_exit_count:                               8,710,811
    total_insn_count:                          1,705,461,649
    vm_insn_count:                               121,244,824
    zjit_insn_count:                           1,584,216,825
    ratio_in_zjit:                                     92.9%
    ```

    </details>

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit 965b16d766df66e296a8d8254263da3c1cf45717
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-21 09:39:14 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-22 07:43:44 +0900

    [DOC] Add doc about eval coverage

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15918

commit 0cc4e212c47f15f9f5384fb9871a2da8a6276ed4
  Author:     Max Bernstein <rubybugs@bernsteinbear.com>
  AuthorDate: 2026-01-22 04:23:29 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-22 04:23:29 +0900

    ZJIT: Get type information from branchif, branchunless, branchnil instructions (#15915)

    Do a sort of "partial static single information (SSI)" form that learns
    types of operands from branch instructions. A branchif, for example,
    tells us that in the truthy path, we know the operand is not nil, and
    not false. Similarly, in the falsy path, we know the operand is either
    nil or false.

    Add a RefineType instruction to attach this information.

    This PR does this in SSA construction because it's pretty
    straightforward, but we can also do a more aggressive version of this
    that can learn information about e.g. int ranges from other checks later
    in the optimization pipeline.

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit cfa97af7e1426c76b769495ef4b1689be3b0a685
  Author:     Kevin Menard <kevin@nirvdrum.com>
  AuthorDate: 2026-01-22 04:07:20 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-22 04:07:20 +0900

    ZJIT: Introduce `GetLEP` HIR instruction (#15917)

    This PR is a follow-up to #15816. There, I introduced the `GuardSuperMethodEntry` HIR instruction and that needed the LEP. The LEP was also used by `GetBlockHandler`. Consequently, the codegen for `invokesuper` ended up loading the LEP twice. By introducing a new HIR instruction, we can load the LEP once and use it in both `GetBlockHandler` and `GuardSuperMethodEntry`.

    I also updated `IsBlockGiven`, which conditionally loaded the LEP. To ensure we only use `GetLEP` in the cases we need it, I lifted most of the `IsBlockGiven` handler to HIR. As an added benefit, this addressed a TODO that @tekknolagi had written: when `block_given?` is called outside of a method we can rewrite to a constant `false`.

    We could use `GetLEP` in the handling of `Defined`, but that looked a bit more involved and I wanted to keep this PR focused, so I'm suggesting we handle that as future work.

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit 6d0b47de86eef3a396ff2bf6eea731d2fb778ded
  Author:     Aaron Patterson <tenderlove@ruby-lang.org>
  AuthorDate: 2026-01-22 04:00:15 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-22 04:00:15 +0900

    ZJIT: Add a CFG to the LIR backend (#15879)

    We want to use [linear scan register allocation](https://bernsteinbear.com/blog/linear-scan/), but a prerequisite is having a CFG available.  Previously LIR only had a linear block of instructions, this PR introduces a CFG to the LIR backend.  I've done my best to ensure that the "hot path" machine code we generate is the same (as I was testing I noticed that side exit machine code was being dumped in a different order).

    This PR doesn't make any changes to the existing register allocator, it simply introduces a CFG to LIR.  The basic blocks in the LIR CFG always start with a label (the first instruction is a label) and the last 0, 1, or 2 instructions will be jump instructions.  No other jump instructions should appear mid-block.

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit f3a5b0cdb5ecd47d9240ded667a90436c489fea7
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-01-22 02:50:28 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-22 02:50:28 +0900

    Apply backport label to 4.X branches (#15925)

  Notes:
    Merged-By: k0kubun <takashikkbn@gmail.com>

commit 7f687b0abc155cd941d416677184f98f5f7d1804
  Author:     Schneems <richard.schneeman+foo@gmail.com>
  AuthorDate: 2026-01-22 00:58:28 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-22 01:01:16 +0900

    [ruby/syntax_suggest] v2.0.3

    https://github.com/ruby/syntax_suggest/commit/a81b92fcf2

commit 54fa9c81e13039ec92f5b2132a65e64092d81ad7
  Author:     Schneems <richard.schneeman+foo@gmail.com>
  AuthorDate: 2026-01-21 06:32:33 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-22 00:57:38 +0900

    [ruby/syntax_suggest] Refactor multi-prism version logic

    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(&: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

commit 8aedb89681c42a8d6169ff1950135f841cd578f1
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-01-21 21:19:42 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-21 22:21:37 +0900

    [ruby/prism] Also handle `BasicObject` as a return value

    We should touch these as little as possible and just pass them along

    https://github.com/ruby/prism/commit/52c4fa785e

commit 913ffcd1ddb854d2fdbf73a6ddf1930b8a472322
  Author:     Benoit Daloze <eregontp@gmail.com>
  AuthorDate: 2026-01-21 05:20:06 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-21 22:21:37 +0900

    [ruby/prism] Check using Prism nodes if a command call has any arguments in Ripper translator

    * We don't know what `on_*` events might return so we cannot assume it's an Array.
    * See https://github.com/ruby/prism/issues/3838#issuecomment-3774702396

    https://github.com/ruby/prism/commit/bed4271ce2

commit 519a4bdbc19693be9020419eb4dea9e66a256a41
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-01-21 01:59:15 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-01-21 19:23:01 +0900

    Optimize File.basename

    The actual algorithm is largely unchanged, just allowed to use
    singlebyte checks for common encodings.

    It could certainly be optimized much further, as here again it often
    scans from the front of the string when we're interested in the back of
    it. But the algorithm as many Windows only corner cases so I'd rather
    ship a good improvement now and eventually come back to it later.

    Most of improvement here is from the reduced setup cost (avodi double
    null checks, avoid duping the argument, etc), and skipping the multi-byte
    checks.

    ```
    compare-ruby: ruby 4.1.0dev (2026-01-19T03:51:30Z master 631bf19b37) +PRISM [arm64-darwin25]
    built-ruby: ruby 4.1.0dev (2026-01-21T08:21:05Z opt-basename 7eb11745b2) +PRISM [arm64-darwin25]
    ```

    |           |compare-ruby|built-ruby|
    |:----------|-----------:|---------:|
    |long       |      3.412M|   18.158M|
    |           |           -|     5.32x|
    |long_name  |      1.981M|    8.580M|
    |           |           -|     4.33x|
    |withext    |      3.200M|   12.986M|
    |           |           -|     4.06x|

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15919

commit 0f1eea09490287cf9ed907f7cd84398b03074d98
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-01-20 19:07:11 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-21 16:40:49 +0900

    [ruby/rubygems] Skip failing tests

    https://github.com/ruby/rubygems/commit/ee68fd8d20

commit d93235874ab87cccd41762b8fbb0c4e7f5b4db16
  Author:     Jason Lunn <jason.lunn@gmail.com>
  AuthorDate: 2026-01-20 02:19:29 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-21 16:40:48 +0900

    [ruby/rubygems] Appease the linter again

    https://github.com/ruby/rubygems/commit/92f35e9684

commit 2efffe09e10232dbe886285470e85b77a9ac7d7a
  Author:     Jason Lunn <jason.lunn@gmail.com>
  AuthorDate: 2026-01-17 00:50:16 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-21 16:40:48 +0900

    [ruby/rubygems] Appease the linter

    https://github.com/ruby/rubygems/commit/aba307411a

commit c959741695d9cccd5376775596dce643b5a500a1
  Author:     Jason Lunn <jason.lunn@gmail.com>
  AuthorDate: 2026-01-16 07:07:18 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-21 16:40:48 +0900

    [ruby/rubygems] Add test

    https://github.com/ruby/rubygems/commit/3d8140b289

commit 3aa866ca0d95a12f933d11e9b25c17f093c212a4
  Author:     Jason Lunn <jason.lunn@gmail.com>
  AuthorDate: 2026-01-13 23:07:20 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-21 16:40:47 +0900

    [ruby/rubygems] Remove special behavior for rake

    Fixes https://github.com/ruby/rubygems/pull/9244

    https://github.com/ruby/rubygems/commit/7dc3d43d2e

commit 6f1453dc083caecf32c1c7f55491c4ac6ddd7a62
  Author:     Randy Stauner <randy@r4s6.net>
  AuthorDate: 2026-01-21 15:19:34 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-21 15:19:34 +0900

    ZJIT: Support optional keyword arguments in direct send (#15873)

    This fills in constants when unspecified optional keyword args have static default values.
    For complex defaults we calculate the kw_bits and utilize the checkkeyword logic we already had.

    The following benchmarks used to register param_kw_opt.
    Some of them (like graphql*) just trade that for some other complexity, or "too_many_args_for_lir".
    Notable improvements include activerecord where the previous param_kw_opt count has a corresponding drop in complex args and dynamic_send_count and a nearly equal rise in optimized_send_count.
    The gains are similar but not as complete in hexapdf, liquid-render, lobsters, railsbench, shipit.

    | Benchmark | param_kw_opt | Δ one_or_more_complex | Δ too_many_args | Δ dynamic_send | Δ optimized_send |
    |-----------|-------------:|----------------------:|----------------:|---------------:|-----------------:|
    | activerecord | 6,307,141 | -6,253,823 | +4,084 | -6,306,223 | +6,279,766 |
    | blurhash | 21 | -21 | +0 | -23 | +20 |
    | chunky-png | 813,604 | -813,604 | +0 | -813,616 | +813,556 |
    | erubi-rails | 1,590,395 | -590,274 | +35,578 | -552,914 | +550,826 |
    | fluentd | 4,906 | -4,854 | +21 | -5,745 | +5,080 |
    | graphql | 1,610,439 | -1,610,432 | +1,605,751 | -4,688 | +4,628 |
    | graphql-native | 16,332,386 | -16,332,375 | +16,309,681 | -22,701 | +22,638 |
    | hexapdf | 9,165,465 | -9,124,509 | +203,754 | -8,920,727 | +8,839,295 |
    | liquid-compile | 14,817 | -14,792 | +0 | -14,705 | +15,045 |
    | liquid-render | 3,994,905 | -3,994,901 | +0 | -3,994,868 | +3,020,779 |
    | lobsters | 2,467,510 | -2,297,298 | +205,610 | -2,216,583 | +1,694,092 |
    | protoboeuf | 11,521 | -11,521 | +0 | -11,523 | +11,520 |
    | psych-load | 77,612 | -77,609 | +29,942 | -77,613 | -12,242 |
    | rack | 2,743 | -2,742 | +0 | -2,750 | +2,668 |
    | railsbench | 3,579,778 | -2,517,615 | +432,575 | -2,084,480 | +1,882,928 |
    | ruby-lsp | 287,171 | -379,716 | +37 | -409,368 | -267,248 |
    | rubyboy | 5,993,004 | -5,993,003 | +0 | -5,993,006 | +5,992,993 |
    | sequel | 182,652 | -182,631 | +0 | -182,563 | +122,687 |
    | shipit | 3,289,456 | -2,778,419 | +306,867 | -3,201,395 | +1,068,505 |
    | tinygql | 2,732 | -2,732 | +1 | -2,734 | +2,729 |

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit 01984fa80e8b8de0c0b1b726101ffadece5ea5ca
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-20 10:36:16 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-21 10:55:16 +0900

    [ruby/mmtk] Pass whether GC is moving to rb_mmtk_update_global_tables

    https://github.com/ruby/mmtk/commit/002faa8f92

commit 36809a8d0c7ab67ff0919b331db926529a3e98a9
  Author:     Alan Wu <XrXr@users.noreply.github.com>
  AuthorDate: 2026-01-21 09:06:54 +0900
  Commit:     Alan Wu <XrXr@users.noreply.github.com>
  CommitDate: 2026-01-21 09:42:25 +0900

    ZJIT: Add fail-fast assert for non-register {cpush,cpop}_pair

    There is no splitting for these so let's add a assert to try and catch
    misuse. VRegs are not necessarily registers in the end, so this is best
    effort. In those situations they'll get a less proximate panic message.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15884

commit f7e73ba3bf9ced61ac9cca5cf042fd0efe398f69
  Author:     Jeff Zhang <jeff@39bytes.dev>
  AuthorDate: 2026-01-21 08:31:26 +0900
  Commit:     Alan Wu <XrXr@users.noreply.github.com>
  CommitDate: 2026-01-21 09:42:25 +0900

    ZJIT: A64: Avoid gaps in the stack when preserving registers for calls

    Previously, we used a `str x, [sp, #-0x10]!` for each value, which
    left an 8-byte gap. Use STP to store a pair at a time instead.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15884

commit e24b52885feaa87cdb5796c2a08e5995274e83cb
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-20 09:26:47 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-21 08:01:22 +0900

    Allow objects on Ruby stack to be GC movable

    Objects on the Ruby stack can be GC movable and there is corresponding
    code in rb_execution_context_update to update references for moved objects.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15909

commit 631a5076dabcb846157a4410bcccf202fce76127
  Author:     Alan Wu <XrXr@users.noreply.github.com>
  AuthorDate: 2026-01-09 13:12:24 +0900
  Commit:     Alan Wu <XrXr@users.noreply.github.com>
  CommitDate: 2026-01-21 06:37:51 +0900

    ZJIT: Delete Insn::CPushAll and Insn::CPopAll

    Since we automatically preserve registers across calls, it's never
    necessary to manually and imprecisely do it with `C{Push,Pop}All`.
    Delete them to remove the maintenance burden and reduce confusion.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15916

commit 1bc51114114aae12f533e60e02a0dc606fb5d793
  Author:     Alan Wu <XrXr@users.noreply.github.com>
  AuthorDate: 2026-01-21 05:35:50 +0900
  Commit:     Alan Wu <XrXr@users.noreply.github.com>
  CommitDate: 2026-01-21 06:37:51 +0900

    ZJIT: Add a smoke test for --zjit-trace-exits

    Better than nothing!

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15916

commit 9ad8dd00b1be782b7a053315bc4c00ff642c5fba
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-01-21 04:34:49 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-21 05:23:18 +0900

    [ruby/prism] Fix `on_*` return value of ripper translator

    You're supposed to return the first argument.
    ```rb
    # Before
    [[:stmts_new], [:rescue_mod, nil, nil], [:stmts_add, nil, nil], [:program, nil]]
    # After
    [[:stmts_new], [:rescue_mod, "1", "2"], [:stmts_add, nil, "1"], [:program, nil]]
    ```

    The correct result would be:
    `[[:rescue_mod, "1", "2"], [:stmts_new], [:stmts_add, nil, "1"], [:program, nil]]`

    But the order depends on the prism AST so it seems very difficult to match.

    https://github.com/ruby/prism/commit/94e0107729

commit d225bb8b464e4e03d2eb6c09ef15adf727af9e2b
  Author:     Jeff Zhang <jeff.j.zhang@shopify.com>
  AuthorDate: 2026-01-21 00:50:43 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-21 00:50:43 +0900

    ZJIT: Compile IsA into load + compare for String/Array/Hash (#15878)

    Resolves https://github.com/Shopify/ruby/issues/880

    Implemented this by using the code generation for `GuardType` as a reference.
    Not sure if this is the best way to go about it, but it seems to work.

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit c27ae8d91aadca0660070ee1eeae9598b1fe47ee
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-20 23:00:08 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-20 23:15:41 +0900

    [ruby/psych] Remove excessive check of message

    The order of "unexpected" and "missing" keyword argument errors at
    `Data#initialize` had not been defined strictly.

    [Bug #21844](https://bugs.ruby-lang.org/issues/21844)
    ruby/ruby#15910

    https://github.com/ruby/psych/commit/ba748d9b04

commit 2842e61c92022c475ddea220f6ab1d7c5f441203
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-01-20 20:16:40 +0900
  Commit:     Benoit Daloze <eregontp@gmail.com>
  CommitDate: 2026-01-20 22:18:30 +0900

    Reapply "[ruby/prism] Add Ripper :on_sp events for Prism.lex_compat and Prism::Translation::Ripper"

    This reverts commit 58f1127b51cf4fbb1f334f8701a041f40701dca2.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15914

commit 20113a228d2098a4ee61a2466c809a1081b0e403
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-01-20 20:16:20 +0900
  Commit:     Benoit Daloze <eregontp@gmail.com>
  CommitDate: 2026-01-20 22:18:30 +0900

    Handle `on_sp` in `syntax_suggest` when using prism

    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.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15914

commit 300927b4bb1b41e9e848c063f2ca6109423a1729
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-20 18:37:24 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-20 19:21:45 +0900

    [Bug #21845] Rebuild gem extensions at RUBY_ABI_VERSION change

    As `TARGET_SO_DIR_TIMESTAMP` contains `ruby_version`, after bumping
    `RUBY_ABI_VERSION` it should not be existing.  Usually such outdated
    files will be removed by `make outdate-bundled-gems` automatically
    invoked by `make up`.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15913

commit 58f1127b51cf4fbb1f334f8701a041f40701dca2
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-01-20 19:10:16 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-01-20 19:10:16 +0900

    Revert "[ruby/prism] Add Ripper :on_sp events for Prism.lex_compat and Prism::Translation::Ripper"

    This reverts commit 35a7b5159f39de2cac848c072674e5350cc41aa4.

    This broke syntax_suggest.

    https://github.com/ruby/ruby/actions/runs/21167011751/job/60874111912

commit 35a7b5159f39de2cac848c072674e5350cc41aa4
  Author:     Benoit Daloze <eregontp@gmail.com>
  AuthorDate: 2026-01-20 16:53:39 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-20 18:53:08 +0900

    [ruby/prism] Add Ripper :on_sp events for Prism.lex_compat and Prism::Translation::Ripper

    * Handle line continuations.
    * Handle space at the end of file in LexCompat.

    https://github.com/ruby/prism/commit/32bd13eb7d

    Co-authored-by: Earlopain <14981592+Earlopain@users.noreply.github.com>

commit 53fe9933fd6c62f3a7f1ed2908a99510c2f27adc
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-01-20 16:56:17 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-01-20 17:58:51 +0900

    Optimize `File.extname` for common encodings

    Similar optimizations to the ones performed in GH-15907.

    - Skip the expensive multi-byte encoding handling for the common
      encodings that are known to be safe.
    - Use `CheckPath` to save on copying the argument and only scan it for
      NULL bytes once.
    - Create the return string with rb_enc_str_new instead of rb_str_subseq
      as it's going to be a very small string anyway.

    This could be optimized a little bit further by searching for both `.` and `dirsep`
    in one pass,

    ```
    compare-ruby: ruby 4.1.0dev (2026-01-19T03:51:30Z master 631bf19b37) +PRISM [arm64-darwin25]
    built-ruby: ruby 4.1.0dev (2026-01-20T07:33:42Z master 6fb50434e3) +PRISM [arm64-darwin25]
    ```

    |           |compare-ruby|built-ruby|
    |:----------|-----------:|---------:|
    |long       |      3.606M|   22.229M|
    |           |           -|     6.17x|
    |long_name  |      2.254M|   13.416M|
    |           |           -|     5.95x|
    |short      |     16.488M|   29.969M|
    |           |           -|     1.82x|

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15912

commit 6fb50434e325dbaf0ae75ade5b47b26f9671a5d2
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-01-20 01:04:15 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-01-20 16:33:42 +0900

    file.c: Stop passing NULL for encoding

    `rb_encoding *` is defined as `nonnull` so `if (enc)` is optimized
    out by the compiler. We have to pass a boolean alongside it to
    avoid crashes.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15907

commit 2d10f1511806d3ef0c327ef0f89ff0ab8c1e5947
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-01-19 17:03:42 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-01-20 16:33:42 +0900

    file.c: dirname_n also use strrdirsep when n > 1

    It's both simpler and faster.

    |       |compare-ruby|built-ruby|
    |:------|-----------:|---------:|
    |long   |      3.960M|   24.072M|
    |       |           -|     6.08x|
    |short  |     15.417M|   29.841M|
    |       |           -|     1.94x|
    |n_4    |      3.858M|   18.415M|
    |       |           -|     4.77x|

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15907

commit 990cf1286a165588c5b2f4d4fa98bb9d45c8fd11
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-01-19 16:56:41 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-01-20 16:33:42 +0900

    file.c: Inc macro now handle NULL encoding

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15907

commit 240a58ecc63d07b50ddfb027a9c9b9bc317ffc49
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-01-19 16:52:57 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-01-20 16:33:42 +0900

    file.c: skiproot doesn't need encoding

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15907

commit 11d29d32d270d2a98642858fdca25a5272563995
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-01-19 16:43:57 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-01-20 16:33:42 +0900

    file.c: strrdirsep search from the back of the string for common encodings

    `strrdirsep` quite innficiently search for the last separator from the front
    of the string.

    This is surprising but necessary because in Shift-JS, `0x5c` can
    be the second byte of some multi-byte characters, as such it's
    not possible to do a pure ASCII search. And it's even more costly
    because for each character we need to do expensive checks to
    handle this possibility.

    However in the overwhelming majority of cases, paths are encoded
    in UTF-8 or ASCII, so for these common encodings we can use the
    more logical and efficient algorithm.

    ```
    compare-ruby: ruby 4.1.0dev (2026-01-17T14:40:03Z master 00a3b71eaf) +PRISM [arm64-darwin25]
    built-ruby: ruby 4.1.0dev (2026-01-19T07:43:57Z file-dirname-lower.. a8d3535e5b) +PRISM [arm64-darwin25]
    ```

    |       |compare-ruby|built-ruby|
    |:------|-----------:|---------:|
    |long   |      3.974M|   23.674M|
    |       |           -|     5.96x|
    |short  |     15.281M|   29.034M|
    |       |           -|     1.90x|

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15907

commit 27bb1623cd048f3cbfc527cc315894803deabba2
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-01-19 15:32:09 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-01-20 16:33:42 +0900

    file.c: Optimize `rb_file_dirname_n` fixed costs

    - `str_null_check` was performed twice, once by `FilePathStringValue`
      and a second time by `StringValueCStr`.
    - `StringValueCStr` was checking for the terminator presence, but we
      don't care about that.
    - `FilePathStringValue` calls `rb_str_new_frozen` to ensure `fname`
      isn't mutated, but that's costly for such a check. Instead we
      can do it in debug mode only.
    - `rb_enc_get` is slow because it accepts arbitrary objects, even immediates,
      so it has to do numerous type checks. Add a much faster `rb_str_enc_get`
      when we know we're dealing with a string.
    - `rb_enc_copy` is slow for the same reasons, since we already have the
      encoding, we can use `rb_enc_str_new` instead.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15907

commit 826dbcfb2be33ffbfbc99554244881e014513d20
  Author:     Alan Wu <XrXr@users.noreply.github.com>
  AuthorDate: 2026-01-17 12:39:36 +0900
  Commit:     Alan Wu <XrXr@users.noreply.github.com>
  CommitDate: 2026-01-20 12:47:36 +0900

    ZJIT: A64: Remove nop padding after conditional branches

    Previously, there were a lot of nops after conditional branches. They
    come from branch to LIR labels:

        ./miniruby --zjit-call-threshold=1 --zjit-dump-disasm -e 'Object || String'

        # Insn: v14 CheckInterrupts
        # RUBY_VM_CHECK_INTS(ec)
          ldur w2, [x20, #0x20]
          tst w2, w2
          b.ne #0x120900278
          nop
          nop
          nop
          nop
          nop
        # Insn: v15 Test v11
          tst x0, #-5
          mov x2, #0
          mov x3, #1
          csel x2, x2, x3, eq
        # Insn: v16 IfTrue v15, bb3(v6, v11)
          tst x2, x2
          b.eq #0x120900198
          nop
          nop
          nop
          nop
          nop

    They gunk up the disassembly and can't be helpful for speed. This commit
    removes them. I think they were accidentally inherited from certain YJIT
    branches that require padding for patching. ZJIT doesn't have these
    requirements.

    Use a single branch instruction for conditional branches to labels; Jmp
    already uses a single `B` instruction. This will work for assemblers
    that generate less than ~260,000 instructions -- plenty.

    Let the CodeBlock::label_ref() callback return a failure, so we can
    fail compilation instead of panicking in case we do get large offsets.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15893

commit fa910e2bba324f715afad0ca71330fb3b54cfaeb
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-19 11:09:21 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-20 10:32:51 +0900

    [ruby/mmtk] Restore MMTK_DEBUG around zeroing in obj_free

    https://github.com/ruby/mmtk/commit/ae69d69768

commit 16adb9303f912b994e6d03ef4211849e9a9473fb
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-01-20 06:31:13 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-20 08:54:39 +0900

    [ruby/prism] Optimize ripper translator

    Creating state classes is pretty expensive.
    Since they are not modifiable, we can reuse them instead.

    Benchmark script:
    ```rb
    require "ripper"
    require "prism"
    require "benchmark/ips"

    codes = Dir["**/*.rb"].map { File.read(it) }

    Benchmark.ips do |x|
      x.config(time: 10)
      x.report("prism") { codes.each { Prism::Translation::Ripper.lex(it) } }
      x.report("ripper") { codes.each { Ripper.lex(it) } }

      x.compare!
    end
    ```

    Before:

    ```
    ruby 4.0.0 (2025-12-25 revision https://github.com/ruby/prism/commit/553f1675f3) +PRISM [x86_64-linux]
    Warming up --------------------------------------
                   prism     1.000 i/100ms
                  ripper     1.000 i/100ms
    Calculating -------------------------------------
                   prism      0.293 (± 0.0%) i/s     (3.42 s/i) -      3.000 in  10.248348s
                  ripper      0.633 (± 0.0%) i/s     (1.58 s/i) -      7.000 in  11.055687s

    Comparison:
                  ripper:        0.6 i/s
                   prism:        0.3 i/s - 2.16x  slower
    ```

    After

    ```
    ruby 4.0.0 (2025-12-25 revision https://github.com/ruby/prism/commit/553f1675f3) +PRISM [x86_64-linux]
    Warming up --------------------------------------
                   prism     1.000 i/100ms
                  ripper     1.000 i/100ms
    Calculating -------------------------------------
                   prism      0.486 (± 0.0%) i/s     (2.06 s/i) -      5.000 in  10.280413s
                  ripper      0.635 (± 0.0%) i/s     (1.58 s/i) -      7.000 in  11.027169s

    Comparison:
                  ripper:        0.6 i/s
                   prism:        0.5 i/s - 1.31x  slower
    ```

    https://github.com/ruby/prism/commit/bdde16554c

commit c939330b7a0e747f8a0a079df6d272b01d2ecbd0
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-19 07:26:24 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-20 07:09:29 +0900

    [DOC] Escape Coverage

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15903

commit 859920dfd272bc22670d779129a04cdf07632192
  Author:     Benoit Daloze <eregontp@gmail.com>
  AuthorDate: 2025-12-15 18:46:24 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-19 21:03:33 +0900

    [ruby/prism] Add Prism::Source#line_to_byte_offset and replace direct accesses to offsets

    https://github.com/ruby/prism/commit/ff81a29ba5

commit ae5efb55d1bd52e3a08c9ffb6ab4e0cef74cef12
  Author:     Benoit Daloze <eregontp@gmail.com>
  AuthorDate: 2025-12-15 05:36:45 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-19 21:03:33 +0900

    [ruby/prism] Simplify and optimize Prism::Node#tunnel

    * By comparing byte offsets which folds 3 branches into 1.
    * Also avoids allocation of Location objects.

    https://github.com/ruby/prism/commit/71fcb891e0

commit e85fd7c8783b51e6a1fb274a4b71e41f448afac9
  Author:     Benoit Daloze <eregontp@gmail.com>
  AuthorDate: 2025-12-14 23:07:21 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-19 21:03:33 +0900

    [ruby/prism] Fix docs of opening_loc/closing_loc of BlockNode

    https://github.com/ruby/prism/commit/0b22d9060a

commit 3c9ca23ba4957ce3efc6f1235b78922304f0feae
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-01-19 16:32:54 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-19 16:46:48 +0900

    [ruby/prism] Remove duplicate lex tests

    `RipperTest` already does this (added in https://github.com/ruby/prism/pull/3849)
    Since it doesn't use the token classes, it also lists out all the excludes instead of just claiming some are passing.

    https://github.com/ruby/prism/commit/e86a28263c

commit df479f41f81709daf00dd034e6ca3e1e88d2259d
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-01-19 15:27:20 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-19 16:14:33 +0900

    [ruby/rubygems] Added another usage of pristine command

    ref. https://github.com/rubygems/guides/issues/388

    https://github.com/ruby/rubygems/commit/43f3768f09

commit fb75e99efea67ad3c2f802817345f749ffaf202c
  Author:     Sutou Kouhei <kou@clear-code.com>
  AuthorDate: 2026-01-18 22:48:42 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-19 16:10:42 +0900

    [ruby/rubygems] Add missing `.binmode` for `Gem::AtomicFileWriter`

    In https://github.com/ruby/rubygems/pull/9202, I commented that `temp_file.binmode` is redundant. But I
    was wrong. We need `temp_file.binmode` even when we specify
    `File::BINARY`. Sorry.

    https://github.com/ruby/rubygems/commit/d9f1f5c6a6

commit 631bf19b37e4bfb16b1af2b88190b4622ca567e5
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-01-19 12:51:30 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-01-19 12:51:30 +0900

    Skip Onigmo file sync. This target is only for commit sync.

commit b4a62a1ca949d93332ad8bce0fcc273581160cc5
  Author:     Herwin <1250153+herwinw@users.noreply.github.com>
  AuthorDate: 2026-01-19 11:16:47 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-19 11:16:47 +0900

    [DOC] Update docs for rb_interned_str and related functions (#15897)

    Related to [Bug #21842].

    * rb_interned_str: document what decides whether the returned string is
      in US-ASCII or BINARY encoding.
    * rb_interned_str_cstr: include the same description as rb_interned_str
      for the encoding. This one was still missing the update for US-ASCII
      and erroneously said the returned string was alwasy in BINARY encoding
    * rb_str_to_interned_str: document how the encoding of the result is
      defined.

    Co-authored-by: Herwin <herwinw@users.noreply.github.com>

commit 64c142770a2df0eba3245e843278ee2b59e4e957
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-16 11:22:54 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-19 06:34:57 +0900

    [ruby/mmtk] Fix assertion in rb_gc_impl_ractor_cache_free for RUBY_FREE_AT_EXIT

    https://github.com/ruby/mmtk/commit/e2a89d5a22

commit b7e9e66b593b927c8fa830696e2943b390c1e569
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-15 09:07:45 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-19 06:34:57 +0900

    [ruby/mmtk] Check RUBY_FL_FINALIZE on new location of object if moved

    https://github.com/ruby/mmtk/commit/a31deee342

commit 4111c5465fcef6c811273cdd48ced4d66dfdc66d
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-15 08:11:05 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-19 06:34:57 +0900

    [ruby/mmtk] Replace RUBY_ASSERT with MMTK_ASSERT

    https://github.com/ruby/mmtk/commit/e92baf15ef

commit b536c6a849eb2e30ade30365eb4cfd17e0dcfb4a
  Author:     tomoya ishida <tomoyapenguin@gmail.com>
  AuthorDate: 2026-01-19 04:59:09 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-19 04:59:09 +0900

    [DOC] Remove _emphasis_ in code blocks which is not handled as emphasis anymore (#15901)

  Notes:
    Merged-By: tompng <tomoyapenguin@gmail.com>

commit 37c7ee536d88afbac4a9d8fba8d48717462502fd
  Author:     tomoya ishida <tomoyapenguin@gmail.com>
  AuthorDate: 2026-01-19 02:25:02 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-19 02:25:02 +0900

    [DOC] Replace rdoc style codeblocks with markdown style backtick codeblocks in markdown documents (#15900)

  Notes:
    Merged-By: tompng <tomoyapenguin@gmail.com>

commit 43d879d3aca3287f47d18ecdd8660965df24e3d3
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-01-19 00:43:07 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-01-19 01:15:36 +0900

    rb_file_join_fastpath: removed useless StringValueCStr

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15899

commit 19450d85d6caeb3f08c1c987ba447237c5697fa9
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-17 23:42:13 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-19 00:47:13 +0900

    [DOC] Improve docs for ObjectSpace.define_finalizer

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15895

commit 7e0e9984d0250afbd67a17b8b2d6846f1595ddce
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-01-18 21:49:59 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-01-19 00:31:31 +0900

    rb_file_join_fastpath: optimize searching for separators

    `chompdirsep` searches from the start of the string each time, which
    perhaps is necessary for certain encodings (not even sure?) but for
    the common encodings it's very wasteful. Instead we can start from the
    back of the string and only compare one or two characters in most cases.

    Also replace `StringValueCStr` for the simpler `rb_str_null_check`
    as we only care about whether the string contains `NULL` bytes, we
    don't care whether it is NULL terminated or not.

    We also only check the final string for NULLs.

    ```
    compare-ruby: ruby 4.1.0dev (2026-01-17T14:40:03Z master 00a3b71eaf) +PRISM [arm64-darwin25]
    built-ruby: ruby 4.1.0dev (2026-01-18T12:55:15Z spedup-file-join 5948e92e03) +PRISM [arm64-darwin25]
    warming up....

    |              |compare-ruby|built-ruby|
    |:-------------|-----------:|---------:|
    |two_strings   |      2.477M|   19.317M|
    |              |           -|     7.80x|
    |many_strings  |    547.577k|   10.298M|
    |              |           -|    18.81x|
    |array         |    515.280k|  523.291k|
    |              |           -|     1.02x|
    |mixed         |    621.840k|  635.422k|
    |              |           -|     1.02x|
    ```

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15898

commit 6cd4549060a608d8a7e5ee0dde2c4b69b08d7f6e
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-01-18 18:33:54 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-01-19 00:31:31 +0900

    Optimize File.join common use case

    `File.join` is a hotspot for common libraries such as Zeitwerk
    and Bootsnap. It has a fairly flexible signature, but 99% of
    the time it's called with just two (or a small number of) UTF-8 strings.

    If we optimistically optimize for that use case we can cut down a large
    number of type and encoding checks, significantly speeding up the method.

    The one remaining expensive check we could try to optimize is `str_null_check`.
    Given it's common to use the same base string for joining, we could memoize it.
    Also we could precompute it for literal strings.

    ```
    compare-ruby: ruby 4.1.0dev (2026-01-17T14:40:03Z master 00a3b71eaf) +PRISM [arm64-darwin25]
    built-ruby: ruby 4.1.0dev (2026-01-18T12:10:38Z spedup-file-join 069bab58d4) +PRISM [arm64-darwin25]
    warming up....

    |              |compare-ruby|built-ruby|
    |:-------------|-----------:|---------:|
    |two_strings   |      2.475M|    9.444M|
    |              |           -|     3.82x|
    |many_strings  |    551.975k|    2.346M|
    |              |           -|     4.25x|
    |array         |    514.946k|  522.034k|
    |              |           -|     1.01x|
    |mixed         |    621.236k|  633.189k|
    |              |           -|     1.02x|
    ```

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15898

commit d1dc4bdb2fe7f16e6da78c0930353e4a5031465a
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-01-18 04:28:01 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-18 23:07:06 +0900

    [ruby/prism] Fix ripper translator for `__END__`

    https://github.com/ruby/prism/commit/2792ac78ca

commit 00a3b71eaf6f1a69f319de4b50e79ab1765d0cd8
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-17 07:03:18 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-17 23:40:03 +0900

    [DOC] Improve docs for ObjectSpace.memsize_of_all

commit 81e06e7004ef17d50aa7ca9b26b31fb1ada515f8
  Author:     Masafumi Koba <473530+ybiquitous@users.noreply.github.com>
  AuthorDate: 2026-01-16 10:42:22 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-17 23:05:07 +0900

    [ruby/timeout] Improve Timeout.timeout documentation formatting and typos

    This commit makes a few minor improvements to the documentation of the `Timeout.timeout` method.
    The changes include fixing typos and enhancing formatting for better readability.

    We can see the latest version of the documentation here:
    https://docs.ruby-lang.org/en/master/Timeout.html#method-c-timeout

    Also, we can verify this change locally by running:

    ```shell
    rdoc
    open doc/Timeout.html
    ```

    https://github.com/ruby/timeout/commit/53ee559e15

commit 78b7646bdb91285873ac26bca060591e06c45afe
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-17 14:19:15 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-17 14:19:15 +0900

    [Bug #21842] Let `rb_interned_str` return US-ASCII if possible

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15894

commit 8ca2f6489bc2b04902472c544edd69664cef0c4e
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-17 13:38:55 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-17 13:38:55 +0900

    Revert "Fix rb_interned_str: create strings with BINARY (akak ASCII_8BIT) encoding"

    This reverts commit 1f3c52dc155fb7fbc42fc8e146924091ba1dfa20.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15894

commit 3e13b7d4ef546574dcf376e2bb6b630abb46181b
  Author:     Max Bernstein <ruby@bernsteinbear.com>
  AuthorDate: 2026-01-17 13:07:00 +0900
  Commit:     Max Bernstein <ruby@bernsteinbear.com>
  CommitDate: 2026-01-17 13:07:00 +0900

    ZJIT: Fix land race

    InvokeProc and HIR effects landed without an intermediate rebase so we
    got a conflict in the form of a type checker error (not handled new
    opcode in a new function).

commit 0e0fad1e58f23ee0e12ab06c1bcd171cba2947f2
  Author:     Nozomi Hijikata <121233810+nozomemein@users.noreply.github.com>
  AuthorDate: 2026-01-17 11:19:54 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-17 11:19:54 +0900

    ZJIT: Specialize OPTIMIZED_METHOD_TYPE_CALL (#15859)

    Closes: https://github.com/Shopify/ruby/issues/865

    ## Benchmark
    ### lobsters
    - wall clock time
      - before patch: Average of last 10, non-warmup iters: 809ms
      - after patch: Average of last 10, non-warmup iters: 754ms
    - zjit stats below

    <details>

    <summary>before patch</summary>

    ```
    ***ZJIT: Printing ZJIT statistics on exit***
    Top-20 not inlined C methods (54.9% of total 18,003,698):
                                                   Hash#fetch: 3,184,106 (17.7%)
                                                Regexp#match?:   707,148 ( 3.9%)
                                                    Hash#key?:   689,879 ( 3.8%)
                                                  String#sub!:   489,841 ( 2.7%)
                                               Array#include?:   470,648 ( 2.6%)
                                                 Set#include?:   397,520 ( 2.2%)
                                                    String#<<:   396,279 ( 2.2%)
                                           String#start_with?:   373,666 ( 2.1%)
                                                   Kernel#dup:   352,617 ( 2.0%)
                                                   Array#any?:   350,454 ( 1.9%)
                                                  Hash#delete:   331,784 ( 1.8%)
                                                   String.new:   307,248 ( 1.7%)
                                                  Integer#===:   262,336 ( 1.5%)
                                             Symbol#end_with?:   255,538 ( 1.4%)
                                                 Kernel#is_a?:   247,292 ( 1.4%)
                                        Process.clock_gettime:   221,588 ( 1.2%)
                                                    Integer#>:   219,718 ( 1.2%)
                                                String#match?:   216,903 ( 1.2%)
                                              String#downcase:   213,108 ( 1.2%)
                                                   Integer#<=:   202,617 ( 1.1%)
    Top-20 calls to C functions from JIT code (80.3% of total 130,255,689):
                                 rb_vm_opt_send_without_block: 28,329,698 (21.7%)
                                                 rb_hash_aref:  8,992,191 ( 6.9%)
                                              rb_vm_env_write:  8,526,087 ( 6.5%)
                                                   rb_vm_send:  8,337,448 ( 6.4%)
                         rb_zjit_writebarrier_check_immediate:  7,809,310 ( 6.0%)
                                            rb_obj_is_kind_of:  6,098,929 ( 4.7%)
                                    rb_vm_getinstancevariable:  5,783,055 ( 4.4%)
                                            rb_vm_invokesuper:  5,038,443 ( 3.9%)
                               rb_ivar_get_at_no_ractor_check:  4,762,093 ( 3.7%)
                                                 rb_ary_entry:  4,283,966 ( 3.3%)
                                                 rb_hash_aset:  2,429,862 ( 1.9%)
                                    rb_vm_setinstancevariable:  2,343,571 ( 1.8%)
                                   rb_vm_opt_getconstant_path:  2,284,810 ( 1.8%)
                                                   Hash#fetch:  1,778,515 ( 1.4%)
                                                        fetch:  1,405,591 ( 1.1%)
                                            rb_vm_invokeblock:  1,381,332 ( 1.1%)
                                            rb_str_buf_append:  1,362,272 ( 1.0%)
                                    rb_ec_ary_new_from_values:  1,324,997 ( 1.0%)
                                   rb_class_allocate_instance:  1,288,936 ( 1.0%)
                                        rb_hash_new_with_size:    998,628 ( 0.8%)
    Top-2 not optimized method types for send (100.0% of total 4,896,274):
      iseq: 4,893,452 (99.9%)
      null:     2,822 ( 0.1%)
    Top-4 not optimized method types for send_without_block (100.0% of total 782,296):
            optimized_send: 479,562 (61.3%)
            optimized_call: 256,609 (32.8%)
                      null:  41,967 ( 5.4%)
      optimized_block_call:   4,158 ( 0.5%)
    Top-4 instructions with uncategorized fallback reason (100.0% of total 7,250,555):
                 invokesuper: 5,038,443 (69.5%)
                 invokeblock: 1,381,332 (19.1%)
                 sendforward:   798,924 (11.0%)
      opt_send_without_block:    31,856 ( 0.4%)
    Top-18 send fallback reasons (100.0% of total 43,885,845):
                              send_without_block_polymorphic: 18,533,639 (42.2%)
                                               uncategorized:  7,250,555 (16.5%)
                              send_not_optimized_method_type:  4,896,274 (11.2%)
                              send_without_block_no_profiles:  4,741,871 (10.8%)
                                            send_no_profiles:  2,865,577 ( 6.5%)
                                one_or_more_complex_arg_pass:  2,825,240 ( 6.4%)
      send_without_block_not_optimized_method_type_optimized:    740,329 ( 1.7%)
                              send_without_block_megamorphic:    709,818 ( 1.6%)
                                            send_polymorphic:    541,186 ( 1.2%)
            send_without_block_not_optimized_need_permission:    382,622 ( 0.9%)
                                       too_many_args_for_lir:    173,244 ( 0.4%)
                                         argc_param_mismatch:     50,382 ( 0.1%)
                send_without_block_not_optimized_method_type:     41,967 ( 0.1%)
                     send_without_block_cfunc_array_variadic:     36,302 ( 0.1%)
                                    obj_to_string_not_string:     34,169 ( 0.1%)
                  send_without_block_direct_keyword_mismatch:     32,436 ( 0.1%)
                                            send_megamorphic:     28,613 ( 0.1%)
                              ccall_with_frame_too_many_args:      1,621 ( 0.0%)
    Top-4 setivar fallback reasons (100.0% of total 2,343,571):
                not_monomorphic: 2,120,856 (90.5%)
                   not_t_object:   125,163 ( 5.3%)
                    too_complex:    97,531 ( 4.2%)
      new_shape_needs_extension:        21 ( 0.0%)
    Top-2 getivar fallback reasons (100.0% of total 5,908,168):
      not_monomorphic: 5,658,909 (95.8%)
          too_complex:   249,259 ( 4.2%)
    Top-3 definedivar fallback reasons (100.0% of total 405,079):
      not_monomorphic: 397,150 (98.0%)
          too_complex:   5,122 ( 1.3%)
         not_t_object:   2,807 ( 0.7%)
    Top-6 invokeblock handler (100.0% of total 1,381,332):
       monomorphic_iseq: 685,359 (49.6%)
            polymorphic: 521,992 (37.8%)
      monomorphic_other: 104,640 ( 7.6%)
      monomorphic_ifunc:  55,505 ( 4.0%)
            no_profiles:   9,164 ( 0.7%)
            megamorphic:   4,672 ( 0.3%)
    Top-9 popular complex argument-parameter features not optimized (100.0% of total 3,097,538):
           param_kw_opt: 1,333,367 (43.0%)
            param_block:   632,885 (20.4%)
      param_forwardable:   600,601 (19.4%)
             param_rest:   329,020 (10.6%)
           param_kwrest:   119,971 ( 3.9%)
        caller_kw_splat:    39,001 ( 1.3%)
           caller_splat:    36,785 ( 1.2%)
        caller_blockarg:     5,798 ( 0.2%)
           caller_kwarg:       110 ( 0.0%)
    Top-1 compile error reasons (100.0% of total 186,900):
      exception_handler: 186,900 (100.0%)
    Top-7 unhandled YARV insns (100.0% of total 186,598):
           getblockparam: 99,414 (53.3%)
      invokesuperforward: 81,667 (43.8%)
           setblockparam:  2,837 ( 1.5%)
             getconstant:  1,537 ( 0.8%)
              checkmatch:    616 ( 0.3%)
             expandarray:    360 ( 0.2%)
                    once:    167 ( 0.1%)
    Top-3 unhandled HIR insns (100.0% of total 236,962):
              throw: 198,474 (83.8%)
      invokebuiltin:  35,767 (15.1%)
          array_max:   2,721 ( 1.1%)
    Top-19 side exit reasons (100.0% of total 15,427,184):
                       guard_type_failure: 6,865,696 (44.5%)
                      guard_shape_failure: 6,779,586 (43.9%)
      block_param_proxy_not_iseq_or_ifunc: 1,030,319 ( 6.7%)
                       unhandled_hir_insn:   236,962 ( 1.5%)
                            compile_error:   186,900 ( 1.2%)
                      unhandled_yarv_insn:   186,598 ( 1.2%)
                     fixnum_mult_overflow:    50,739 ( 0.3%)
               block_param_proxy_modified:    28,119 ( 0.2%)
            patchpoint_no_singleton_class:    14,903 ( 0.1%)
             unhandled_newarray_send_pack:    14,481 ( 0.1%)
                   fixnum_lshift_overflow:    10,085 ( 0.1%)
         patchpoint_stable_constant_names:     9,198 ( 0.1%)
                  patchpoint_no_ep_escape:     7,815 ( 0.1%)
                      expandarray_failure:     4,533 ( 0.0%)
              patchpoint_method_redefined:       662 ( 0.0%)
                   obj_to_string_fallback:       277 ( 0.0%)
                       guard_less_failure:       163 ( 0.0%)
                                interrupt:       128 ( 0.0%)
                 guard_greater_eq_failure:        20 ( 0.0%)
                                 send_count: 151,233,937
                         dynamic_send_count:  43,885,845 (29.0%)
                       optimized_send_count: 107,348,092 (71.0%)
                      dynamic_setivar_count:   2,343,571 ( 1.5%)
                      dynamic_getivar_count:   5,908,168 ( 3.9%)
                  dynamic_definedivar_count:     405,079 ( 0.3%)
                  iseq_optimized_send_count:  37,324,023 (24.7%)
          inline_cfunc_optimized_send_count:  46,056,028 (30.5%)
           inline_iseq_optimized_send_count:   3,756,875 ( 2.5%)
    non_variadic_cfunc_optimized_send_count:  11,618,909 ( 7.7%)
        variadic_cfunc_optimized_send_count:   8,592,257 ( 5.7%)
    compiled_iseq_count:                              5,289
    failed_iseq_count:                                    0
    compile_time:                                   1,664ms
    profile_time:                                      13ms
    gc_time:                                           20ms
    invalidation_time:                                479ms
    vm_write_pc_count:                          127,571,422
    vm_write_sp_count:                          127,571,422
    vm_write_locals_count:                      122,781,971
    vm_write_stack_count:                       122,781,971
    vm_write_to_parent_iseq_local_count:            689,945
    vm_read_from_parent_iseq_local_count:        14,721,820
    guard_type_count:                           167,633,896
    guard_type_exit_ratio:                             4.1%
    guard_shape_count:                                    0
    code_region_bytes:                           38,912,000
    zjit_alloc_bytes:                            40,542,102
    total_mem_bytes:                             79,454,102
    side_exit_count:                             15,427,184
    total_insn_count:                           927,373,567
    vm_insn_count:                              156,976,359
    zjit_insn_count:                            770,397,208
    ratio_in_zjit:                                    83.1%
    ```

    </details>

    <details>

    <summary>after patch</summary>

    ```
    ***ZJIT: Printing ZJIT statistics on exit***
    Top-20 not inlined C methods (55.0% of total 18,012,630):
                                                   Hash#fetch: 3,184,101 (17.7%)
                                                Regexp#match?:   707,150 ( 3.9%)
                                                    Hash#key?:   689,871 ( 3.8%)
                                                  String#sub!:   489,841 ( 2.7%)
                                               Array#include?:   470,648 ( 2.6%)
                                                 Set#include?:   397,520 ( 2.2%)
                                                    String#<<:   396,279 ( 2.2%)
                                           String#start_with?:   382,538 ( 2.1%)
                                                   Kernel#dup:   352,617 ( 2.0%)
                                                   Array#any?:   350,454 ( 1.9%)
                                                  Hash#delete:   331,802 ( 1.8%)
                                                   String.new:   307,248 ( 1.7%)
                                                  Integer#===:   262,336 ( 1.5%)
                                             Symbol#end_with?:   255,540 ( 1.4%)
                                                 Kernel#is_a?:   247,292 ( 1.4%)
                                        Process.clock_gettime:   221,588 ( 1.2%)
                                                    Integer#>:   219,718 ( 1.2%)
                                                String#match?:   216,905 ( 1.2%)
                                              String#downcase:   213,107 ( 1.2%)
                                                   Integer#<=:   202,617 ( 1.1%)
    Top-20 calls to C functions from JIT code (80.1% of total 130,218,934):
                                 rb_vm_opt_send_without_block: 28,073,153 (21.6%)
                                                 rb_hash_aref:  8,992,167 ( 6.9%)
                                              rb_vm_env_write:  8,526,089 ( 6.5%)
                                                   rb_vm_send:  8,337,453 ( 6.4%)
                         rb_zjit_writebarrier_check_immediate:  7,786,426 ( 6.0%)
                                            rb_obj_is_kind_of:  6,098,927 ( 4.7%)
                                    rb_vm_getinstancevariable:  5,783,053 ( 4.4%)
                                            rb_vm_invokesuper:  5,038,444 ( 3.9%)
                               rb_ivar_get_at_no_ractor_check:  4,762,093 ( 3.7%)
                                                 rb_ary_entry:  4,283,965 ( 3.3%)
                                                 rb_hash_aset:  2,429,864 ( 1.9%)
                                    rb_vm_setinstancevariable:  2,343,573 ( 1.8%)
                                   rb_vm_opt_getconstant_path:  2,284,809 ( 1.8%)
                                                   Hash#fetch:  1,778,510 ( 1.4%)
                                                        fetch:  1,405,591 ( 1.1%)
                                            rb_vm_invokeblock:  1,381,329 ( 1.1%)
                                            rb_str_buf_append:  1,362,272 ( 1.0%)
                                    rb_ec_ary_new_from_values:  1,325,005 ( 1.0%)
                                   rb_class_allocate_instance:  1,288,944 ( 1.0%)
                                        rb_hash_new_with_size:    998,629 ( 0.8%)
    Top-2 not optimized method types for send (100.0% of total 4,896,276):
      iseq: 4,893,454 (99.9%)
      null:     2,822 ( 0.1%)
    Top-3 not optimized method types for send_without_block (100.0% of total 525,687):
            optimized_send: 479,562 (91.2%)
                      null:  41,967 ( 8.0%)
      optimized_block_call:   4,158 ( 0.8%)
    Top-4 instructions with uncategorized fallback reason (100.0% of total 7,250,556):
                 invokesuper: 5,038,444 (69.5%)
                 invokeblock: 1,381,329 (19.1%)
                 sendforward:   798,924 (11.0%)
      opt_send_without_block:    31,859 ( 0.4%)
    Top-18 send fallback reasons (100.0% of total 43,629,303):
                              send_without_block_polymorphic: 18,533,669 (42.5%)
                                               uncategorized:  7,250,556 (16.6%)
                              send_not_optimized_method_type:  4,896,276 (11.2%)
                              send_without_block_no_profiles:  4,741,899 (10.9%)
                                            send_no_profiles:  2,865,579 ( 6.6%)
                                one_or_more_complex_arg_pass:  2,825,242 ( 6.5%)
                              send_without_block_megamorphic:    709,818 ( 1.6%)
                                            send_polymorphic:    541,187 ( 1.2%)
      send_without_block_not_optimized_method_type_optimized:    483,720 ( 1.1%)
            send_without_block_not_optimized_need_permission:    382,623 ( 0.9%)
                                       too_many_args_for_lir:    173,244 ( 0.4%)
                                         argc_param_mismatch:     50,382 ( 0.1%)
                send_without_block_not_optimized_method_type:     41,967 ( 0.1%)
                     send_without_block_cfunc_array_variadic:     36,302 ( 0.1%)
                                    obj_to_string_not_string:     34,169 ( 0.1%)
                  send_without_block_direct_keyword_mismatch:     32,436 ( 0.1%)
                                            send_megamorphic:     28,613 ( 0.1%)
                              ccall_with_frame_too_many_args:      1,621 ( 0.0%)
    Top-4 setivar fallback reasons (100.0% of total 2,343,573):
                not_monomorphic: 2,120,858 (90.5%)
                   not_t_object:   125,163 ( 5.3%)
                    too_complex:    97,531 ( 4.2%)
      new_shape_needs_extension:        21 ( 0.0%)
    Top-2 getivar fallback reasons (100.0% of total 5,908,165):
      not_monomorphic: 5,658,912 (95.8%)
          too_complex:   249,253 ( 4.2%)
    Top-3 definedivar fallback reasons (100.0% of total 405,079):
      not_monomorphic: 397,150 (98.0%)
          too_complex:   5,122 ( 1.3%)
         not_t_object:   2,807 ( 0.7%)
    Top-6 invokeblock handler (100.0% of total 1,381,329):
       monomorphic_iseq: 685,363 (49.6%)
            polymorphic: 521,984 (37.8%)
      monomorphic_other: 104,640 ( 7.6%)
      monomorphic_ifunc:  55,505 ( 4.0%)
            no_profiles:   9,164 ( 0.7%)
            megamorphic:   4,673 ( 0.3%)
    Top-9 popular complex argument-parameter features not optimized (100.0% of total 3,094,719):
           param_kw_opt: 1,333,367 (43.1%)
            param_block:   632,886 (20.5%)
      param_forwardable:   600,605 (19.4%)
             param_rest:   329,019 (10.6%)
           param_kwrest:   119,971 ( 3.9%)
        caller_kw_splat:    39,001 ( 1.3%)
           caller_splat:    33,962 ( 1.1%)
        caller_blockarg:     5,798 ( 0.2%)
           caller_kwarg:       110 ( 0.0%)
    Top-1 compile error reasons (100.0% of total 186,917):
      exception_handler: 186,917 (100.0%)
    Top-7 unhandled YARV insns (100.0% of total 186,598):
           getblockparam: 99,414 (53.3%)
      invokesuperforward: 81,667 (43.8%)
           setblockparam:  2,837 ( 1.5%)
             getconstant:  1,537 ( 0.8%)
              checkmatch:    616 ( 0.3%)
             expandarray:    360 ( 0.2%)
                    once:    167 ( 0.1%)
    Top-3 unhandled HIR insns (100.0% of total 236,969):
              throw: 198,475 (83.8%)
      invokebuiltin:  35,773 (15.1%)
          array_max:   2,721 ( 1.1%)
    Top-19 side exit reasons (100.0% of total 15,450,102):
                       guard_type_failure: 6,888,596 (44.6%)
                      guard_shape_failure: 6,779,586 (43.9%)
      block_param_proxy_not_iseq_or_ifunc: 1,030,319 ( 6.7%)
                       unhandled_hir_insn:   236,969 ( 1.5%)
                            compile_error:   186,917 ( 1.2%)
                      unhandled_yarv_insn:   186,598 ( 1.2%)
                     fixnum_mult_overflow:    50,739 ( 0.3%)
               block_param_proxy_modified:    28,119 ( 0.2%)
            patchpoint_no_singleton_class:    14,903 ( 0.1%)
             unhandled_newarray_send_pack:    14,481 ( 0.1%)
                   fixnum_lshift_overflow:    10,085 ( 0.1%)
         patchpoint_stable_constant_names:     9,198 ( 0.1%)
                  patchpoint_no_ep_escape:     7,815 ( 0.1%)
                      expandarray_failure:     4,533 ( 0.0%)
              patchpoint_method_redefined:       662 ( 0.0%)
                   obj_to_string_fallback:       277 ( 0.0%)
                       guard_less_failure:       163 ( 0.0%)
                                interrupt:       122 ( 0.0%)
                 guard_greater_eq_failure:        20 ( 0.0%)
                                 send_count: 150,986,368
                         dynamic_send_count:  43,629,303 (28.9%)
                       optimized_send_count: 107,357,065 (71.1%)
                      dynamic_setivar_count:   2,343,573 ( 1.6%)
                      dynamic_getivar_count:   5,908,165 ( 3.9%)
                  dynamic_definedivar_count:     405,079 ( 0.3%)
                  iseq_optimized_send_count:  37,324,039 (24.7%)
          inline_cfunc_optimized_send_count:  46,056,046 (30.5%)
           inline_iseq_optimized_send_count:   3,756,881 ( 2.5%)
    non_variadic_cfunc_optimized_send_count:  11,618,958 ( 7.7%)
        variadic_cfunc_optimized_send_count:   8,601,141 ( 5.7%)
    compiled_iseq_count:                              5,289
    failed_iseq_count:                                    0
    compile_time:                                   1,700ms
    profile_time:                                      13ms
    gc_time:                                           21ms
    invalidation_time:                                519ms
    vm_write_pc_count:                          127,557,549
    vm_write_sp_count:                          127,557,549
    vm_write_locals_count:                      122,768,084
    vm_write_stack_count:                       122,768,084
    vm_write_to_parent_iseq_local_count:            689,953
    vm_read_from_parent_iseq_local_count:        14,730,705
    guard_type_count:                           167,853,730
    guard_type_exit_ratio:                             4.1%
    guard_shape_count:                                    0
    code_region_bytes:                           38,928,384
    zjit_alloc_bytes:                            41,103,415
    total_mem_bytes:                             80,031,799
    side_exit_count:                             15,450,102
    total_insn_count:                           927,432,364
    vm_insn_count:                              157,182,251
    zjit_insn_count:                            770,250,113
    ratio_in_zjit:                                    83.1%
    ```

    </details>

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit 8a586af33b59cae93a1bee13c39e87dd087a4a6b
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-16 11:02:05 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-17 07:02:03 +0900

    Don't force major GC when there are allocatable slots

    [Bug #21838]

    When we have allocatable slots, we can grow the heap instead of forcing
    a major GC. This prevents major GC to be ran very often in certain situations.
    See the ticket for more details.

    On ruby-bench, we can see that this patch doesn't cause any significant
    regressions:

        --------------  -----------  ----------  ---------  -----------  ----------  ---------  --------------  -------------
        bench           master (ms)  stddev (%)  RSS (MiB)  branch (ms)  stddev (%)  RSS (MiB)  branch 1st itr  master/branch
        activerecord    148.2        0.3         59.2       150.0        0.8         69.7       1.015           0.988
        chunky-png      435.2        0.3         72.9       438.8        0.1         66.7       0.993           0.992
        erubi-rails     733.8        1.2         118.7      704.8        0.2         98.3       1.077           1.041
        hexapdf         1400.4       1.1         247.0      1405.0       0.9         223.7      0.986           0.997
        liquid-c        32.5         3.3         32.8       32.5         2.1         30.7       1.042           0.999
        liquid-compile  31.0         1.7         35.1       33.4         3.9         32.8       0.938           0.928
        liquid-render   84.7         0.4         30.8       86.3         0.4         30.8       0.981           0.982
        lobsters        594.7        0.6         310.5      596.6        0.4         306.0      1.057           0.997
        mail            75.6         2.8         53.3       76.9         0.7         53.2       0.968           0.982
        psych-load      1122.8       1.2         29.2       1145.1       0.4         31.7       0.964           0.981
        railsbench      1244.7       0.3         115.5      1254.8       1.1         115.2      0.939           0.992
        rubocop         103.7        0.5         94.1       104.3        0.5         92.4       0.985           0.994
        ruby-lsp        88.3         0.6         78.5       88.5         1.2         77.9       0.992           0.997
        sequel          26.9         0.9         33.6       28.3         1.4         32.1       0.954           0.952
        shipit          1119.3       1.5         171.4      1075.7       2.1         162.5      1.873           1.040
        --------------  -----------  ----------  ---------  -----------  ----------  ---------  --------------  -------------

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15882

commit 1f3c52dc155fb7fbc42fc8e146924091ba1dfa20
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-01-17 05:15:05 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-01-17 06:44:38 +0900

    Fix rb_interned_str: create strings with BINARY (akak ASCII_8BIT) encoding

    [Bug #21842]

    The documentation always stated as much, and it's consistent with the
    rb_str_* family of functions.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15888

commit c56ce8a6c19334265b1a4a64876fffff9b98b2b1
  Author:     John Hawthorn <john@hawthorn.email>
  AuthorDate: 2026-01-17 05:01:15 +0900
  Commit:     John Hawthorn <john@hawthorn.email>
  CommitDate: 2026-01-17 05:46:20 +0900

    Remove objspace->flags.has_newobj_hook

    We aren't using this anymore and the hook is called in gc.c

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15887

commit 87147ba5e983f554fb56f859af0d858d5eff0896
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-01-16 18:47:18 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-17 05:19:26 +0900

    [ruby/prism] Make the ripper shim work with rdoc

    The filter class is a 1:1 copy of ruby.

    rdoc has 32 test failures. It seems to expect `on_sp` in some cases to render code as written.

    https://github.com/ruby/prism/commit/74bb12c825

commit 1c7e19f961a3e9051cf728deeea196d4d72a89cd
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-01-17 04:37:42 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-01-17 05:11:17 +0900

    rb_free_tmp_buffer: use ruby_sized_xfree

    We know the buffer length, we might as well feed that information
    back to the GC.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15886

commit 3164d4e8a26b591c6e22a0deeb750b6f21db1345
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-01-17 02:43:08 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-17 02:52:54 +0900

    [ruby/json] Extract json_fast_memcpy16 for readability

    https://github.com/ruby/json/commit/1b276c8623

commit 456ef9140acbdf643c5537ee0f5d67429f2332b6
  Author:     Scott Myron <samyron@gmail.com>
  AuthorDate: 2026-01-16 10:12:41 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-17 02:52:54 +0900

    [ruby/json] Use __builtin_memcpy, if available, to copy overlapping byte ranges in copy_remaining_bytes to avoid a branch to MEMCPY. Additionally use a space as padding byte instead of an 'X' so it can be represented diretly on AArch64 with a single instruction.

    https://github.com/ruby/json/commit/643ee11fed

commit bc6c895d7bce16871321fcb22147a2d35179caaf
  Author:     Jacob <jacob.denbeaux@shopify.com>
  AuthorDate: 2026-01-17 02:08:20 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-17 02:08:20 +0900

    ZJIT: Create HIR effect system (#15359)

    **Progress**
    I've added a new directory, `zjit/src/hir_effect`. It follows the same structure as `zjit/src/hir_type` and includes:
    - a ruby script to generate a rust file containing a bitset of effects we want to track
    - a modified `hir.rs` to include an `effects_of` function that catalogs effects for each HIR instruction, similar to `infer_type`. Right now these effects are not specialized, all instructions currently return the top of the lattice (any effect)
    - a module file for effects at `zjit/src/hir_effect/mod.rs` that again, mirrors `zjit/src/hir_type/mod.rs`. This contains a lot of helper functions and lattice operations like union and intersection

    **Design Idea**
    The effect system is bitset-based rather than range-based. This is the first kind of effect system described in [Max's blog post](https://bernsteinbear.com/blog/compiler-effects/).
    Practically, having effects defined for each HIR instruction should allow us to have better generalization than the implicit effect system we have for c functions that we annotation as elidable, leaf, etc. Additionally, this could allow us to reason about the effects of multiple HIR instructions unioned together, something I don't believe currently exists.

    **Practical Goals**
    This PR replaces `has_effects` with a new effects-based `is_elidable` function. This has no behavior change to the JIT, but will make it easier to reason about effects of basic blocks and CCalls with the new design. We may be able to accomplish other quality of life improvements, such as consolidation of `nogc`, `leaf`, and other annotations.

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit 91744cd2025b3c18cd48b9ac3eec8412c932fac6
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-17 00:15:20 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-17 00:15:20 +0900

    Include abi.h in the dependency of rubyspec-capiext

commit 074a23ab77a94a5388958c573ab33d5ea5a46ecc
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-01-16 19:52:39 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-16 21:07:41 +0900

    [ruby/prism] Add `Ripper.tokenize` to translation layer

    It's public API and trivial to implement.

    https://github.com/ruby/prism/commit/e77545f8b5

commit f872901bb263e01768ac64e6d063377c3b633e27
  Author:     Andrii Furmanets <furmanets.andriy@gmail.com>
  AuthorDate: 2026-01-16 19:52:16 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-16 19:52:16 +0900

    MatchData: Avoid large stack allocations in MatchData (GH-15872)

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15872

    Merged-By: nobu <nobu@ruby-lang.org>

commit 16cd9daa39c5488a7ee3f60ebc6f5b3cf1ee50e4
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-16 18:27:17 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-16 18:27:17 +0900

    Rust interface is out of our scope

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15883

commit 67d4ceb5255310feefac473265ef713214554708
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-16 16:52:32 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-16 16:52:32 +0900

    Expand `rb_data_type_t::reserved` for future use

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15883

commit f7d3f675fe9f5f9b4667e0f2a77db6349d9da4ae
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-16 11:12:32 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-16 11:12:32 +0900

    Win32: refine handing of missing-baseruby failure

    `exit` in `cmd.exe` ignores non-option, non-digits argument, and exits with the current %ERRORLEVEL%.

commit 8c39d8d34313550cb72d491ad2a834c772b44734
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-16 11:08:53 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-16 11:08:53 +0900

    Win32: fix baseruby at reconfig

    Get rid of the built `ruby.exe` in the current directory.

commit 81420d6e13b99fae5f111b8172fe156b42bf8af3
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-16 11:01:27 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-16 11:01:27 +0900

    Win32: split `-basic-vars-` step

commit 5d2fd5088da68cd5dc71d2343c88e5451d29ff17
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-15 07:56:06 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-16 07:57:27 +0900

    Fix duplicate static assert names in imemo.h

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15857

commit f7ae32ed3b5b93247f9f62a58e3dd129098d0b27
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-15 07:09:26 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-16 07:57:27 +0900

    Pin ID symbols

    Symbols with a corresponding ID should be pinned because they can be used
    by things that don't support compaction.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15857

commit 6e480e6714f0e63bc065f4d931f76e087131c743
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-13 11:20:12 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-16 07:57:27 +0900

    Allow symbols to move in compaction

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15857

commit c34c7def5a13bcc60b09c1fc11267a6fdca700ba
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-01-16 05:47:26 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-16 06:15:34 +0900

    [ruby/prism] Fix locations for invalid syntax when using `expect1_opening`

    Followup to https://github.com/ruby/prism/pull/3827

    It sets the start to the opening but it should instead just
    continue on as usual.
    Fixes https://github.com/ruby/prism/issues/3851

    Notice how the AST actually contains "123" in both the body and end keyword.

    https://github.com/ruby/prism/commit/8f69c5af08

commit 15939e3c30b9ab5e8623a8f78e4249b0e935bf3f
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-01-14 03:35:21 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-16 06:03:55 +0900

    [ruby/prism] Make irb work with the ripper shim

    This is everything that `irb` uses. It works in their test-suite, but there are 20 failures when using the shim that I haven't looked into at all.

    `parse` is not used by `irb`. `scan` is, and it's basically `parse` but also including errors. `irb` doesn't seem to care about the errors, so I didn't implement that.

    https://github.com/ruby/prism/commit/2c5826b39f

commit ce390f19954edda3874ed62768440953b40be0da
  Author:     nozomemein <b8yukifsukeo999n@gmail.com>
  AuthorDate: 2026-01-15 07:18:31 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-01-16 02:00:53 +0900

    ZJIT: Remove redundant unboxing

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15833

commit 844f072ce16235c0f10df73bb79d40cc01223c28
  Author:     nozomemein <b8yukifsukeo999n@gmail.com>
  AuthorDate: 2026-01-14 15:04:46 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-01-16 02:00:53 +0900

    ZJIT: Inline ArrayAref

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15833

commit 256c806a1d7adfeeec1b97eecc66448122fdecfb
  Author:     nozomemein <b8yukifsukeo999n@gmail.com>
  AuthorDate: 2026-01-10 09:13:49 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-01-16 02:00:53 +0900

    ZJIT: Write the result of UnboxFixnum HIR as type spec so that we can make use of it later (e.g. fold_constants for ArrayAref)

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15833

commit 065db7cf61cfb69d869f4b403b49b1efc314eead
  Author:     nozomemein <b8yukifsukeo999n@gmail.com>
  AuthorDate: 2026-01-09 09:56:11 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-01-16 02:00:53 +0900

    ZJIT: Rename ArrayArefFixnum -> ArrayAref

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15833

commit 11edc286d837f66b37433e7d51c8b8f500e1be84
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-15 20:32:20 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-15 20:32:20 +0900

    Make `Array#map` and `Array#select` more tolerant

    Only when YJIT is enabled, the redefinition of `Array#<<` affects
    these methods.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15875

commit 6afac93c5c7178c4d836e0ec2b4b3092373ca121
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-01-15 16:52:01 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-01-15 17:20:34 +0900

    Restore irb to warning target

    Users should add `irb` to their Gemfile.
    `Gem::BUNDLED_GEMS.force_activate 'irb'` is workaround for short term.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15374

commit ca9c61800bce426ea9c4b15911a4f639370f3ec4
  Author:     Daisuke Aritomo <osyoyu@osyoyu.com>
  AuthorDate: 2025-12-03 03:41:21 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-01-15 17:20:34 +0900

    Suppress bundled gem warning on `binding.irb'

    This patch silences the "this won't work in the next version of Ruby"
    warning displayed when irb is autoloaded via `binding.irb`.

        main.rb:1: warning: irb used to be loaded from the standard library, but is not part of the default gems since Ruby 4.0.0.
        You can add irb to your Gemfile or gemspec to fix this error.
        /.../irb.rb:9: warning: reline used to be loaded from the standard library, but is not part of the default gems since Ruby 4.0.0.
        You can add reline to your Gemfile or gemspec to fix this error.

        From: main.rb @ line 1 :

         => 1: binding.irb

        /.../input-method.rb:284: warning: rdoc used to be loaded from the standard library, but is not part of the default gems since Ruby 4.0.0.
        You can add rdoc to your Gemfile or gemspec to fix this error.

    This warning is incorrect and misleading: users should not need to
    include irb (and its dependencies) to their Gemfiles to use
    `binding.irb`, even in future versions of Ruby. It is agreed that the
    runtime takes care of that.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15374

commit 2d79cc9bfc3fdd27e3de9d540c37d0367ed16d1e
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-01-15 15:29:22 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-01-15 16:16:16 +0900

    Added example for bundle/inline

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15373

commit a28c8561835038d564a418c6d5dbd7cabfbcad4f
  Author:     Daisuke Aritomo <osyoyu@osyoyu.com>
  AuthorDate: 2025-12-04 21:02:36 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-01-15 16:16:16 +0900

    Add comments

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15373

commit 270c7fcec126d9de07488205cfa11b6ab37bc191
  Author:     Daisuke Aritomo <osyoyu@osyoyu.com>
  AuthorDate: 2025-12-04 20:56:31 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-01-15 16:16:16 +0900

    Fake BUNDLE_GEMFILE and BUNDLE_LOCKFILE to let checks pass

    Bundler::Runtime#setup requires a real existing lockfile (see
    Bundler::SharedHelpers#default_lockfile).

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15373

commit 943b0859498c5a49242e6f8563b1f518599fff0f
  Author:     Daisuke Aritomo <osyoyu@osyoyu.com>
  AuthorDate: 2025-12-03 02:25:46 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-01-15 16:16:16 +0900

    [Bug #21723] Let `binding.irb` properly load irb by fixing force_activate()

    This patch fixes a problem where `binding.irb` (= force_activate('irb'))
    fails under `bundle exec` when the Gemfile does not contain `irb` and
    does contain a gem which is (1) not installed in GEM_HOME (2) sourced
    using `path:`/`git:`.

    The original approach constructing a temporary definition fails since
    it does not set the equalivent of `path:`/`git:`.

    Always reconstructing a definition from a Gemfile and applying lockfile
    constraints should be a more robust approach.

    [Bug #21723]

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15373

commit de17b84a3d557007bbaf00b4f17d843ed854ee7a
  Author:     git[bot] <svn-admin@ruby-lang.org>
  AuthorDate: 2026-01-15 15:55:51 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-15 15:55:51 +0900

    Update bundled gems list as of 2026-01-15

commit 886202bac80130ec6f2f3f67f306f9d5f860fb01
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-15 12:30:29 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-15 12:30:29 +0900

    Count assertions in child processes

    Fix up GH-15785.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15874

commit 189bb64af8951d79bd812f2dca18a0104339b56e
  Author:     OKURA Masafumi <masafumi.o1988@gmail.com>
  AuthorDate: 2023-12-14 17:52:27 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-01-15 11:36:18 +0900

    [ci-skip] Shorter example for `Module#instance_method`

    The previous example code was too complex and includes extra logics
    that's not relevant to its main usage: `bind`.
    The new example code focuses on `bind_call` so that readers can
    understand how it works more easily.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/9233

commit 806031d2ce9cb26e146ce47f6811ca038f1ffe27
  Author:     Lars Kanis <lars.kanis@sincnovation.com>
  AuthorDate: 2024-12-18 23:13:18 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-01-15 11:14:54 +0900

    Windows: Remove workaround for LLVM windres

    It was introduced as part of the Arm64-on-Windows patch:
      https://github.com/ruby/ruby/pull/8995

    But a few days later it was fixed on the LLVM side for llvm-18 and backported to MSYS2:
      https://github.com/msys2/MINGW-packages/pull/19157#issuecomment-1825285063

    Now this code is only unnecessary complexity.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/12388

commit 4a21b83693fdc0e976da209047ba286b2f4084e5
  Author:     Kevin Menard <kevin@nirvdrum.com>
  AuthorDate: 2026-01-15 09:10:06 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-15 09:10:06 +0900

    ZJIT: Optimize common `invokesuper` cases (#15816)

    * ZJIT: Profile `invokesuper` instructions

    * ZJIT: Introduce the `InvokeSuperDirect` HIR instruction

    The new instruction is an optimized version of `InvokeSuper` when we know the `super` target is an ISEQ.

    * ZJIT: Expand definition of unspecializable to more complex cases

    * ZJIT: Ensure `invokesuper` optimization works when the inheritance hierarchy is modified

    * ZJIT: Simplify `invokesuper` specialization to most common case

    Looking at ruby-bench, most `super` calls don't pass a block, which means we can use the already optimized `SendWithoutBlockDirect`.

    * ZJIT: Track `super` method entries directly to avoid GC issues

    Because the method entry isn't typed as a `VALUE`, we set up barriers on its `VALUE` fields. But, that was insufficient as the method entry itself could be collected in certain cases, resulting in dangling objects. Now we track the method entry as a `VALUE` and can more naturally mark it and its children.

    * ZJIT: Optimize `super` calls with simple argument forms

    * ZJIT: Report the reason why we can't optimize an `invokesuper` instance

    * ZJIT: Revise send fallback reasons for `super` calls

    * ZJIT: Assert `super` calls are `FCALL` and don't need visibily checks

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit cdb2b0eed50e1c837adeb85ef8978e533f056327
  Author:     Alan Wu <XrXr@users.noreply.github.com>
  AuthorDate: 2026-01-14 13:15:47 +0900
  Commit:     Alan Wu <XrXr@users.noreply.github.com>
  CommitDate: 2026-01-15 07:19:52 +0900

    YJIT: A64: In CPopAll, pop into the register before using MSR

    Or else we put garbage into the flags.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15831

commit 9f3225d0c5c64c4aac9fd196061f8cfd3f25f271
  Author:     Alan Wu <XrXr@users.noreply.github.com>
  AuthorDate: 2026-01-14 13:01:47 +0900
  Commit:     Alan Wu <XrXr@users.noreply.github.com>
  CommitDate: 2026-01-15 07:19:52 +0900

    YJIT: Properly preserve register mapping in cpush_all() and cpop_all()

    Previously, cpop_all() did not in fact restore the register mapping
    state since it was effectively doing a no-op
    `self.ctx.set_reg_mapping(self.ctx.get_reg_mapping())`. This desync in
    bookkeeping led to issues with the --yjit-dump-insns option because
    print_str() used to use cpush_all() and cpop_all().

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15831

commit 993046847931c6c26ca518dfaf9be6c23c34fc78
  Author:     Alan Wu <XrXr@users.noreply.github.com>
  AuthorDate: 2026-01-14 13:08:33 +0900
  Commit:     Alan Wu <XrXr@users.noreply.github.com>
  CommitDate: 2026-01-15 07:19:52 +0900

    YJIT: Fix --yjit-dump-insns by removing {cpush,cpop}_all() in printers

    cpush_all() and cpop_all() in theory enabled these `print_*` utilities
    to work in more spots, but with automatically spilling in asm.ccall(),
    the benefits are now limited. They also have a bug at the moment. Stop
    using them to dodge the bug.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15831

commit ac229890660d023c423869601d1ab404187824f4
  Author:     Alan Wu <XrXr@users.noreply.github.com>
  AuthorDate: 2026-01-09 12:42:38 +0900
  Commit:     Alan Wu <XrXr@users.noreply.github.com>
  CommitDate: 2026-01-15 07:19:52 +0900

    YJIT: Add crashing test for --yjit-dump-insns

    Co-authored-by: Nobuyoshi Nakada <nobu@ruby-lang.org>

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15831

commit 068713964a3949c9221da291e5e5f5167e692239
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-14 07:59:59 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-15 07:08:40 +0900

    [DOC] Add docs for WeakMap#inspect

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15866

commit b21edc13236320b6dd46cee1cc8907bd9ac2fb38
  Author:     Max Bernstein <rubybugs@bernsteinbear.com>
  AuthorDate: 2026-01-15 06:58:10 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-15 06:58:10 +0900

    ZJIT: Add assume_no_singleton_classes to avoid invalidation loops (#15871)

    Make sure we check if we have seen a singleton for this class before assuming we have not. Port the API from YJIT.

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit 1ca066059f3435485fbb8e51559fb9a4617cb2ed
  Author:     Jeff Zhang <jeff.j.zhang@shopify.com>
  AuthorDate: 2026-01-15 03:37:14 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-15 03:37:14 +0900

    ZJIT: Add Type::has_value method (#15867)

    Resolves TODO added in #15863 (See https://github.com/ruby/ruby/pull/15863#discussion_r2687769112)

    Adds a method `Type::has_value` for comparing value specialized types with a `Const`.

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit a650c90fab6370a4abb9a1903186f350376aeb38
  Author:     Scott Myron <samyron@gmail.com>
  AuthorDate: 2026-01-14 13:17:16 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-14 16:59:32 +0900

    [ruby/json] initialize search.chunk_end to silence a warning about it being potentially uninitialized

    https://github.com/ruby/json/commit/73818b80c8

commit 24ad90d3e06ee9bcfc56d91358eb3d4792912a46
  Author:     Scott Myron <samyron@gmail.com>
  AuthorDate: 2026-01-13 09:57:09 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-14 16:59:32 +0900

    [ruby/json] use a conditional to select SIMD implementation rather than pointer

    https://github.com/ruby/json/commit/86a5cce405

commit 875dce2f5989c67b93e420d08939a74aa11d6199
  Author:     git[bot] <svn-admin@ruby-lang.org>
  AuthorDate: 2026-01-14 15:55:49 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-14 15:55:49 +0900

    Update bundled gems list as of 2026-01-13

commit 323ad363ca0b27da781c3bc8edb7b98b94520d83
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-01-14 15:21:54 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-01-14 15:22:04 +0900

    Switch filename of release and publish workflows

commit ab522c8876da582fe3d100ef398d59ffdd875130
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-01-14 14:47:06 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-01-14 14:47:06 +0900

    Stop to sync tsort changes

commit 3aa4aed0cb496b2cc1bf32cbda62093a89fa3a6d
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-01-14 14:44:14 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-01-14 14:44:14 +0900

    Skip Onigmo to check latest version

commit 6e61496531afea45ec53ebfd1a5db12635fc6ed9
  Author:     Chris Hasiński <krzysztof.hasinski@gmail.com>
  AuthorDate: 2026-01-14 10:41:00 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-14 10:41:00 +0900

    Pre-allocate IO.select result arrays based on input size (#15850)

    io.c: pre-allocate IO.select result arrays based on input size

    The ternary (rp?rb_ary_new():rb_ary_new2(0)) became pointless after
    commit a51f30c671 (Variable Width Allocation, Mar 2022) made both
    rb_ary_new() and rb_ary_new2(0) equivalent.

    Instead of just removing the dead code, improve on the original intent
    by pre-allocating based on the actual input array size. This avoids
    reallocations when many FDs are ready.

    Benchmark (100 ready FDs): ~8% improvement (5.59 -> 5.11 us/op)

  Notes:
    Merged-By: ioquatix <samuel@codeotaku.com>

commit 65a484578072f86586f250ae28712930da14cf53
  Author:     Jeff Zhang <jeff@39bytes.dev>
  AuthorDate: 2026-01-14 10:06:01 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-14 10:06:01 +0900

    ZJIT: Constant-fold LoadField/GuardBitEquals from known-frozen object

    Resolves https://github.com/Shopify/ruby/issues/915

    When we have `LoadField` with a `Shape` return type, we can fold it similar to the object case.
    `GuardBitEquals` can be removed when the argument is `Const` and the values are equal.

    The behaviors for loading instances variables from frozen/dynamic objects are already covered in existing tests so no new tests were added.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15863

    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit 4f8478f50cd12e1144addcef0cbff35e9ee1e3db
  Author:     Takashi Kokubun <takashikkbn@gmail.com>
  AuthorDate: 2026-01-14 08:27:22 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-01-14 08:27:45 +0900

    misc/.vscode/settings.json: Fix rust-analyzer warnings

commit 9f8505f06cd491e5635c40a9baa7d377bb258c5b
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-13 07:30:33 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-14 07:59:22 +0900

    [ruby/mmtk] Implement object movement support for finalizer table

    https://github.com/ruby/mmtk/commit/e5e2c1c347

commit 6f38d3de7f4f5073f3aed4a0f75f3e918d0a7f0c
  Author:     Max Bernstein <tekknolagi@gmail.com>
  AuthorDate: 2026-01-14 05:47:26 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-14 05:47:26 +0900

    ZJIT: Only print bold text in TTY (#15864)

    This is really irritating when piping to a file or pager.

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit 1a0b356d4069d4f8f0a0b805c2a15e61e4ab0d08
  Author:     Randy Stauner <randy@r4s6.net>
  AuthorDate: 2026-01-13 10:35:12 +0900
  Commit:     Aaron Patterson <aaron.patterson@gmail.com>
  CommitDate: 2026-01-14 04:18:19 +0900

    Add pushtoarray insn to fix segfault with forwarding + splat

    Example insns diff for `def x = [3]; def a(...) = b(*x, 2, 3, ...)`

         == disasm: #<ISeq:a@-e:1 (1,13)-(1,42)>
         local table (size: 1, argc: 0 [opts: 0, rest: -1, post: 0, block: -1, kw: -1@-1, kwrest: -1])
         [ 1] "..."@0
         0000 putself                                                          (   1)[Ca]
         0000 putself
         0000 opt_send_without_block                 <calldata!mid:x, argc:0, FCALL|VCALL|ARGS_SIMPLE>
         0000 splatarray                             true
         0000 putobject                              2
         0000 putobject                              3
        +0000 pushtoarray                            2
         0000 getlocal_WC_0                          "..."@0
         0000 sendforward                            <calldata!mid:b, argc:1, ARGS_SPLAT|ARGS_SPLAT_MUT|FCALL|FORWARDING>, nil
         0000 leave                                  [Re]

    This matches the insns produced by parse.y

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15855

commit 9db0a8c7db52856b1b048350360f262e8acd8c64
  Author:     tkling <tyler@tkling.lol>
  AuthorDate: 2026-01-14 00:10:08 +0900
  Commit:     Max Bernstein <tekknolagi@gmail.com>
  CommitDate: 2026-01-14 00:36:15 +0900

    [DOC] zjit: small typo fix
    prerequists -> prerequisites

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15861

commit 6a0a3d605b9e42e3ea9eaab5a4d5deade60f8500
  Author:     Jun Aruga <jaruga@redhat.com>
  AuthorDate: 2026-01-13 22:59:58 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-14 00:22:09 +0900

    [ruby/openssl] Fix test_digest.rb in FIPS.

    https://github.com/ruby/openssl/commit/27a9a92309

commit b722d37f21ff0b148bdadb1b6aed6532f9beb9bf
  Author:     Edouard CHIN <chin.edouard@gmail.com>
  AuthorDate: 2026-01-12 23:09:36 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-13 20:12:00 +0900

    [ruby/rubygems] Add a missing "require 'etc'" statement:

    - Ref https://github.com/ruby/rubygems/pull/9171#discussion_r2658056892
    - Referencing the constant Etc may raise a `NameError` depending on
      whether other Rubygems/Bundler codepath have evaluated a prior
      "require 'etc'". This can be reproduced with this Gemfile:

      ```ruby
      source "https://rubygems.org"

      gem 'prism', github: "ruby/prism"
      ```

    https://github.com/ruby/rubygems/commit/5d435e6863

commit b7dbdfe23ad443ca796f471144be99c00d5ce583
  Author:     eileencodes <eileencodes@gmail.com>
  AuthorDate: 2025-12-17 03:28:06 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-13 16:12:47 +0900

    [ruby/rubygems] Refactor atomic file write

    This refactoring is based off the changes in
    test/rubygems/test_gem_remote_fetcher.rb. It no longer uses tempfile as
    a result.

    https://github.com/ruby/rubygems/commit/be6fd6550b

commit 60cf8598b2f0e9548fd30761276f655569d3daf9
  Author:     卜部昌平 <shyouhei@ruby-lang.org>
  AuthorDate: 2026-01-13 11:50:01 +0900
  Commit:     卜部昌平 <shyouhei@ruby-lang.org>
  CommitDate: 2026-01-13 11:53:43 +0900

    [nit] refactor rename inline functions

    Pretty sure commit 0f64da9672d88921439f6fdb306d16fece9b9c90 didn't
    intend to welcome extension libraries to use these functions.

commit ead107f0d7bd3cf1f30428b7907b9871a9a4542b
  Author:     Takashi Kokubun <takashikkbn@gmail.com>
  AuthorDate: 2026-01-13 10:29:29 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-13 10:52:48 +0900

    [ruby/prism] Bump to v1.8.0

    https://github.com/ruby/prism/commit/9c12be6e6a

commit 910fcfad14e3e7464815afc14a5f2b7b87502ab9
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-13 10:34:38 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-13 10:34:38 +0900

    mk_builtin_loader: Count local variable definition lines

commit 5de4cc56086493689701e86aa0ccf6a4a4a87d75
  Author:     Chris Hasiński <krzysztof.hasinski@gmail.com>
  AuthorDate: 2026-01-11 22:12:07 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-01-13 10:19:44 +0900

    Fix regexp performance regression for patterns starting with s/k

    Commit 981ee02c7c ("Fix performance problem with /k/i and /s/i") was
    merged for Ruby 4.0 to enable partial Boyer-Moore optimization for
    patterns containing 's' or 'k' by using the prefix before those
    characters.

    However, when 's' or 'k' appears at the start of a pattern (no usable
    prefix), set_bm_skip() returns 0 and the code returned early without
    setting any optimization mode, leaving reg->optimize at
    ONIG_OPTIMIZE_NONE. This caused up to 30x slowdown for patterns like
    /slackware/i when matched against strings with non-ASCII characters.

    This patch keeps the improvement from 981ee02c7c for patterns with
    3+ char prefix, while fixing the regression by falling back to
    ONIG_OPTIMIZE_EXACT_IC with the full pattern when the usable prefix
    is less than 3 characters.

    Before: /\bslackware\b/i with non-ASCII string: 2.24 us/op
    After:  /\bslackware\b/i with non-ASCII string: 0.70 us/op (3.2x faster)

    [Bug #21824]

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15848

commit 09cd13114a7c30a7fecae1bda726a419cd1b4bf2
  Author:     Takashi Kokubun <takashikkbn@gmail.com>
  AuthorDate: 2026-01-13 09:55:40 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-01-13 09:55:53 +0900

    redmine-backporter.rb: Check remote-tracking branch

    on `has_commit` check for the `backport` command.

    I don't maintain local "master" branch on my ruby repository for stable
    branch maintenance. I want just running `git fetch origin` to make it
    work. It should work for those who pull origin/master into their local
    master too.

commit 7c91db9ea020f297f99095765a962284d3d08f3d
  Author:     Randy Stauner <randy@r4s6.net>
  AuthorDate: 2026-01-13 08:28:06 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-13 08:28:06 +0900

    ZJIT: Check arg limit before pushing SendWithoutBLockDirect insn (#15854)

    This reduces some processing and makes the HIR more accurate.

  Notes:
    Merged-By: k0kubun <takashikkbn@gmail.com>

commit 2daed3c02258e32fb2f0b25f3f0dc0461478de5b
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-10 11:22:08 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-13 07:23:34 +0900

    [ruby/mmtk] Clear slot when object is freed

    https://github.com/ruby/mmtk/commit/87290e45b2

commit 328655633bc46887f46d7be2df974beb4ff89b7c
  Author:     Max Bernstein <ruby@bernsteinbear.com>
  AuthorDate: 2026-01-13 00:32:10 +0900
  Commit:     Max Bernstein <tekknolagi@gmail.com>
  CommitDate: 2026-01-13 07:11:47 +0900

    ZJIT: Optimize Integer#[]

    This is used a lot in optcarrot.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15853

commit ee1aa78bee5f5c46ebcd75a3fe3eff03787b0b44
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-01-12 22:21:42 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-13 07:08:25 +0900

    [ruby/prism] Correctly expose ripper state

    It is for example used by `irb`, `rdoc`, `syntax_suggest`

    https://github.com/ruby/prism/commit/255aeb2485

commit d81a11d4e61f67b6fb0aaa44aaa7ead4022148dd
  Author:     Randy Stauner <randy@r4s6.net>
  AuthorDate: 2026-01-09 02:01:43 +0900
  Commit:     Max Bernstein <tekknolagi@gmail.com>
  CommitDate: 2026-01-13 06:50:48 +0900

    ZJIT: Snapshot FrameState with reordered args before direct send

    You can see the reordered args in the new Snapshot right before the
    DirectSend insn:

           v14:Any = Snapshot FrameState { pc: 0x00, stack: [v6, v11, v13], locals: [] }
           PatchPoint MethodRedefined(Object@0x00, a@0x00, cme:0x00)
           PatchPoint NoSingletonClass(Object@0x00)
           v22:HeapObject[class_exact*:Object@VALUE(0x00)] = GuardType v6, HeapObject[class_exact*:Object@VALUE(0x00)]
        -  v23:BasicObject = SendWithoutBlockDirect v22, :a (0x00), v13, v11
        -  v16:Any = Snapshot FrameState { pc: 0x00, stack: [v23], locals: [] }
        +  v23:Any = Snapshot FrameState { pc: 0x00, stack: [v6, v13, v11], locals: [] }
        +  v24:BasicObject = SendWithoutBlockDirect v22, :a (0x00), v13, v11
        +  v16:Any = Snapshot FrameState { pc: 0x00, stack: [v24], locals: [] }

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15827

commit 351616af8c92329e143db24969125ca62f8b6ffc
  Author:     Randy Stauner <randy@r4s6.net>
  AuthorDate: 2026-01-10 06:32:28 +0900
  Commit:     Max Bernstein <tekknolagi@gmail.com>
  CommitDate: 2026-01-13 06:50:48 +0900

    ZJIT: Add snapshot tests for direct send

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15827

commit 41d9eb784b4beba681205f7443e6c6454d0fca6e
  Author:     Max Bernstein <ruby@bernsteinbear.com>
  AuthorDate: 2026-01-13 01:49:13 +0900
  Commit:     Max Bernstein <tekknolagi@gmail.com>
  CommitDate: 2026-01-13 06:43:49 +0900

    ZJIT: Inline Array#empty?

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15852

commit 5cec11f45a9b6282e9bc402b599dd95159b86649
  Author:     Max Bernstein <max@bernsteinbear.com>
  AuthorDate: 2026-01-12 06:25:13 +0900
  Commit:     Max Bernstein <tekknolagi@gmail.com>
  CommitDate: 2026-01-13 06:43:49 +0900

    ZJIT: Inline Array#length

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15852

commit a1ba9f5733711a7665b57977d78940e07ff281a5
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-01-12 22:36:13 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-13 01:13:08 +0900

    [ruby/prism] Use one file for versioned `parser` classes

    One per version seems excessive.

    Do note that `rubocop-ast` used to require individual parser files. I wouldn't consider that to be part of the API since everything is autoloaded.
    From a GitHub code search, I didn't find anyone else doing it like that.

    https://github.com/ruby/prism/commit/458f622c34

commit f34297604f2b43bcec7f57b1f0ac1e2813ce58e3
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-12 18:57:20 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-12 20:24:56 +0900

    Remove a direct call of `rb_raise` in Onigmo

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15851

commit aaf47cca03c4c7561fd931e0aa1a76adfdb23eba
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-12 18:39:15 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-12 20:24:55 +0900

    Now onigenc_single_byte_code_to_mbclen checks out-of-bound

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15851

commit 76b1d4a4814eefa9bf50a1d3d0bf4e7094d5936b
  Author:     K.Takata <kentkt@csc.jp>
  AuthorDate: 2019-08-02 01:03:11 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-12 20:01:43 +0900

    [k-takata/Onigmo] Disable error message for capture history when not needed

    Add `#ifdef USE_CAPTURE_HISTORY`.

    https://github.com/k-takata/Onigmo/commit/8217be2c3a

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15851

commit 81c13349049a3674819842e87b14cf35b8755392
  Author:     K.Takata <kentkt@csc.jp>
  AuthorDate: 2019-08-01 21:27:51 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-12 20:01:43 +0900

    [k-takata/Onigmo] Fix out-of-bounds read in parse_char_class()
    (Close
    https://github.com/k-takata/Onigmo/pull/139)

    /[\x{111111}]/ causes out-of-bounds read when encoding is a single byte
    encoding. \x{111111} is an invalid codepoint for a single byte encoding.
    Check if it is a valid codepoint.

    https://github.com/k-takata/Onigmo/commit/d4cf99d30b

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15851

commit 16086128ccb5fa9133ef57c0e16bd9eaa82d818c
  Author:     K.Takata <kentkt@csc.jp>
  AuthorDate: 2019-07-30 23:15:05 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-12 20:01:43 +0900

    [k-takata/Onigmo] Suppress warning on 64-bit builds

    https://github.com/k-takata/Onigmo/commit/ced209d5e9

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15851

commit ac379278e818eb92e87a8f82e6841d7ab59baeb2
  Author:     K.Takata <kentkt@csc.jp>
  AuthorDate: 2019-07-29 20:16:46 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-12 20:01:43 +0900

    [k-takata/Onigmo] Fix stack overflow with X+++++++++++++++++++…

    Imported the fix from:
    https://github.com/kkos/oniguruma/commit/4097828d7cc87589864fecf452f2cd46c5f37180

    https://github.com/k-takata/Onigmo/commit/786b4849c1

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15851

commit f0b31a5898ae8101286dc47085139c56ba0bda54
  Author:     K.Takata <kentkt@csc.jp>
  AuthorDate: 2019-07-29 20:15:26 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-12 20:01:43 +0900

    [k-takata/Onigmo] Fix SEGV in onig_error_code_to_str() (Fix
    https://github.com/k-takata/Onigmo/pull/132)

    When onig_new(ONIG_SYNTAX_PERL) fails with ONIGERR_INVALID_GROUP_NAME,
    onig_error_code_to_str() crashes.
    onig_scan_env_set_error_string() should have been used when returning
    ONIGERR_INVALID_GROUP_NAME.

    https://github.com/k-takata/Onigmo/commit/00cc7e28a3

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15851

commit 496e74d0ccedd513eca9a156b207a36ed88e484f
  Author:     K.Takata <kentkt@csc.jp>
  AuthorDate: 2019-01-31 19:04:02 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-12 20:01:42 +0900

    [k-takata/Onigmo] Fix that onig_new() may crash

    When onig_reg_init() returns an error, onig_free_body() which is called
    via onig_new() may crash because some members are not properly
    initialized.  Fix it.

    https://github.com/k-takata/Onigmo/commit/d2a090a57e

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15851

commit ad150e90397ef85c1dbcf3ef54c0b1338fde4204
  Author:     K.Takata <kentkt@csc.jp>
  AuthorDate: 2019-01-30 19:47:54 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-12 20:01:42 +0900

    [k-takata/Onigmo] Update version number (6.2.0)

    * Update the version number to 6.2.0
    * Update LTVERSION to 6:5:0.

    https://github.com/k-takata/Onigmo/commit/9e0f7ceee0

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15851

commit a097878ed4fdecc347909f1cd62089bf6ab554c0
  Author:     K.Takata <kentkt@csc.jp>
  AuthorDate: 2019-01-30 19:02:41 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-12 20:01:42 +0900

    [k-takata/Onigmo] Comment out unused errors

    https://github.com/k-takata/Onigmo/commit/5555ee4c81

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15851

commit 916fbf1063268e27e241363d81e68bf132e7602b
  Author:     K.Takata <kentkt@csc.jp>
  AuthorDate: 2019-01-30 10:31:10 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-12 20:01:42 +0900

    [k-takata/Onigmo] Update copyright information

    * Update our copyright information.
    * Import the latest information from oniguruma.

    Related: #95

    https://github.com/k-takata/Onigmo/commit/0d8662b500

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15851

commit 85a7171b413305c4bfaca72ad958b8404353f723
  Author:     K.Takata <kentkt@csc.jp>
  AuthorDate: 2019-01-30 18:51:56 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-12 20:01:42 +0900

    [k-takata/Onigmo] Add USE_CASE_MAP_API config

    The case_map API is mainly (only?) used in Ruby.
    Make it possible to disable the API.

    https://github.com/k-takata/Onigmo/commit/80e289d6bb

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15851

commit f9131412f874aa348df383266cee7dc2cc82a9ca
  Author:     K.Takata <kentkt@csc.jp>
  AuthorDate: 2019-01-29 19:00:12 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-12 20:01:42 +0900

    [k-takata/Onigmo] Revise set_bm_skip()

    https://github.com/k-takata/Onigmo/commit/6875da50f7

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15851

commit bbf9bf3fc5c322ab8e622714b0178aca58e82191
  Author:     K.Takata <kentkt@csc.jp>
  AuthorDate: 2019-01-29 19:00:02 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-12 20:01:42 +0900

    [k-takata/Onigmo] Remove code for backward BM search

    The code has not been used for long.
    (Oniguruma also removed this code.)

    https://github.com/k-takata/Onigmo/commit/8796781fdd

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15851

commit fb7f344b09a8351544f9b4bbb593917b552b07ca
  Author:     K.Takata <kentkt@csc.jp>
  AuthorDate: 2019-01-29 18:59:50 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-12 20:01:42 +0900

    [k-takata/Onigmo] Remove code for reg->int_map

    https://github.com/k-takata/Onigmo/commit/6c58de82d2

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15851

commit 6484a71a4fee654e73f377a01db331500222dd13
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-12 10:23:10 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-12 20:01:41 +0900

    Add Onigmo to sync_default_gems.rb

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15851

commit bf36ad9c12481461031a2dbde39e27d96e5a86e4
  Author:     Benoit Daloze <eregontp@gmail.com>
  AuthorDate: 2026-01-11 18:37:30 +0900
  Commit:     Benoit Daloze <eregontp@gmail.com>
  CommitDate: 2026-01-12 16:44:26 +0900

    ZJIT: remove unused rb_RSTRUCT_LEN()

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15845

commit 916c0a810552b4c2c9a7fce2a50dc8c6efd5bb2f
  Author:     Benoit Daloze <eregontp@gmail.com>
  AuthorDate: 2026-01-11 18:29:32 +0900
  Commit:     Benoit Daloze <eregontp@gmail.com>
  CommitDate: 2026-01-12 16:44:26 +0900

    ZJIT: remove unused rb_RSTRUCT_SET()

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15845

commit d57c3296a9f49dfa2c853194e4267edd794d405b
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-12 11:21:35 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-12 11:28:06 +0900

    Re-fix `VCS::GIT#branch_beginning`

    Count the last release date from the whole working directory, not
    only the version headers.

commit 61c372a1b7fe045adc9b67196503f29b79bff376
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-08 08:10:10 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-12 00:46:56 +0900

    [DOC] Improve docs for ObjectSpace.count_symbols

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15820

commit 1267a3ab565523f5181cd33321897e47944e5771
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-07 09:06:13 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-12 00:46:56 +0900

    [DOC] Improve docs for ObjectSpace.count_imemo_objects

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15820

commit cf5c5abe1e7057532d1c945372b68d55cfaf163c
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-07 07:24:45 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-12 00:46:56 +0900

    [DOC] Improve docs for ObjectSpace.count_tdata_objects

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15820

commit 8baaece6d9a64e8cc51d8d0c9839546e3d039eee
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-11 22:46:06 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-11 22:53:12 +0900

    [ruby/prism] [Bug #21831] Fix denominator of rational float literal

    Denominators can contain underscores in fraction part as well as other
    numeric literals.

    [Bug #21831]: https://bugs.ruby-lang.org/issues/21831

    https://github.com/ruby/prism/commit/e247cb58c7

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15847

commit a071078e907af99db737799410d713d5ec953eb7
  Author:     Chris Hasiński <krzysztof.hasinski@gmail.com>
  AuthorDate: 2026-01-11 11:45:44 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-01-11 21:42:37 +0900

    pack.c: remove wasted allocation in BER integer packing

    The 'w' format (BER compressed integer) was allocating an empty
    string with rb_str_new(0, 0) then immediately overwriting it with
    the correctly-sized allocation. Remove the wasted first allocation.

    ~50% improvement on BER pack benchmarks.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15842

commit 3363861a5af679e7027bdd744fc05d7a797ba33c
  Author:     Heath Dutton🕴️ <heathdutton@gmail.com>
  AuthorDate: 2026-01-11 12:28:07 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-01-11 21:06:51 +0900

    Remove RUBY_API_VERSION check in cxxanyargs.hpp

    The version check used undefined macros, causing -Wundef warnings.
    The conditional is no longer needed as Ruby is past version 3.1.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15843

commit 73be9992e93072be803ffd5173e29dcf597e04ef
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-01-11 17:54:18 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-01-11 21:03:03 +0900

    Disambiguate private and public RSTRUCT_ helpers

    RSTRUCT_LEN / RSTRUCT_GET / RSTRUCT_SET all existing in two
    versions, one public that does type and frozens checks
    and one private that doesn't.

    The problem is that this is error prone because the public version
    is always accessible, but the private one require to include
    `internal/struct.h`. So you may have some code that rely on the
    public version, and later on the private header is included and
    changes the behavior.

    This already led to introducing a bug in YJIT & ZJIT:
    https://github.com/ruby/ruby/pull/15835

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15844

commit 463a806fb10e4631012d616a3133b4f8cce7938f
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-11 15:12:58 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-11 15:12:58 +0900

    Fix `VCS::GIT#branch_beginning` to search since the last relase

    The ChangeLog in ruby-4.0.0 did not contain entries for 3.5.0.

commit acd0c68a074cd47fba486d4d77895e2709be873a
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-11 14:51:49 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-11 14:51:49 +0900

    Relax the flaky test threshold on RHEL 10.0 x86_64

commit 0d4538b57d5f835af27d8d29464c32dbdf4593f3
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-10 08:00:27 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-10 23:31:35 +0900

    [DOC] Improve docs for Module#>=

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15838

commit f0f4a683b4dddf870491607396a564dec55a4d6e
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-10 07:56:47 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-10 23:31:35 +0900

    [DOC] Improve docs for Module#<=

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15838

commit 0b83346f1c1f6e54c344307c2ec5f9d0a6f80317
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-10 07:54:22 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-10 23:31:35 +0900

    [DOC] Improve docs for Module#<

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15838

commit 98c414a678c2497dc522abf3802b2f78bfc856c4
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-10 07:48:27 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-10 23:31:35 +0900

    [DOC] Improve docs for Module#>

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15838

commit 0b69f7fa347e3aadb7998e3f33257e6c83787c8b
  Author:     Jun Aruga <jaruga@redhat.com>
  AuthorDate: 2026-01-10 01:51:04 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-10 16:20:55 +0900

    [ruby/openssl] Fix test_cipher.rb in FIPS.

    https://github.com/ruby/openssl/commit/11bd2efb2a

commit c3f6fcc4c5d59aa12ce82148502b17b4bbe6877d
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-09 09:17:09 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-10 08:05:43 +0900

    Skip ObjectSpaceTest#test_count_nodes for RBS

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15766

commit e8c61f513928c411859df1d4fe0c201157d4f129
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2025-12-30 00:19:19 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-10 08:05:43 +0900

    Remove ObjectSpace.count_nodes

    ObjectSpace.count_nodes has been a no-op and returning an empty hash since
    Ruby 2.5 because parser nodes are not GC managed.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15766

commit ef488bff987dcc1044bd1d98f2aa7013081f66d8
  Author:     BurdetteLamar <burdettelamar@yahoo.com>
  AuthorDate: 2026-01-10 07:47:13 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-10 08:05:33 +0900

    [DOC] Doc for Enumerator.new

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15837

commit 77cad87dc176273a3b646330e0e9b50e3451a1a9
  Author:     BurdetteLamar <burdettelamar@yahoo.com>
  AuthorDate: 2026-01-10 06:06:57 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-10 07:36:32 +0900

    [DOC] Doc for Enumerator class

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15836

commit 3d242a82a38f60664b5fab815a786901d57c11ca
  Author:     Burdette Lamar <BurdetteLamar@Yahoo.com>
  AuthorDate: 2026-01-10 07:36:26 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-10 07:36:26 +0900

    [DOC] Harmonize #> methods

commit e08f316f28b1ce32b154582ce6ac1d2e1471a5b7
  Author:     Max Bernstein <rubybugs@bernsteinbear.com>
  AuthorDate: 2026-01-10 04:25:48 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-10 04:25:48 +0900

    YJIT: Add frozen guard for struct aset (#15835)

    We used to just skip this check (oops), but we should not allow
    modifying frozen objects.

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit 51ab7b0405e39d6defe0b236e23f43b42aa6c1da
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-01-09 17:21:45 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-01-10 01:31:10 +0900

    YJIT: gen_struct_aset check for frozen status

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15722

commit 7379b9ed780bc8fcf8c50ae2d33816523327608c
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2025-12-24 23:17:21 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-01-10 01:31:10 +0900

    Optimize rb_mark_generic_ivar for T_DATA and T_STRUCT

    T_DATA and T_STRUCT could have ivars but might not use the generic_fields_tbl.
    This commit skips lookup in the generic_fields_tbl for those cases.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15722

commit c794a97940a36269cffcb6ad35ef7ff209fe2720
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-09 14:24:38 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-01-09 20:02:54 +0900

    Rename `alloca_overflow` to `stack_overflow`

    `alloca` is an implementation detail to raise a stack overflow.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15832

commit e01e13c23999f0e43d8a0874003c73a1cdd68f1e
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-02 11:05:07 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-09 17:16:22 +0900

    Use `assert_ruby_status` if no assertion

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15785

commit fc0c67deb2195c51661b6c35eb41cfb2cb92e3f8
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-03 12:20:35 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-09 17:16:22 +0900

    Make `assert_separately` to count assertions in forked processes

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15785

commit 364e25b1c3b7771c84b27e572796165c9b11b969
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-02 09:37:59 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-09 16:06:13 +0900

    Make `assert_separately` tolerant to core method redefinitions

    And split `TestRubyOptimization#test_objtostring` for each target
    class.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15785

commit 3185786874315ab4f1cfcc73c3d1b14613452905
  Author:     Jörmungandrk <github@zerodaysec.org>
  AuthorDate: 2026-01-09 12:22:01 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-01-09 15:04:05 +0900

    Fix integer overflow checks in enumerator

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15829

commit b61e18d76b939d7e5e18f61a426b14a110f95b7c
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-08 19:40:56 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-09 11:36:46 +0900

    Win32: configure without an intermediate makefile

    This batch file used `nmake` on the old `command.com` to extract the
    parent directory name of this file and to get around the command line
    argument length limit.  However, Windows 9X support as a build host
    ended over a decade ago, and this file now utilizes the functionality
    of `cmd.exe` already.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15830

commit e89db8567c20692eabea70a4997a6ba325a347f8
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-09 09:10:08 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-09 10:33:41 +0900

    [ruby/mmtk] Assert that objects are not T_NONE in the write barrier

    https://github.com/ruby/mmtk/commit/59d27203e2

commit aa7eb97d062e260f0d704b78e93c470ac8444129
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-09 09:09:59 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-09 10:33:41 +0900

    [ruby/mmtk] Add MMTK_ASSERT

    https://github.com/ruby/mmtk/commit/e34d5cf32f

commit b3216bc1e19c4b49a352793cc60ab06743ad58f2
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-01-08 19:46:29 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-01-09 09:33:16 +0900

    Fix Ripper::Lexer::State#[] for to_s

    The instance variable is called `to_s`, not `event`.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15826

commit 50b719115af8344888ef2735788ebc9f32c05a54
  Author:     Stan Lo <stan001212@gmail.com>
  AuthorDate: 2026-01-09 08:07:50 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-09 08:07:50 +0900

    Remove ruby-bench excludes (#15828)

    These benchmarks should be working fine now.

  Notes:
    Merged-By: st0012 <stan001212@gmail.com>

commit c6f9a4d3936ff9a2f9db8a3548a7dbc8fadd18d9
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-08 09:56:49 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-09 07:33:32 +0900

    Remove check for rb_obj_gen_fields_p in rb_hash_dup

    rb_copy_generic_ivar already checks for it, so we don't need to call
    rb_obj_gen_fields_p twice.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15823

commit 523857bfcb0f0cdfd1ed7faa09b9c59a0266e7e2
  Author:     Max Bernstein <rubybugs@bernsteinbear.com>
  AuthorDate: 2026-01-09 04:57:55 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-09 04:57:55 +0900

    ZJIT: Replace GuardShape with LoadField+GuardBitEquals (#15821)

    GuardShape is just load+guard, so use the existing HIR instructions for load+guard. Probably makes future analysis slightly easier.

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit 16863f2ec1c8cefd852965e58acfcfd61b0194b9
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-01-08 21:47:35 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-09 03:35:26 +0900

    [ruby/prism] Decouple ripper translator from ripper library

    Ripper exposes Ripper::Lexer:State in its output, which is a bit of a problem. To make this work, I basically copy-pasted the implementation.

    I'm unsure if that is acceptable and added a test to make sure that these values never go out of sync.
    I don't imagine them changing often, prism maps them 1:1 for its own usage.

    This also fixed the shim by accident. `Ripper.lex` went to `Translation::Ripper.lex` when it should have been the original. Removing the need for the original resolves that issue.

    https://github.com/ruby/prism/commit/2c0bea076d

commit fc66de3e6b5e28c017c3cffac77a66d680d679a4
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-01-08 19:12:15 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-09 03:35:25 +0900

    [ruby/prism] Remove unneeded `ripper` requires

    Ripper is either not used or loaded where it is actually needed

    https://github.com/ruby/prism/commit/a73a4fb00c

commit 3bfc86558b7a314417399470b5204a914f2ca3ff
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-01-08 18:53:42 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-09 03:35:25 +0900

    [ruby/prism] Move `LexRipper` into its own file

    It has a hard dependency on ripper that can't be removed.
    This makes it so that ripper can be loaded only when the class is actually used.

    https://github.com/ruby/prism/commit/3b5b4a8a6d

commit dcfbbdc38c2c0502f2eeb9172d1a82721b5ca45b
  Author:     git[bot] <svn-admin@ruby-lang.org>
  AuthorDate: 2026-01-08 18:48:38 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-08 18:48:38 +0900

    Update bundled gems list as of 2026-01-08

commit 19d3f2da668ad0bdb1c6077cf1d9a86432ea8889
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-01-08 18:06:45 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-01-08 18:48:00 +0900

    Skip collection install test

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15825

commit eaa9902ca7d5752fddd2e6d31b6880d9f82de536
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-01-08 17:01:54 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-01-08 18:48:00 +0900

    Exclude ruby-lsp benchmark because released version of rbs didn't have tsort dependency

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15825

commit 4a988b7f480d30fbc06e3e3399611172072bf58e
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-01-08 16:35:34 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-01-08 18:48:00 +0900

    Inject tsort path before rdoc

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15825

commit 9c49084a203a4b8a3abca653dee6781b9e5ed5fb
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-01-08 15:45:41 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-01-08 18:48:00 +0900

    Update tsort entries under the doc

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15825

commit 9580c7d07bb048386f75be994ea33d2870d2e177
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-01-08 15:43:28 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-01-08 18:48:00 +0900

    Migrate tsort as bundled gems

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15825

commit 946b1c1ba19e708d54a3f9eee00d4ea06434876c
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-08 13:41:07 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-08 13:41:07 +0900

    Move parentheses around macro arguments

commit 1852ef43778d59a64881b293b0b887e2bc5af37a
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-07 09:39:55 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-08 13:30:47 +0900

    Fail if the Ruby specified with `--with-baseruby` is too old

    If the baseruby is explicitly specified, fail because the option is
    not accepted if it does not meet the requirements.  If the option is
    not specified, just display the warning and continue, in the hope that
    it is not needed.

    Follow up GH-15809

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15817

commit 725e3d0aa7ffe47765a973904b72eac65763834b
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-08 12:26:27 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-08 13:29:23 +0900

    Fluent and/or is supported by Prism too now

commit 768862868472fb1800e556effb0e37be2fbaec52
  Author:     Chris Hasiński <krzysztof.hasinski@gmail.com>
  AuthorDate: 2026-01-08 09:13:38 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-01-08 13:15:29 +0900

    Fix incorrect bundled gems warning for hyphenated gem names

    When requiring a file like "benchmark/ips", the warning system would
    incorrectly warn about the "benchmark" gem not being a default gem,
    even when the user has "benchmark-ips" (a separate third-party gem)
    in their Gemfile.

    The fix checks if a hyphenated version of the require path exists in
    the bundle specs before issuing a warning. For example, requiring
    "benchmark/ips" now checks for both "benchmark" and "benchmark-ips"
    in the Gemfile.

    [Bug #21828]

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15822

commit 080d66beca71d6cc290a8be4acd49e5a70594f9c
  Author:     Misaki Shioi <31817032+shioimm@users.noreply.github.com>
  AuthorDate: 2026-01-08 09:41:42 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-08 09:41:42 +0900

    Avoid flaky test failures by retrying on local port conflicts (#15818)

    This test obtains an available port number by calling `TCPServer.new`,
    then closes it and passes the same port number as `local_port` to `TCPSocket.new`.

    However, `TCPSocket.new` could occasionally fail with `Errno::EADDRINUSE`
    at the bind(2) step.
    I believe this happens when tests are run in parallel and another process
    on the same host happens to bind the same port in the short window between
    closing the `TCPServer` and calling `TCPSocket.new`.

    To address this race condition, the test now retries with a newly selected
    available port when such a conflict occurs.

  Notes:
    Merged-By: shioimm <shioi.mm@gmail.com>

commit 950ffa90b7939885cc35d376a2e10aabfdc7170d
  Author:     Nozomi Hijikata <121233810+nozomemein@users.noreply.github.com>
  AuthorDate: 2026-01-08 08:24:29 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-08 08:24:29 +0900

    ZJIT: Add ArrayAset instruction to HIR (#15747)

    Inline `Array#[]=` into `ArrayAset`.

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit 3ea6ec8344a07e2d10ba248c69039dd4d27fd8fb
  Author:     Burdette Lamar <BurdetteLamar@Yahoo.com>
  AuthorDate: 2026-01-08 08:02:22 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-08 08:02:22 +0900

    [DOC] Harmonize #=~ methods (#15814)

  Notes:
    Merged-By: peterzhu2118 <peter@peterzhu.ca>

commit 5230f835e807b7b6935b758de58ee26da6cb6a60
  Author:     Burdette Lamar <BurdetteLamar@Yahoo.com>
  AuthorDate: 2026-01-08 08:01:56 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-08 08:01:56 +0900

    [DOC] Harmonize #[] methods

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15815

    Merged-By: peterzhu2118 <peter@peterzhu.ca>

commit 7d4983803887a45c311ab954de4527333b976500
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-01-07 17:00:14 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-07 17:49:23 +0900

    [ruby/rubygems] bin/rubocop -A

    https://github.com/ruby/rubygems/commit/e3f418aa11

commit 3657700c4069ffd5d9e9b900e75f484f80eb8e3f
  Author:     Takuya Noguchi <takninnovationresearch@gmail.com>
  AuthorDate: 2022-09-06 16:37:50 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-07 17:49:23 +0900

    [ruby/rubygems] Bundler: validate more options for add sub-command

    Signed-off-by: Takuya Noguchi <takninnovationresearch@gmail.com>

    https://github.com/ruby/rubygems/commit/6ca2e28680

commit 88467996862a15f64ee05e49c9df9b18296c66d6
  Author:     neimadTL <damientalbot26@gmail.com>
  AuthorDate: 2025-02-13 22:32:33 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-07 16:44:55 +0900

    [ruby/rubygems] Update custom errors with Exception#full_message

    The use of `Exception#full_message` makes more sense as it shows
    the cause and the backstrace.

    https://github.com/ruby/rubygems/commit/62a92c3f5e

commit e1087c1226f0a98c83842613066ba9ff48710887
  Author:     eileencodes <eileencodes@gmail.com>
  AuthorDate: 2025-12-20 01:27:28 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-07 16:30:26 +0900

    [ruby/rubygems] Fix dependency source bug in bundler

    I stumbled across a bundler bug that had me scratching my head for
    awhile, because I hadn't experienced it before.

    In some cases when changing the source in a gemfile from a
    `Source::Gemspec` to either a `Source::Path` or `Source::Git` only the
    parent gem will have it's gem replaced and updated and the child
    components will retain the original version. This only happens if the gem
    version of the `Source::Gemspec` and `Source::Git` are the same. It also
    requires another gem to share a dependency with the one being updated.

    For example if I have the following gemfile:

    ```
    gem "rails", "~> 8.1.1"
    gem "propshaft"
    ```

    Rails has a component called `actionpack` which `propshaft` depends on.

    If I change `rails` to point at a git source (or path source), only the
    path for `rails` gets updated:

    ```
    gem "rails", github: "rails/rails", branch: "8-1-stable"
    gem "propshaft"
    ```

    Because `actionpack` is a dependency of `propshaft`, it will remain in
    the rubygems source in the lock file WHILE the other gems are correctly
    pointing to the git source.

    Gemfile.lock:

    ```
    GIT
      remote: https://github.com/rails/rails.git
      revision: https://github.com/ruby/rubygems/commit/9439f463e0ef
      branch: 8-1-stable
      specs:
        actioncable (8.1.1)
          ...
        actionmailbox (8.1.1)
          ...
        actionmailer (8.1.1)
          ...
        actiontext (8.1.1)
          ...
        activejob (8.1.1)
          ...
        activemodel (8.1.1)
          ...
        activerecord (8.1.1)
          ...
        activestorage (8.1.1)
          ...
        rails (8.1.1)
          ...
        railties (8.1.1)
          ...

    GEM
      remote: https://rubygems.org/
      specs:
        action_text-trix (2.1.15)
          railties
        actionpack (8.1.1) <===== incorrectly left in Rubygems source
          ...
    ```

    The gemfile will contain `actionpack` in the rubygems source, but will
    be missing in the git source so the path will be incorrect. A bundle
    show on Rails will point to the correct place:

    ```
    $ bundle show rails
    /Users/eileencodes/.gem/ruby/3.4.4/bundler/gems/rails-9439f463e0ef
    ```

    but a bundle show on actionpack will be incorrect:

    ```
    $ bundle show actionpack
    /Users/eileencodes/.gem/ruby/3.4.4/gems/actionpack-8.1.1
    ```

    This bug requires the following to reproduce:

    1) A gem like Rails that contains components that are released as their
    own standalone gem is added to the gemfile pointing to rubygems
    2) A second gem is added that depends on one of the gems in the first
    gem (like propshaft does on actionpack)
    3) The Rails gem is updated to use a git source, pointing to the same
    version that is being used by rubygems (ie 8.1.1)
    4) `bundle` will only update the path for Rails component gems if no
    other gem depends on it.

    This incorrectly leaves Rails (or any gem like it) using two different
    codepaths / gem source code.

    https://github.com/ruby/rubygems/commit/dff76ba4f6

commit 25c72b0e8e206e5baec71d4ece7551b7da7da445
  Author:     Jarek Prokop <jprokop@redhat.com>
  AuthorDate: 2025-12-22 18:13:34 +0900
  Commit:     Alan Wu <XrXr@users.noreply.github.com>
  CommitDate: 2026-01-07 13:55:06 +0900

    Support customizable rustc_flags for rustc builds.

    Add `rustc_flags` option for configure that appends to RUSTC_FLAGS
    flags used when compiling with rustc for customizable build flags.
    It appends to existing defaults in RUSTC_FLAGS.

    Co-authored-by: Alan Wu <XrXr@users.noreply.github.com>

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15695

commit 1abb609d667d4e07fb30192ef9da376bb288e230
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-06 08:32:02 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-07 09:58:14 +0900

    [ruby/mmtk] Check that a and b are valid objects in write barrier

    https://github.com/ruby/mmtk/commit/350625ebb3

commit 08f6b8673adea23d2e96ca983f5d843c17b9a0e7
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-06 08:31:38 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-07 09:58:14 +0900

    [ruby/mmtk] Set MMTK_DEBUG in C compiler for debug builds

    https://github.com/ruby/mmtk/commit/12a3904b04

commit a024dca391695d07b24598677ddd6509ae3febfb
  Author:     yui-knk <spiketeika@gmail.com>
  AuthorDate: 2026-01-06 12:08:48 +0900
  Commit:     yui-knk <spiketeika@gmail.com>
  CommitDate: 2026-01-07 09:26:37 +0900

    Remove `in_masgn` field from `struct iseq_compile_data`

    `in_masgn` has not been used since fb6e3a80009a744a4e0b75660f1ce6da65e20e6c.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15812

commit b2ed4cdced26f8840e181960c776e950e8bb0396
  Author:     Philip Hallstrom <philip@pjkh.com>
  AuthorDate: 2026-01-07 07:29:58 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-07 08:05:30 +0900

    [ruby/time] Add changelog URI to time.gemspec

    https://github.com/ruby/time/commit/08f896ca0d

commit 5c24f4081d0d163ed91dd20692d09d0c88ac46b1
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-06 10:25:52 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-07 07:16:38 +0900

    Add potential missing GC guard in iseq_data_to_ary

    The iseq object might be optimized away by the compiler in iseq_data_to_ary
    because we mainly only use the iseq_body. With MMTk, this crash occasionally
    happens:

        TestIseqLoad#test_stressful_roundtrip [test/-ext-/iseq_load/test_iseq_load.rb:20]:
        pid 106677 killed by SIGSEGV (signal 11) (core dumped)
        | -:10: [BUG] Segmentation fault at 0x0000000000f1410c
        | ruby 4.1.0dev (2026-01-05T23:31:16Z master 5d26a2aeea) +PRISM +GC[mmtk] [x86_64-linux]
        |
        | -- Control frame information -----------------------------------------------
        | c:0005 p:---- s:0022 e:000021 l:y b:---- CFUNC  :to_a
        | c:0004 p:0039 s:0018 e:000017 l:y b:0001 METHOD -:10
        | c:0003 p:0013 s:0010 e:000009 l:y b:0001 METHOD -:16
        | c:0002 p:0054 s:0006 e:000005 l:n b:---- EVAL   -:26 [FINISH]
        | c:0001 p:0000 s:0003 E:0003a0 l:y b:---- DUMMY  [FINISH]
        |
        | -- Ruby level backtrace information ----------------------------------------
        | -:26:in '<main>'
        | -:16:in 'test_bug8543'
        | -:10:in 'assert_iseq_roundtrip'
        | -:10:in 'to_a'
        |
        | -- Threading information ---------------------------------------------------
        | Total ractor count: 1
        | Ruby thread count for this ractor: 1
        |
        | -- Machine register context ------------------------------------------------
        |  RIP: 0x000055b581f866f5 RBP: 0x0000000000000000 RSP: 0x00007ffccce2ffe0
        |  RAX: 0x00000200ffee2b08 RBX: 0x0000000000f1410c RCX: 0x0000000000000000
        |  RDX: 0x000000000010c7f2 RDI: 0x00000200ffee2b08 RSI: 0x00000200ffee2b08
        |   R8: 0x0000000000000004  R9: 0x00000c0803ffb8ac R10: 0x00007fe9074c0cc8
        |  R11: 0x0000000000000246 R12: 0x0000000000000000 R13: 0x0000000000000001
        |  R14: 0x0000000000000001 R15: 0x00000200ffee2208 EFL: 0x0000000000010246
        |
        | -- C level backtrace information -------------------------------------------
        | ruby(rb_print_backtrace+0x14) [0x55b582119a9f] vm_dump.c:1105
        | ruby(rb_vm_bugreport) vm_dump.c:1450
        | ruby(rb_bug_for_fatal_signal+0x102) [0x55b582409072] error.c:1131
        | ruby(sigsegv+0x46) [0x55b582051bf6] signal.c:948
        | /lib/x86_64-linux-gnu/libc.so.6(0x7fe907645330) [0x7fe907645330]
        | ruby(iseq_data_to_ary+0xe5) [0x55b581f866f5] iseq.c:3380
        | ruby(iseq_data_to_ary+0x6b2) [0x55b581f86cc2] iseq.c:3470
        | ruby(vm_call_cfunc_with_frame_+0x10d) [0x55b5820e4a0d] vm_insnhelper.c:3902

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15810

commit 58fb95af36c86b00b134db5275becf7455ba4790
  Author:     Burdette Lamar <BurdetteLamar@Yahoo.com>
  AuthorDate: 2026-01-07 07:13:15 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-07 07:13:15 +0900

    [DOC] Harmonize #== methods (#15805)

  Notes:
    Merged-By: peterzhu2118 <peter@peterzhu.ca>

commit 49ca241d6d5f589dec8f42fecdc8ecb96690b859
  Author:     Matt Valentine-House <matt@eightbitraptor.com>
  AuthorDate: 2026-01-06 06:30:06 +0900
  Commit:     Matt Valentine-House <matt@eightbitraptor.com>
  CommitDate: 2026-01-07 02:09:27 +0900

    Show a more verbose message if BASERUBY is too old

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15809

commit 925d04108b8fff7dfa14ccd8ac19fd1522cc99c3
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-06 15:16:40 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-06 18:37:41 +0900

    Add `rake` target to run the bundled `rake`

commit bff7c6d9e9a423d4a7158b81658b3e77733b9be3
  Author:     Steve Savio <hi@stevos.dev>
  AuthorDate: 2026-01-06 16:34:44 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-01-06 18:30:33 +0900

    [DOC] Fix minor typo on shareable procs section

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15813

commit ad6b85450db1b252660dae4b514f5be35ccd38b9
  Author:     Schneems <richard.schneeman+foo@gmail.com>
  AuthorDate: 2025-12-27 03:21:51 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-06 13:38:13 +0900

    [ruby/rubygems] Retain current bundler version on `bundle clean`

    Previously: In #9218 a reproduction is shared where running `bundle clean` using a binstub (`bin/bundle`) results in bundler removing itself. This results in Ruby falling back to its default bundler version. This behavior seems to be present for as long as there has been a default version of bundler (Ruby 2.6+).

    Now: Bundler will explicitly add its current version number to the specs to be preserved. This prevents `bundle clean` from removing the current bundler version.

    close https://github.com/ruby/rubygems/pull/9218

    https://github.com/ruby/rubygems/commit/e3f0167ae4

commit 4377249bbf1a27b3d860ab8948b508f1b024ba1c
  Author:     Schneems <richard.schneeman+foo@gmail.com>
  AuthorDate: 2025-12-27 03:21:51 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-06 13:38:13 +0900

    [ruby/rubygems] Test for removing current bundler version

    https://github.com/ruby/rubygems/commit/675342e6d0

commit 16bdfa1b2a6b4cb40417e7673ad9eaa80664e4f0
  Author:     Schneems <richard.schneeman+foo@gmail.com>
  AuthorDate: 2025-12-27 03:21:51 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-06 13:38:12 +0900

    [ruby/rubygems] Split logic to two lines

    https://github.com/ruby/rubygems/commit/5a6eca4cf9

commit 3143543f958d4fa90d0423f84c598286098f1704
  Author:     lolwut <lol@wut.com>
  AuthorDate: 2025-12-26 12:05:50 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-06 13:38:12 +0900

    [ruby/rubygems] Compare like values in find_bundler

    The input to this method is not guaranteed to be a string, it could be a `Gem::Version` this normalizes the comparison.

    https://github.com/ruby/rubygems/commit/1f43c7a988

commit 1b476606f2294d0ce52a7429c597491ff68b11ce
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-01-06 13:07:49 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-01-06 13:07:49 +0900

    Update the latest versions of actions

commit 5d26a2aeea1368c5e37cb75ca511e62c5e21960f
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-05 04:14:26 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-06 08:31:16 +0900

    [ruby/mmtk] Assert pinning object is not moved

    https://github.com/ruby/mmtk/commit/8813e76bf8

commit dd67874ad9ef1beb57e2c76528ff715c525163c6
  Author:     BurdetteLamar <burdettelamar@yahoo.com>
  AuthorDate: 2026-01-06 03:29:04 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-06 08:30:40 +0900

    [DOC] Harmonize #=== methods

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15807

commit a25f4689175b5b0f7da0831dbcedf86b62f67e19
  Author:     BurdetteLamar <burdettelamar@yahoo.com>
  AuthorDate: 2026-01-06 01:18:16 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-06 08:23:55 +0900

    [DOC] Harmonize #>= methods

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15803

commit 7a1180afb665286556315bcf27188263854b213b
  Author:     Takashi Kokubun <takashikkbn@gmail.com>
  AuthorDate: 2026-01-06 06:33:57 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-01-06 06:33:58 +0900

    ruby-bench: Prefer --excludes over rm -rf

    to remind us of skipped benchmarks in the CI job names

commit 23765a5e094f61b11bddce98f7fdd425d1c8ed87
  Author:     Max Bernstein <rubybugs@bernsteinbear.com>
  AuthorDate: 2026-01-06 05:16:48 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-06 05:16:48 +0900

    ZJIT: Update Iongraph (#15806)

    Fix some rendering bugs and remove React.

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit 7e81bf5c0c8f43602e6d901f4253dca2f3d71745
  Author:     Luke Gruber <luke.gruber@shopify.com>
  AuthorDate: 2026-01-06 02:18:47 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-06 02:18:47 +0900

    Fix sleep spurious wakeup from sigchld (#15802)

    When sleeping with `sleep`, currently the main thread can get woken up from sigchld
    from any thread (subprocess exited). The timer thread wakes up the main thread when this
    happens, as it checks for signals. The main thread then executes the ruby sigchld handler
    if one is registered and is supposed to go back to sleep immediately. This is not ideal but
    it's the way it's worked for a while. In commit 8d8159e7d8 I added writes to `th->status`
    before and after `wait_running_turn` in `thread_sched_to_waiting_until_wakeup`, which is
    called from `sleep`. This is usually the right way to set the thread's status, but `sleep`
    is an exception because the writes to `th->status` are done in `sleep_forever`. There's a
    loop that checks `th->status` in `sleep_forever`. When the main thread got woken up from
    sigchld it saw the changed `th->status` and continued to run the main thread instead of
    going back to sleep.

    The following script shows the error. It was returning instead of sleeping forever.

    ```ruby
    t = Thread.new do
      sleep 0.3
      `echo hello`  # Spawns subprocess
      puts "Subprocess exited"
    end

    puts "Main thread sleeping..."
    result = sleep  # Should block forever
    puts "sleep returned: #{result.inspect}"
    ```

    Fixes [Bug #21812]

  Notes:
    Merged-By: luke-gru <luke.gru@gmail.com>

commit c65a5548a80f955ad71decabf0f29183fef8d6d7
  Author:     Brandon Zylstra <9854+brandonzylstra@users.noreply.github.com>
  AuthorDate: 2026-01-05 12:26:21 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-01-05 17:11:06 +0900

    Update box.md

    "Code" (when used to refer to what we create in Ruby or any other programming language) is an abstract non-count noun, so it cannot be pluralized.  ("Codes" would be used when referring to specific countable things like PIN codes, which is a different use of the word "code".)

    This is somewhat confusing because English allows converting count nouns into non-count nouns, and converting non-count nouns into count nouns, and because many words have both forms.

    For an example of converting a non-count noun to a count noun, "water" is normally a non-count noun:

    > The world is covered with water.

    but people who work in restaurants often use the word as a count noun, as a shorthand for "cup of water":

    > I need 7 waters on the big table by the window.

    For an example of the opposite conversion, "worm" is normally a count noun:

    > There are lots of worms in the puddle.

    but someone might use it as a non-count noun when talking about non-distinct remains of worms:

    > You have worm all over the bottom of your shoe!

    So although a given noun can be flexible enough to be used in either way—even when it is unconventional—there is a definite change of meaning when using a word as a count noun or a non-count noun.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15799

commit 32674606102d21ec56635ff4b496544dd01775a6
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-05 16:16:29 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-01-05 16:47:14 +0900

    Update bindgen

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15800

commit 28b0e5125f1dd62b202a28aaa1e79190dad7eb02
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-05 15:47:40 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-01-05 16:47:14 +0900

    [Bug #18433] Remove unneeded declaration

    This `rb_cObject` declaration was only for `rb_cData()` that was
    removed at 7c738ce5e649b82bdc1305d5c347e81886ee759a.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15800

commit d3ecd9d2ab4478ca29db20c1ab6c425a24bee83d
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-01-05 15:36:06 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-05 16:22:11 +0900

    [ruby/rubygems] Lock minitest ~> 5.1

    https://github.com/ruby/rubygems/commit/7b9bfb4e18

commit b87b6edf2e557db7b2787d7a213a6aa03f93a146
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-01-05 14:15:46 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-05 16:22:10 +0900

    [ruby/rubygems] Update vendored net-http to 0.9.1

    https://github.com/ruby/rubygems/commit/12072e8d23

commit 8c8561adbc3d8761ef70983c01d6ade0004d0fb8
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-01-05 14:15:05 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-05 16:22:10 +0900

    [ruby/rubygems] Update vendored connection_pool to 2.5.5

    https://github.com/ruby/rubygems/commit/4c1eb2b274

commit 05f791bf41d9a14cb4db2d529413928db539affc
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-01-05 13:59:47 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-05 16:22:09 +0900

    [ruby/rubygems] rake update

    https://github.com/ruby/rubygems/commit/aa7632161e

commit 99bd18b5b8071659ac9f035eea173b445326f8ad
  Author:     Tsutomu Katsube <tsuto.katsube@gmail.com>
  AuthorDate: 2026-01-02 20:10:16 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-01-05 13:48:29 +0900

    Unskip RBS test on Windows for NoMemoryError workaround

    test-unit 3.7.7 has been fixed this problem.

    See also:
    https://github.com/test-unit/test-unit/releases/tag/3.7.7

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15786

commit e6762d23cb14411ec026b324c5c15c339158ddc4
  Author:     Shugo Maeda <shugo@ruby-lang.org>
  AuthorDate: 2026-01-05 11:49:48 +0900
  Commit:     Shugo Maeda <shugo@ruby-lang.org>
  CommitDate: 2026-01-05 11:49:48 +0900

    [DOC] Fix a typo and trim trailing whitespace per .editorconfig

commit 01e8b38f601c4866738a76df4361f2b4df0fc300
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-01-05 10:55:47 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2026-01-05 11:32:42 +0900

    Use RUBY_VERSION in specs instead of hardcoded 'Ruby 4.0.0' to make tests version-independent

commit 699813b65f8504c6bb787ac3c8b7fe6419e76cdf
  Author:     Jeremy Evans <code@jeremyevans.net>
  AuthorDate: 2026-01-04 03:12:19 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-05 09:58:13 +0900

    [ruby/rubygems] Remove date require from rebuild command

    As far as I can see, this isn't used.

    https://github.com/ruby/rubygems/commit/67c97e7180

commit 7d5c0247eb2fb67bb0ac2fd6060bf2996c8c4c46
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-04 23:33:39 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-05 02:26:06 +0900

    Dump fstr and frozen status in rb_raw_obj_info_buitin_type

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15797

commit 6eadc01cdaa70895d464843de5b6c4d35cab2e27
  Author:     Benoit Daloze <eregontp@gmail.com>
  AuthorDate: 2026-01-05 02:13:08 +0900
  Commit:     Benoit Daloze <eregontp@gmail.com>
  CommitDate: 2026-01-05 02:13:08 +0900

    Fix condition for UTF-8 default in magic_comment_spec.rb

commit 9888a3e8bda75a417f15e3936d5d9a16051c9256
  Author:     Benoit Daloze <eregontp@gmail.com>
  AuthorDate: 2026-01-05 02:10:42 +0900
  Commit:     Benoit Daloze <eregontp@gmail.com>
  CommitDate: 2026-01-05 02:10:42 +0900

    UNIXSocket#recvfrom only returns the path on Linux

    * Notably it does not on BSD, macOS and Windows.

commit 2bf954305323857418b917f4a987c300245ee0eb
  Author:     Benoit Daloze <eregontp@gmail.com>
  AuthorDate: 2026-01-05 00:04:02 +0900
  Commit:     Benoit Daloze <eregontp@gmail.com>
  CommitDate: 2026-01-05 00:04:02 +0900

    Remove assertion which does not hold

    * https://github.com/ruby/ruby/actions/runs/20694508956/job/59407571754
      1)
      UNIXSocket.pair emulates unnamed sockets with a temporary file with a path FAILED
      Expected "C:\\a\\_temp\\102424668889-2384.($)".match? /\\AppData\\Local\\Temp\\\d+-\d+\.\(\$\)\z/
      to be truthy but was false

commit e79f8974b55de2ef8135c3fad03860e8ad36dfb0
  Author:     Benoit Daloze <eregontp@gmail.com>
  AuthorDate: 2026-01-04 23:39:31 +0900
  Commit:     Benoit Daloze <eregontp@gmail.com>
  CommitDate: 2026-01-04 23:39:31 +0900

    Get better error if UNIXSocket.socketpair spec fails

commit 29e7973e055cc82622cdd4511d78d74ad784c80e
  Author:     Benoit Daloze <eregontp@gmail.com>
  AuthorDate: 2026-01-04 23:36:02 +0900
  Commit:     Benoit Daloze <eregontp@gmail.com>
  CommitDate: 2026-01-04 23:36:02 +0900

    Update to ruby/spec@94dbd55

commit 6939f03f4cec6c50cbc1d214a38cdcdcf1d3f705
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2025-12-31 06:03:35 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-04 23:02:40 +0900

    Add field handle_weak_references to TypedData

    This commit adds a field handle_weak_references to rb_data_type_struct for
    the callback when handling weak references. This avoids TypedData objects
    from needing to expose their rb_data_type_struct and weak references function.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15773

commit 1b3382cbab83f0dbf21b0d3683d4ab5335f6c342
  Author:     Benoit Daloze <eregontp@gmail.com>
  AuthorDate: 2026-01-04 22:53:24 +0900
  Commit:     Benoit Daloze <eregontp@gmail.com>
  CommitDate: 2026-01-04 22:53:24 +0900

    Update to ruby/spec@f54296d

commit 18672b392b7164c783381979ad34d550955d0416
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-04 16:00:23 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-04 16:01:27 +0900

    [DOC] Add `base-url` to ChangeLog by default

    It is used to expand repository references to URL.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15796

commit 912cf819b96a7ada89db044add26e94746f3ebb5
  Author:     Augustin Gottlieb <33221555+aguspe@users.noreply.github.com>
  AuthorDate: 2026-01-03 01:54:42 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-04 15:56:57 +0900

    [ruby/openssl] Improve Argument Error Message in EC:Group.new

    Before, passing the wrong number of arguments (e.g., 2) to
    OpenSSL::PKey::EC::Group.new raised a generic "wrong number of
    arguments"
    error.

    This change updates it to show the actual argument count and the
    expected
    options (1 or 4), making debugging easier for the user.

    Example:
    ArgumentError: wrong number of arguments (given 2, expected 1 or 4)

    I hope it helps!

    https://github.com/ruby/openssl/commit/783c99e6c7

commit ca0fece56a3ddfa6b9ec9cf1652e414929040614
  Author:     Koichi ITO <koic.ito@gmail.com>
  AuthorDate: 2025-12-21 04:47:55 +0900
  Commit:     Satoshi Tagomori <tagomoris@gmail.com>
  CommitDate: 2026-01-04 12:53:42 +0900

    [DOC] Tweak an example in language/box.md

    Although the example code comments indicate that it returns `false`,
    a non-matching result for `=~` is actually `nil`.

    ```ruby
    Foo.foo.blank? #=> false
    "foo".blank?   #=> false
    ```

    https://github.com/ruby/ruby/blob/v4.0.0-preview3/doc/language/box.md?plain=1#L115-L122

    This PR replaces `=~` with `match?` so that it returns the expected `false`.
    Since this makes the result a boolean, it also aligns with the expected behavior of
    a predicate method name like `blank?`.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15671

commit d8d41d7441aabae5e5948f89cd759bbdc3bf5532
  Author:     Koichi ITO <koic.ito@gmail.com>
  AuthorDate: 2025-12-21 23:14:22 +0900
  Commit:     Satoshi Tagomori <tagomoris@gmail.com>
  CommitDate: 2026-01-04 12:52:40 +0900

    [DOC] Use `Ruby::Box#require_relative` in box.md examples

    Based on the example, it appears that `foo.rb` and `main.rb` are expected to be in the same directory.
    Since Ruby 1.9, the current directory is not included in `$LOAD_PATH` by default.
    As a result, running `box.require('foo')` as shown in the sample code raises a `LoadError`:

    ```console
    main.rb:2:in `Ruby::Box#require': cannot load such file -- foo (LoadError)
            from main.rb:2:in `<main>'
    ```

    To avoid this, it seems simplest to show either `box.require('./foo')` or `box.require_relative('foo')`.
    In this PR, `box.require('foo')` is replaced with `box.require_relative('foo')` to make the intention of
    using a relative path explicit.

    This should reduce the chance that users trying Ruby Box will run into an unexpected error.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15687

commit 5064af7ed120b1d14ad5020ea39a4a6ff2a4a4ec
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-03 23:39:54 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-01-04 10:26:54 +0900

    [ruby/mmtk] Process obj_free candidates in parallel

    Redos commit 544770d which seems to have accidentally been undone in b27d935.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15793

commit a0c483fcfb9b8a2009cf21a8bce5fa2ad54d4fda
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-03 23:51:00 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-04 00:43:24 +0900

    Also output GC thread backtrace in rb_mmtk_gc_thread_bug

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15794

commit 5b87294d2fc84b7039a703cbbd02c7cf50c5b560
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-03 23:27:15 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-04 00:43:24 +0900

    Add rb_gc_print_backtrace

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15794

commit 65f9c4a06a17368c452bcda7f0e6325ea1d51eba
  Author:     Shannon Skipper <shannonskipper@gmail.com>
  AuthorDate: 2026-01-02 11:15:11 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-01-03 18:12:44 +0900

    Drop memberless Data/Struct#inspect trailing space

    Anonymous memberless Structs and Data were returning `#<struct >` and
    `#<data >` with a trailing space. Now they return `#<struct>` and
    `#<data>` to match attrless class behavior and look a bit more compact.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15784

commit b6463d59e7c52dd4493796ff1cbd10b5e25caaca
  Author:     Scott Myron <samyron@gmail.com>
  AuthorDate: 2026-01-03 11:47:59 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-03 17:30:20 +0900

    [ruby/json] Directly write to the output buffer when converting UTF32 to UTF8.

    https://github.com/ruby/json/commit/a51317c949

commit d7a6ff8224519005d2deeb3f4e98689a8a0835ad
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-03 15:03:57 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-03 15:03:57 +0900

    [Bug #21819] Data objects without members should also be frozen

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15792

commit a8a989b6f651b878c690f5fd0a728e19a54dd2b9
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-03 12:28:00 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-03 13:28:58 +0900

    Test net-imap with ruby/net-imap#593

    Delete test/net/imap/test_data_lite.rb, because the target of this
    test file has been deleted by [ruby/net-imap#543].

    [ruby/net-imap#543]: https://github.com/ruby/net-imap/pull/543

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15791

commit 2f4119eaea5416ae69c9256a72ab98237e221b91
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-03 06:37:25 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-03 09:02:22 +0900

    [ruby/mmtk] Use rb_mmtk_gc_thread_bug for rb_mmtk_call_object_closure

    https://github.com/ruby/mmtk/commit/308936296a

commit 60d9b10dab9c9e92518f5579e6d36006c0dd359d
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-03 06:36:05 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-03 09:02:22 +0900

    [ruby/mmtk] Propagate crash of GC thread to mutator thread

    This allows the mutator thread to dump its backtrace when a GC thread crashes.

    https://github.com/ruby/mmtk/commit/40ff9ffee7

commit 16feb46fa27fdbdec4f7a0914787300b77fa232a
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-01-02 20:33:34 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-01-03 08:07:44 +0900

    Convert Queue and SizedQueue to rb builtin

    A large part of `thread_sync.c` was migrated already, might as well
    go all the way. It also allow to remove a bunch of Rdoc commands.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15789

commit e7695ba3d9f0e8ee17025af4d42ecaf2dad47f29
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-03 01:41:24 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-03 05:42:11 +0900

    [ruby/mmtk] Check for T_NONE during marking

    https://github.com/ruby/mmtk/commit/c3e338bb25

commit 31fb970c18734455c2a2e6eb93bdc67db1edb88c
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-01 23:04:15 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-03 02:58:49 +0900

    [ruby/mmtk] Assert target is not pinned during normal tracing

    https://github.com/ruby/mmtk/commit/58210c88ed

commit c47a8052f6ecd3fb981416d6bfd918590572bb37
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-01-02 18:47:55 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-01-03 00:59:00 +0900

    Add a test case for complex argument forward reference

    Using `eval` it's possible to reference a later argument, and
    this requires careful initialization of the stack.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15777

commit 1596853428393136ee9964ad4c11b0120ed648d1
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2025-12-31 22:52:16 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-01-03 00:59:00 +0900

    Skip initializing optional arguments to `nil`

    They are optional because they have a default value, so I don't
    understand why we'd need to initialize them to nil.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15777

commit b9819ad06c883e6ea4f9e903c5bab06f175efb62
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-02 06:36:17 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-02 22:54:56 +0900

    Register a dupped identity hash as pinning

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15781

commit 177949c8b28587a0e0c0709d726cef846bdc51aa
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2026-01-02 20:57:00 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-01-02 21:51:36 +0900

    Speedup Queue initialization

    Rather than to push items one by one we can directly memcpy.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15787

commit 0ec5678cd55aa0f2d900d028497bb444c4ce4b7b
  Author:     git[bot] <svn-admin@ruby-lang.org>
  AuthorDate: 2026-01-02 15:55:45 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-02 15:55:45 +0900

    Update bundled gems list as of 2026-01-02

commit dd34d6273a08b821d049fd653db43b032674c7d8
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-02 09:26:54 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-02 13:13:40 +0900

    Extract git version only

    The version message may contain other info such as the distribution.
    e.g.:
    ```console
    $ /usr/bin/git --version
    git version 2.50.1 (Apple Git-155)
    ```

commit 0e9d69893007b1a17372fbc2fbcc7f0ee92be5fb
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-07-08 21:12:32 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2026-01-02 11:40:27 +0900

    Prefer dedicated assertions

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15783

commit acda63debc1e7d056d2fe934caa05a930f8f3f2d
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-01 05:02:25 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-01 23:03:49 +0900

    [ruby/mmtk] Format imports to be each on a new line

    https://github.com/ruby/mmtk/commit/42adba630e

commit 26a5bcd6de806fa460cafd0906651a66cac33e7e
  Author:     Benoit Daloze <eregontp@gmail.com>
  AuthorDate: 2026-01-01 02:29:01 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2026-01-01 21:30:20 +0900

    [ruby/prism] Fix spacing in the generated #each_child_node

    https://github.com/ruby/prism/commit/91f60cb736

commit 8ce61f90ba4aea3d52e92e258c3803b8b885726e
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2025-12-31 21:54:00 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2026-01-01 18:20:08 +0900

    Thread::Queue use a ring buffer

    Thread::Queue spends a significant amount of time in array functions,
    checking for invariants we know aren't a problem, and whether the backing
    array need to reordered.

    By using a ring buffer we can remove a lot of overhead (~23% faster).

    ```
    $ hyperfine './miniruby --yjit /tmp/q.rb' './miniruby-qrb --yjit /tmp/q.rb'
    Benchmark 1: ./miniruby --yjit /tmp/q.rb
      Time (mean ± σ):      1.050 s ±  0.191 s    [User: 0.988 s, System: 0.004 s]
      Range (min … max):    0.984 s …  1.595 s    10 runs

    Benchmark 2: ./miniruby-qrb --yjit /tmp/q.rb
      Time (mean ± σ):     844.2 ms ±   3.1 ms    [User: 840.4 ms, System: 2.8 ms]
      Range (min … max):   838.6 ms … 848.9 ms    10 runs

    Summary
      ./miniruby-qrb --yjit /tmp/q.rb ran
        1.24 ± 0.23 times faster than ./miniruby --yjit /tmp/q.rb
    ```

    ```
    q = Queue.new([1, 2, 3, 4, 5, 6, 7, 8])
    i = 2_000_000
    while i > 0
      i -= 1
      q.push(q.pop)
      q.push(q.pop)
      q.push(q.pop)
      q.push(q.pop)
      q.push(q.pop)
      q.push(q.pop)
      q.push(q.pop)
      q.push(q.pop)
      q.push(q.pop)
      q.push(q.pop)
    end
    ```

commit 41292562141118147c6a4eff5552097b0ecc79f0
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-01 05:41:47 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-01 11:57:01 +0900

    Use STR_SET_SHARED in str_duplicate_setup_heap

    str_duplicate_setup_heap is missing a call to rb_gc_register_pinning_obj
    that STR_SET_SHARED correctly calls.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15779

commit ea05c23ee8f258463156c3e3a276e2e16d777238
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-01-01 09:24:32 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2026-01-01 10:00:33 +0900

    Extract `RBIMPL_TYPEDDATA_PRECONDITION`

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15780

commit 7cf6cc83f3d34dbff6a30457fb008d87106f5e0c
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2026-01-01 01:36:19 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2026-01-01 02:47:43 +0900

    Register imemo_ment as a pinning object

    It sometimes pins itself when it is in the overloaded_cme table.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15778

commit b27d9353a73179f1f8e582d651382b1b4404cab2
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-31 23:56:58 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-31 23:56:58 +0900

    Use `is_obj_encoding` instead of `is_data_encoding`

    The argument to `is_data_encoding` is assumed to be `T_DATA`.

commit dbfedeb3a30be711fa17bf6ab9e1f4a83338f7d9
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2025-12-31 04:03:40 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2025-12-31 23:22:38 +0900

    [ruby/mmtk] Split ProcessObjFreeCandidates to parallel and non-parallel

    This makes it easier to visualize in profilers which one is non-parallel.

    https://github.com/ruby/mmtk/commit/ba68b2ef3b

commit 544770d566ae6b9cbdb79b24a555f10f60b3e5e3
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2025-12-31 03:42:21 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2025-12-31 23:22:38 +0900

    [ruby/mmtk] Process obj_free candidates in parallel

    This commit allows objects that are safe to be freed in parallel to do so.
    A decrease in object freeing time can be seen in profiles.

    The benchmarks don't show much difference.

    Before:

    --------------  --------------------  ----------  ---------
    bench           sequential free (ms)  stddev (%)  RSS (MiB)
    activerecord    242.3                 7.4         84.3
    chunky-png      439.1                 0.6         75.6
    erubi-rails     1221.2                4.2         132.7
    hexapdf         1544.8                1.8         429.1
    liquid-c        42.7                  7.4         48.5
    liquid-compile  41.4                  8.3         52.2
    liquid-render   100.6                 3.0         56.8
    mail            108.9                 2.1         65.1
    psych-load      1536.9                0.6         43.4
    railsbench      1633.5                2.6         146.2
    rubocop         126.5                 15.8        142.1
    ruby-lsp        129.6                 9.7         112.2
    sequel          47.9                  6.5         44.6
    shipit          1152.0                2.7         315.2
    --------------  --------------------  ----------  ---------

    After:

    --------------  ------------------  ----------  ---------
    bench           parallel free (ms)  stddev (%)  RSS (MiB)
    activerecord    235.1               5.5         87.4
    chunky-png      440.8               0.8         68.1
    erubi-rails     1105.3              0.8         128.0
    hexapdf         1578.3              4.1         405.1
    liquid-c        42.6                7.1         48.4
    liquid-compile  41.5                8.1         52.1
    liquid-render   101.2               2.8         53.3
    mail            109.7               2.7         64.8
    psych-load      1567.7              1.1         44.4
    railsbench      1644.9              1.9         150.9
    rubocop         125.6               15.4        148.5
    ruby-lsp        127.9               5.8         104.6
    sequel          48.2                6.1         44.1
    shipit          1215.3              4.7         320.5
    --------------  ------------------  ----------  ---------

    https://github.com/ruby/mmtk/commit/4f0b5fd2eb

commit 99249cc582177f05baf2a9c45e3fa21b891c70e9
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-31 21:40:16 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2025-12-31 21:44:18 +0900

    [ruby/json] Fix non-portable code

    A plain `char` may be `signed` or `unsigned` depending on the
    implementation.  Also, bitwise ORing of `signed` values ​​is not
    guaranteed to be `signed`.  To ensure portability, should logical-OR
    each comparison, but casting to `signed char` is usually sufficient.

    https://github.com/ruby/json/commit/8ad744c532

commit c97f5d591b17b8194b8ddfccc6fb9d94b66c6bce
  Author:     Scott Myron <samyron@gmail.com>
  AuthorDate: 2025-12-31 12:32:03 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2025-12-31 19:07:33 +0900

    [ruby/json] Simplify unescape_unicode

    https://github.com/ruby/json/commit/976ba36629

    Co-Authored-By: Jean Boussier <jean.boussier@gmail.com>

commit 61d45c857b6f92ef0df853cdeba02aefd0e6ffc4
  Author:     Scott Myron <samyron@gmail.com>
  AuthorDate: 2025-12-31 11:48:18 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2025-12-31 18:54:25 +0900

    [ruby/json] Keep track of the the number of additional backslashes to avoid an extra memchr searching the remaining characters when no more backslashes exist.

    https://github.com/ruby/json/commit/d21d9362fa

commit 094145fbc11afc444c8cd641e0715172f1c8a3db
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-31 17:54:42 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-31 17:54:42 +0900

    [DOC] Move typed-data related macros

    The flags for `rb_data_type_t::flags` are public constants for
    defining `rb_data_type_t`.  The embedded data flag and mask are
    internal implementation detail.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15775

commit d95bebe06c076cdf6951b81665e2b2e779937123
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-31 11:29:29 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-31 11:29:29 +0900

    Make `RTYPEDDATA_EMBEDDABLE_P` internal-use only

    It should not be exposed because it is so implementation specific that
    it is only used in gc.c even within the entire Ruby source tree.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15774

commit c352808fa9eb650ce8c1b268a348ad553df55caa
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-31 11:27:46 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-31 11:27:46 +0900

    Introduce typed-data embeddable predicate macros

    The combination of `&` and `&&` is confusing.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15774

commit 9d37155cfc74258374134cbcc64f796b01f807d5
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2025-12-31 03:01:06 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2025-12-31 03:02:00 +0900

    [ruby/mmtk] Use MMTK_HEAP_COUNT for SIZE_POOL_COUNT

    https://github.com/ruby/mmtk/commit/290a2aec4e

commit d40e056cc8cb5c21fb3f7c25bf9463548dd14873
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-31 02:24:21 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-31 02:24:21 +0900

    Skip the hang-up test on Windows

commit 3086d58263b36d364a1187cd7678e6020806e6f3
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-31 01:34:43 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-31 02:24:03 +0900

    Run also test-tool on mingw

commit b7bf8c20b045c4dce5daa894d95d48c0983b9481
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2025-12-30 23:48:20 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2025-12-31 00:59:21 +0900

    Add RVALUE_OLD_AGE to GC::INTERNAL_CONSTANTS for MMTk

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15772

commit f2833e358cf58c3e69038cab80e87e40b7694541
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2025-12-30 23:46:42 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2025-12-31 00:59:21 +0900

    Fix generational GC for weak references

    Fixes issue pointed out in https://bugs.ruby-lang.org/issues/21084#note-7.
    The following script crashes:

        wmap = ObjectSpace::WeakMap.new

        GC.disable # only manual GCs
        GC.start
        GC.start

        retain = []
        50.times do
          k = Object.new
          wmap[k] = true
          retain << k
        end

        GC.start # wmap promoted, other objects still young

        retain.clear

        GC.start(full_mark: false)

        wmap.keys.each(&:itself) # call method on keys to cause crash

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15772

commit c05e10605e46106397fb4af4ea0f322c4d6d68ea
  Author:     Benoit Daloze <eregontp@gmail.com>
  AuthorDate: 2025-12-30 23:30:31 +0900
  Commit:     Benoit Daloze <eregontp@gmail.com>
  CommitDate: 2025-12-31 00:02:39 +0900

    Exclude rbs tests which need updates for {Method,UnboundMethod,Proc}#source_location

    * See https://github.com/ruby/ruby/pull/15580

commit a7fec4d6619384b0b0277e751a56f7b91e5d8d5b
  Author:     Benoit Daloze <eregontp@gmail.com>
  AuthorDate: 2025-12-30 20:47:01 +0900
  Commit:     Benoit Daloze <eregontp@gmail.com>
  CommitDate: 2025-12-31 00:02:39 +0900

    Update version guards in ruby/spec

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15580

commit c970d2941d56a862bb9bb3b808cb588c2982f436
  Author:     Benoit Daloze <eregontp@gmail.com>
  AuthorDate: 2025-12-16 05:46:17 +0900
  Commit:     Benoit Daloze <eregontp@gmail.com>
  CommitDate: 2025-12-31 00:02:39 +0900

    [Bug #21784] Fix the Proc#source_location start_column for stabby lambdas

    * Consistent with plain `blocks` and `for` blocks and methods
      where the source_location covers their entire definition.
    * Matches the documentation which mentions
      "where the definition starts/ends".
    * Partially reverts d357d50f0a74409446f4cccec78593373f5adf2f
      which was a workaround to be compatible with parse.y.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15580

commit cd66d15858a06406d1de854f3e9690d3557a9864
  Author:     Benoit Daloze <eregontp@gmail.com>
  AuthorDate: 2025-12-16 17:52:31 +0900
  Commit:     Benoit Daloze <eregontp@gmail.com>
  CommitDate: 2025-12-31 00:02:39 +0900

    [Bug #21783] Fix documentation of {Method,UnboundMethod,Proc}#source_location

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15580

commit d82fc3360d7cfa7e1e1a4dddb668b4c38808538a
  Author:     Benoit Daloze <eregontp@gmail.com>
  AuthorDate: 2025-12-16 17:48:41 +0900
  Commit:     Benoit Daloze <eregontp@gmail.com>
  CommitDate: 2025-12-31 00:02:39 +0900

    Reapply "[Feature #6012] Extend `source_location` for end position

    * This reverts commit 065c48cdf11a1c4cece84db44ed8624d294f8fd5.
    * This functionality is very valuable and has already taken 14 years
      to agree on the API.
    * Let's just document it's byte columns (in the next commit).
    * See https://bugs.ruby-lang.org/issues/21783#note-9

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15580

commit 19e539c9ee1701b34189fa0c1feb942adeb0e326
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-30 23:00:18 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-30 23:00:18 +0900

    [Bug #21814] Fix negative bignum modulo

    If modulo is zero, do not  apply bias even if the divisor is zero.
    `BIGNUM_POSITIVE_P` is true even on bignum zero.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15771

commit 966dbba8db970f13065a35d893662a981d0abae5
  Author:     Satoshi Tagomori <s-tagomori@sakura.ad.jp>
  AuthorDate: 2025-12-30 22:01:54 +0900
  Commit:     Satoshi Tagomori <tagomoris@gmail.com>
  CommitDate: 2025-12-30 22:31:51 +0900

    Box: skip checking the current box is the root box

    Because checking the current box is not a cheap process.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15769

commit 27d6c966583c65c9ffd02f931d9c4efe8d7232e0
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-30 17:58:44 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-30 18:33:20 +0900

    Add 4.0 to the spec_guards workflow

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15768

commit 3f616d5701592360cf07dae885aa706596ad07fd
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-30 18:33:03 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-30 18:33:03 +0900

    Update ruby/setup-ruby action to v1.276.0

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15768

commit d5af8d785888f3af5efb844be5948df71d777b22
  Author:     Satoshi Tagomori <s-tagomori@sakura.ad.jp>
  AuthorDate: 2025-12-30 14:46:19 +0900
  Commit:     Satoshi Tagomori <tagomoris@gmail.com>
  CommitDate: 2025-12-30 17:06:34 +0900

    Box: allocate classes as boxable when it happens in the root box

    Without this change, classes (including iclass) are allocated
    as un-boxable classes after initializing user boxes (after starting
    script evaluation). Under this situation, iclasses are created as
    un-boxabled class when core modules are included by a class in the
    root box, then it causes problems because it's in the root box but
    it can't have multiple classexts.

    This change makes it possible to allocate boxable classes even after
    initializing user boxes. Classes create in the root box will be
    boxable, and those can have 2 or more classexts.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15767

commit 65634d8df57ea1636efffb5f040fa31c156d307f
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2025-12-23 22:41:09 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2025-12-29 23:14:00 +0900

    [ruby/prism] Optimize ruby visitor

    `compact_child_nodes` allocates an array. We can skip that step by simply yielding the nodes.

    Benchmark for visiting the rails codebase:

    ```rb
    require "prism"
    require "benchmark/ips"

    files = Dir.glob("../rails/**/*.rb")
    results = files.map { Prism.parse_file(it) }
    visitor = Prism::Visitor.new

    Benchmark.ips do |x|
      x.config(warmup: 3, time: 10)

      x.report do
        results.each do
          visitor.visit(it.value)
        end
      end
    end

    RubyVM::YJIT.enable

    Benchmark.ips do |x|
      x.config(warmup: 3, time: 10)

      x.report do
        results.each do
          visitor.visit(it.value)
        end
      end
    end
    ```

    Before:
    ```
    ruby 3.4.8 (2025-12-17 revision https://github.com/ruby/prism/commit/995b59f666) +PRISM [x86_64-linux]
    Warming up --------------------------------------
                             1.000 i/100ms
    Calculating -------------------------------------
                              2.691 (± 0.0%) i/s  (371.55 ms/i) -     27.000 in  10.089422s
    ruby 3.4.8 (2025-12-17 revision https://github.com/ruby/prism/commit/995b59f666) +YJIT +PRISM [x86_64-linux]
    Warming up --------------------------------------
                             1.000 i/100ms
    Calculating -------------------------------------
                              7.278 (±13.7%) i/s  (137.39 ms/i) -     70.000 in  10.071568s
    ```
    After:
    ```
    ruby 3.4.8 (2025-12-17 revision https://github.com/ruby/prism/commit/995b59f666) +PRISM [x86_64-linux]
    Warming up --------------------------------------
                             1.000 i/100ms
    Calculating -------------------------------------
                              3.429 (± 0.0%) i/s  (291.65 ms/i) -     35.000 in  10.208580s
    ruby 3.4.8 (2025-12-17 revision https://github.com/ruby/prism/commit/995b59f666) +YJIT +PRISM [x86_64-linux]
    Warming up --------------------------------------
                             1.000 i/100ms
    Calculating -------------------------------------
                             16.815 (± 0.0%) i/s   (59.47 ms/i) -    169.000 in  10.054668s
    ```

    ~21% faster on the interpreter, ~56% with YJIT

    https://github.com/ruby/prism/commit/bf631750cf

commit 14fbcf0e6ed37c4a0d15fd3f016778465f774f2c
  Author:     Thomas Marshall <thomas@thomasmarshall.com>
  AuthorDate: 2025-12-29 21:55:18 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2025-12-29 23:12:20 +0900

    [ruby/prism] Report missing end errors at opening token

    This commit adds an `expect1_opening` function that expects a token and
    attaches the error to the opening token location rather than the current
    position. This is useful for errors about missing closing tokens, where
    we want to point to the line with the opening token rather than the end
    of the file.

    For example:

    ```ruby
    def foo
    def bar
    def baz
           ^ expected an `end` to close the `def` statement
           ^ expected an `end` to close the `def` statement
           ^ expected an `end` to close the `def` statement
    ```

    This would previously produce three identical errors at the end of the
    file. After this commit, they would be reported at the opening token
    location:

    ```ruby
    def foo
    ^~~ expected an `end` to close the `def` statement
    def bar
    ^~~ expected an `end` to close the `def` statement
    def baz
    ^~~ expected an `end` to close the `def` statement
    ```

    I considered using the end of the line where the opening token is
    located, but in some cases that would be less useful than the opening
    token location itself. For example:

    ```ruby
    def foo def bar def baz
    ```

    Here the end of the line where the opening token is located would be the
    same for each of the unclosed `def` nodes.

    https://github.com/ruby/prism/commit/2d7829f060

commit 8afd4fade69b3a53a5e309499595f7b192f87726
  Author:     Thomas Marshall <thomas@thomasmarshall.com>
  AuthorDate: 2025-12-29 21:54:28 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2025-12-29 23:12:20 +0900

    [ruby/prism] Add unterminated construct tests

    https://github.com/ruby/prism/commit/166764f794

commit 782d959f674b5088377191a4b34ed2f5bbb7c022
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2025-12-27 01:55:42 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2025-12-29 23:03:31 +0900

    Implement moving Immix in MMTk

    This commit implements moving Immix in MMTk, which allows objects to move
    in the GC.

    The performance of this implementation is not yet amazing. It is very
    similar to non-moving Immix in many of them and slightly slower in others.
    The benchmark results is shown below.

        --------------  -----------------  ----------  ---------
        bench           Moving Immix (ms)  stddev (%)  RSS (MiB)
        activerecord    241.9              0.5         86.6
        chunky-png      447.8              0.8         74.9
        erubi-rails     1183.9             0.8         136.1
        hexapdf         1607.9             2.6         402.3
        liquid-c        45.4               6.7         44.9
        liquid-compile  44.1               9.3         53.0
        liquid-render   105.4              4.5         55.9
        lobsters        650.1              9.7         418.4
        mail            115.4              2.1         64.4
        psych-load      1656.8             0.8         43.6
        railsbench      1653.5             1.3         149.8
        rubocop         127.0              15.6        142.1
        ruby-lsp        130.7              10.5        99.4
        sequel          52.8               7.2         45.6
        shipit          1187.0             3.9         311.0
        --------------  -----------------  ----------  ---------

        --------------  ---------------------  ----------  ---------
        bench           Non-moving Immix (ms)  stddev (%)  RSS (MiB)
        activerecord    218.9                  2.7         86.1
        chunky-png      464.6                  0.8         66.7
        erubi-rails     1119.0                 4.3         132.7
        hexapdf         1539.8                 1.8         425.2
        liquid-c        40.6                   6.9         45.2
        liquid-compile  40.6                   8.1         52.9
        liquid-render   99.3                   2.3         48.3
        mail            107.4                  5.3         65.4
        psych-load      1535.6                 1.0         39.5
        railsbench      1565.6                 1.1         149.6
        rubocop         122.5                  14.3        146.7
        ruby-lsp        128.4                  10.7        106.4
        sequel          44.1                   4.0         45.7
        shipit          1154.5                 2.7         358.5
        --------------  ---------------------  ----------  ---------

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15744

commit 7902ae34d01a142fcbc0f669d93b1af5664ece42
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2025-12-25 10:38:22 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2025-12-29 23:03:31 +0900

    Add rb_gc_move_obj_during_marking

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15744

commit 01cd9c9fade0c1c6f13f11c86e86c0caeefd38bc
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2025-12-24 01:45:16 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2025-12-29 23:03:31 +0900

    Add rb_gc_register_pinning_obj

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15744

commit 56147001ec439a7d6b887402c8a66d3ee625e598
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2025-12-23 09:38:47 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2025-12-29 23:03:31 +0900

    Move MEMO_NEW to imemo.c and rename to rb_imemo_memo_new

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15744

commit da89f7f58d6e0a662dfdeaf7df7aea9e3e7c02b5
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-29 20:26:00 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-29 20:26:00 +0900

    Prefer `ALLOCV` over `ALLOCA` for unknown size

    `ALLOCA` with too large size may result in stack overflow.
    Incidentally, this suppresses the GCC false maybe-uninitialized
    warning in `product_each`.

    Also shrink `struct product_state` when `sizeof(int) < sizeof(VALUE)`.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15765

commit 26088dcd4a1f1784ae24387ce6a98fcad48749c5
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-29 18:41:58 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-29 18:41:58 +0900

    [DOC] State that `rb_unexpected_type` is private

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15764

commit 56a6a21f28bd2b47bc96c58ae276b272933e7f62
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-29 18:19:28 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-29 18:40:48 +0900

    Return `NULL` in a `void *` function

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15764

commit 0f64da9672d88921439f6fdb306d16fece9b9c90
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-29 18:14:28 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-29 18:40:47 +0900

    Make `rb_check_typeddata` and `rbimpl_check_typeddata` identical

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15764

commit 72627d85e337e5d8c7fa5738dc4ec7f253f0738e
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-29 12:52:29 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-29 18:20:36 +0900

    Declare `rb_data_typed_t` parameters and return values as  nonull

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15764

commit 4e0bb58a0a374b40b7691e7b7aa88e759a0fc9f2
  Author:     Luke Jahnke <luke.jahnke@gmail.com>
  AuthorDate: 2025-12-29 14:51:17 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2025-12-29 17:21:33 +0900

    fix underflow

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15763

commit 38701a4de83c72d855ce79f898526d5f079c96c5
  Author:     Jeremy Evans <code@jeremyevans.net>
  AuthorDate: 2025-12-29 11:48:45 +0900
  Commit:     Jeremy Evans <code@jeremyevans.net>
  CommitDate: 2025-12-29 14:54:41 +0900

    Remove deprecated support for to_set taking arguments

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15761

commit cb01b9023ec2007c03bddc992416c33f2c59a0e1
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-29 03:15:03 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-29 10:33:31 +0900

    rtypeddata.h: Add missing `RBIMPL_CAST`

    In public headers, casts should be enclosed in `RBIMPL_CAST` for
    compilation in C++.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15760

commit 9e78353c0f840bf4aa7cceb4d1676f4d090d0096
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2025-12-29 05:43:36 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2025-12-29 06:25:49 +0900

    Fix maybe uninitialized warnings in random.c

    Fixes the following compiler warnings:

        random.c: In function `random_init`:
        random.c:416:38: warning: `rng` may be used uninitialized in this function [-Wmaybe-uninitialized]
          416 |     unsigned int major = rng->version.major;
              |                          ~~~~~~~~~~~~^~~~~~
        random.c: In function `random_bytes`:
        random.c:1284:8: warning: `rng` may be used uninitialized in this function [-Wmaybe-uninitialized]
        1284 |     rng->get_bytes(rnd, ptr, n);
             |     ~~~^~~~~~~~~~~
        random.c:1299:34: note: `rng` was declared here
        1299 |     const rb_random_interface_t *rng;
             |                                  ^~~
        random.c: In function `rand_random_number`:
        random.c:1606:12: warning: `rng` may be used uninitialized in this function [-Wmaybe-uninitialized]
        1606 |     return rand_range(obj, rng, rnd, vmax);
             |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        random.c:1624:34: note: `rng` was declared here
        1624 |     const rb_random_interface_t *rng;
              |                                  ^~~
        random.c: In function `random_rand`:
        random.c:1120:15: warning: `rng` may be used uninitialized in this function [-Wmaybe-uninitialized]
        1120 |     return rng->get_int32(rnd);
             |            ~~~^~~~~~~~~~~
        random.c:1573:34: note: `rng` was declared here
        1573 |     const rb_random_interface_t *rng;
             |                                  ^~~

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15759

commit d615dbf4e28d26c3fd7a54ad58d7365521378599
  Author:     Burdette Lamar <BurdetteLamar@Yahoo.com>
  AuthorDate: 2025-12-29 05:51:10 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2025-12-29 05:51:10 +0900

    [DOC] Japanese for multi-byte characters

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15752

    Merged-By: peterzhu2118 <peter@peterzhu.ca>

commit 44e762a99c2234756594382f36fc64db1d6c31d0
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-28 13:49:02 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-29 02:01:12 +0900

    Extract `rb_random_interface_t`  alongside `rb_random_t` as well

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15758

commit 68cd46353c34cd87917930f80925b2ac8ddaaa9b
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-28 13:38:39 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-29 02:01:12 +0900

    Ensure `T_DATA` before `RTYPEDDATA_P`

    For the precondition of `RTYPEDDATA_P` that the argument must be a
    Ruby object of `::RUBY_T_DATA`.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15758

commit eaa83e505fdcddd1d354f1d9a375b22f33748060
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2025-12-28 03:19:56 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2025-12-28 22:55:38 +0900

    Always allocate Fiber objects in Thread

    Currently, root fibers of threads do not have a corresponding Ruby object
    backing it by default (it does have one when an object is required, such
    as when Fiber.current is called). This is a problem for the new GC weak
    references design in #12606 since Thread is not declared as having weak
    references but it does hold weak references (the generic ivar cache).

    This commit changes it to always allocate a Fiber object for the root
    fiber.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15753

commit 3fe2ebf8e4127bca0a57d4ed8eb6035792420a26
  Author:     Misaki Shioi <31817032+shioimm@users.noreply.github.com>
  AuthorDate: 2025-12-28 17:23:50 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2025-12-28 17:23:50 +0900

    Remove unnecessary comparison from is_local_port_fixed (#15757)

    Simplify the conditions:
    - Return false if the port is 0 or a negative number
    - Return true if the port is a positive number

  Notes:
    Merged-By: shioimm <shioi.mm@gmail.com>

commit 6544c89708d94b894012e0587f770f33bbce4a3b
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-27 18:32:07 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-28 10:34:17 +0900

    Skip the hang-up test on mingw

commit 8415f8faccffd426ed9c1168abddc2b3e727b659
  Author:     BurdetteLamar <burdettelamar@yahoo.com>
  AuthorDate: 2025-12-27 06:24:52 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2025-12-28 03:28:57 +0900

    [DOC] Use Japanese for multi-byte characters

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15746

commit a92c0342dd35efac8c08845b23412e5f70ecd769
  Author:     BurdetteLamar <burdettelamar@yahoo.com>
  AuthorDate: 2025-12-27 23:12:02 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2025-12-28 00:59:48 +0900

    [DOC] Japanese only for multi-byte chars examples

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15750

commit 38d24294acdf2fba8ab54fc05483e881b16dc7f1
  Author:     BurdetteLamar <burdettelamar@yahoo.com>
  AuthorDate: 2025-12-27 22:50:32 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2025-12-28 00:59:23 +0900

    [DOC] Multibyte chars Japanese only

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15749

commit a8c3d5e127776d74eb068c95610277feb99adcf0
  Author:     Misaki Shioi <31817032+shioimm@users.noreply.github.com>
  AuthorDate: 2025-12-27 18:26:56 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2025-12-27 18:26:56 +0900

    Fix: Do not fast_fallback if local_port is explicitly specified (#15732)

    `fast fallback` cannot be used with explicitly specified local port,
    because concurrent binds to the same `local_host:local_port`
    can raise `Errno::EADDRINUSE`.

    This issue is more likely to occur on hosts with `IPV6_V6ONLY` disabled,
    because IPv6 binds can also occupy IPv4-mapped IPv6 address space.

  Notes:
    Merged-By: shioimm <shioi.mm@gmail.com>

commit 3c9e61f5ef8190e082b36e056f59be49692ae8aa
  Author:     Kazuki Yamaguchi <k@rhe.jp>
  AuthorDate: 2025-12-27 16:18:58 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2025-12-27 16:46:03 +0900

    [ruby/openssl] cipher: remove incorrect assertion in Cipher#update

    Commit https://github.com/ruby/openssl/commit/1de3b80a46c2 (cipher: make output buffer String independent,
    2024-12-10) ensures the output buffer String has sufficient capacity,
    but the length can be shorter. The assert() is simply incorrect and
    should be removed.

    Also remove a similar assert() in Cipher#final. While not incorrect, it
    is not useful either.

    https://github.com/ruby/openssl/commit/0ce6ab97dd

commit b8201a09e026b3f2948a19eddf1341eb4b9668cf
  Author:     git[bot] <svn-admin@ruby-lang.org>
  AuthorDate: 2025-12-27 15:53:51 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2025-12-27 15:53:51 +0900

    Update bundled gems list as of 2025-12-27

commit dedde996762dbed72d3f1e11a02d69a9d080edc4
  Author:     Burdette Lamar <BurdetteLamar@Yahoo.com>
  AuthorDate: 2025-12-27 05:06:21 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2025-12-27 05:06:21 +0900

    [DOC] Use Japanese for multi-byte characters (#15745)

  Notes:
    Merged-By: BurdetteLamar <BurdetteLamar@Yahoo.com>

commit 7b3b1a1442a6665ab300207bf064ae360272525a
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2025-12-27 00:04:51 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2025-12-27 00:14:04 +0900

    [DOC] Use self in call-seq for Method#call

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15743

commit 6ae69e9ac1db89c0ee2e8ced251cc31e7f0c96d2
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2025-12-27 00:03:49 +0900
  Commit:     Peter Zhu <peter@peterzhu.ca>
  CommitDate: 2025-12-27 00:14:04 +0900

    [DOC] Remove args from call-seq of Method#call

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15743

commit b304c149aa2fe845872ccdf6ea88e7fe155c61f3
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2025-12-26 17:14:57 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2025-12-26 21:05:29 +0900

    [DOC] Remove outdated documentation about command injection

    [Feature #19630]

    This dangerous behavior was removed in 4.0 (996cae65f3cc8fed60c6bb758b00882cac49389d)
    but the documentation wasn't updated.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15740

commit c3424615821192488f644d41eff21fa349a1eb2f
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-26 19:33:03 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-26 19:33:03 +0900

    Remove an useless macro definition `RSTRUCT_PTR`

    The underlying definition, `rb_struct_ptr`, was removed four years
    ago.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15741

commit 8c7b1401a50687dfd1d0c253c03eefdb8815154a
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-08 14:16:11 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-26 17:53:23 +0900

    Remove `rb_iterate` deprecated since 1.9

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15739

commit 2ac4cc0a1bcd55be456aa12c1b6d7f52a5725fed
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-08 14:01:39 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-26 17:53:23 +0900

    Remove `RUBY_FL_DUPPED` deprecated for 4 years

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15739

commit a3ac83b7b86f61f3bb9f82bba69e06e7cbc6a592
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-08 13:59:50 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-26 17:53:22 +0900

    Remove taintedness/trustedness enums/macros deprecated for 4 years

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15739

commit a447d39da267cff10a4e8d07e74d65b6c4e64207
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-08 13:47:51 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-26 17:02:42 +0900

    Remove `rb_gc_force_recycle` deprecated as "removed soon"

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15739

commit cf60dc2642b6c84794e7b6a1a2a1eff4b2e0f1cf
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-08 13:44:46 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-26 17:02:42 +0900

    Remove `rb_clone_setup` and `rb_dup_setup` deprecated for 4 years

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15739

commit a41b1540291d1469caae58d2271f3671aee7431c
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-08 13:25:52 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-26 17:02:42 +0900

    Remove `rb_complex_polar` deprecated for 7 years

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15739

commit f84110e601399c389f6d0c4b3c59be97e6dff935
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-08 13:19:20 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-26 17:02:41 +0900

    Remove old APIs to allocate a data object deprecated for 5 years

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15739

commit 5c2f6639c53c2dcde60544b1b53ab8f5d10cd12f
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-08 13:05:02 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-26 16:48:16 +0900

    Remove `rb_clear_constant_cache` deprecated for 3 years

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15739

commit 1ca464347a526ec6539df37146a0005f95f6e3db
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2024-06-04 09:27:35 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-26 15:11:23 +0900

    CI: Warn deprecated features to be removed at this version

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15738

commit ccc8610b660ef225b304aae7b820bad036621a87
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2024-06-04 00:21:33 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-26 15:11:23 +0900

    Remove `RUBY_GC_HEAP_INIT_SLOTS` environment variable

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15738

commit 4c07e61bc937b39774862e33bbac8c9c234f3dbf
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2024-10-24 19:35:05 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-26 15:11:23 +0900

    Deprecate old VC

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15738

commit 0b65ac6daff08dd30ee66e85f9bcfe756d27b742
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2024-10-24 18:39:51 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-26 15:11:23 +0900

    Remove a no longer used prototype declaration in re.c

    Include internal/error.h instead.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15738

commit 704ac72fb67bc431c7d77d0d0aaa7e5b5331b096
  Author:     Yusuke Endoh <mame@ruby-lang.org>
  AuthorDate: 2025-12-25 00:08:38 +0900
  Commit:     Yusuke Endoh <mame@ruby-lang.org>
  CommitDate: 2025-12-26 14:20:00 +0900

    Clarify the intent of the test for "ruby -h" to fit in 80x25

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15724

commit b01fd2d8c3195cc9936f6be6f89df0de12394a28
  Author:     Andrii Furmanets <furmanets.andriy@gmail.com>
  AuthorDate: 2025-12-25 19:05:06 +0900
  Commit:     Nobuyoshi Nakada <nobu.nakada@gmail.com>
  CommitDate: 2025-12-26 14:05:11 +0900

    Fix RSET_IS_MEMBER macro parameter mismatch

    The RSET_IS_MEMBER macro had a parameter named 'sobj' but the macro
    body used 'set' instead, causing the first argument to be ignored.

    This worked by accident because all current callers use a variable
    named 'set', but would cause compilation failure if called with a
    differently named variable:

        error: use of undeclared identifier 'set'

    Changed the parameter name from 'sobj' to 'set' to match the macro
    body and be consistent with other RSET_* macros.

commit bad7dd5d74e9d14e84faf8cc8907dcdfdb8751e8
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-26 09:16:36 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-26 13:27:32 +0900

    [DOC] Separate updated gems lists into sections in NEWS.md

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15735

commit 594dd8bfd4c2b380dc7185d421d71b29c379356b
  Author:     Takashi Sakaguchi <takashi.sakaguchi@ummm.info>
  AuthorDate: 2025-12-26 12:37:46 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2025-12-26 12:38:16 +0900

    [ruby/pp] Support private instance_variables_to_inspect
    (https://github.com/ruby/pp/pull/70)

    * Support private instance_variables_to_inspect in pp

    Ruby supports calling instance_variables_to_inspect even when
    it is defined as a private method (ruby/ruby#13555).

    This change aligns pp with Ruby's behavior.

    https://github.com/ruby/pp/commit/8450e76db6

commit 9824724b2ffe583302e9318c6eff7a440478125f
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2025-12-26 11:39:43 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 12:12:05 +0900

    Skip test_write_binary(GemSingletonTest) at rbs tests

    ```
    Errno::EACCES: Permission denied @ rb_file_s_rename
    ...
    D:/a/ruby/ruby/src/lib/rubygems/util/atomic_file_writer.rb:42:in 'File.rename'
    ```

    It may caused with atomic_file_writer.rb

commit 02275b1e53339f34e46b7e69e1512895ea105042
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2025-12-26 11:11:56 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 12:12:05 +0900

    uutils-coreutils 0.5.0 has been removed uutils wrapper

commit 565ea26ad10ea8c3c6ce9bdae6cbb78353a9ad36
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2025-12-26 10:14:16 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 11:00:51 +0900

    Disabled to run lobsters benchmark because it didn't work with Ruby 4.1 yet

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15736

commit 89af235435a911d86e04abdb1a54f4fe25dcaa6a
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2025-12-26 09:44:55 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 11:00:51 +0900

    Added ruby_41? platform

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15736

commit 93df96684860ea437de982d6778fc9d845d0505a
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2025-12-26 09:37:17 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 11:00:51 +0900

    Mark development version for unreleased gems

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15736

commit 70c7f3ad77c09e379b9e7ffb8009ccc2cb47f234
  Author:     Sutou Kouhei <kou@clear-code.com>
  AuthorDate: 2025-12-17 14:28:48 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 11:00:51 +0900

    [ruby/strscan] Bump version

    https://github.com/ruby/strscan/commit/747a3b5def

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15736

commit fda7019c80c1026ee89ba772fb7db547c89e541a
  Author:     Benoit Daloze <eregontp@gmail.com>
  AuthorDate: 2025-12-08 21:06:08 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 11:00:51 +0900

    [ruby/net-protocol] Add Net::Protocol::TCP_SOCKET_NEW_HAS_OPEN_TIMEOUT

    * To find out efficiently if TCPSocket#initialize supports the open_timeout keyword argument.

    https://github.com/ruby/net-protocol/commit/738c06f950

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15736

commit 4d7db86a794581f1be405dcc70bb06549b8cf28f
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2025-12-22 17:16:09 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 11:00:51 +0900

    [ruby/json] Add missing documentation for `allow_control_characters` parsing option

    https://github.com/ruby/json/commit/a5c160f372

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15736

commit 8ccfb375b9ade4504c4012ce8c31adc7e12dc49c
  Author:     久我山菜々 <nna@nna774.net>
  AuthorDate: 2025-12-19 01:30:37 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 11:00:51 +0900

    [ruby/json] Update `fpconv_dtoa` definition to use `dest[32]`

    https://github.com/ruby/json/commit/4808fee9af

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15736

commit 1f526b348978bf71efc75f562227c1e872df27fd
  Author:     Taketo Takashima <t.taketo1113@gmail.com>
  AuthorDate: 2025-12-17 23:39:43 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 11:00:51 +0900

    [ruby/ipaddr] Follow-up fix for InvalidAddressError messages

    https://github.com/ruby/ipaddr/commit/b92ef74b91

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15736

commit f3149af35a30c4eb334006faef729a6e514d4cf2
  Author:     Koichi ITO <koic.ito@gmail.com>
  AuthorDate: 2025-12-21 05:58:23 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 11:00:51 +0900

    [ruby/prism] Sync `Prism::Translation::ParserCurrent` with Ruby 4.0

    This PR updates the fallback version for `Prism::Translation::ParserCurrent` from 3.4 to 4.0.

    Currently, the fallback resolves to `Parser34`, as shown below:

    ```console
    $ ruby -v -rprism -rprism/translation/parser_current -e 'p Prism::Translation::ParserCurrent'
    ruby 3.0.7p220 (2024-04-23 revision https://github.com/ruby/prism/commit/724a071175) [x86_64-darwin23]
    warning: `Prism::Translation::Current` is loading Prism::Translation::Parser34, but you are running 3.0.
    Prism::Translation::Parser34
    ```

    Following the comment "Keep this in sync with released Ruby.",
    it seems like the right time to set this to Ruby 4.0, which is scheduled for release this week.

    https://github.com/ruby/prism/commit/115f0a118c

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15736

commit 44a17656842a567eb82c43024daaf9fcaff61e5d
  Author:     t-mangoe <m.takashi.xpair@gmail.com>
  AuthorDate: 2025-12-21 09:16:58 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 11:00:51 +0900

    [ruby/timeout] add test case for string argument

    https://github.com/ruby/timeout/commit/fef9d07f44

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15736

commit f8d0960af260219ab7c10a797ac62ecad25b2974
  Author:     Jean-Samuel Aubry-Guzzi <js.aubry@shopify.com>
  AuthorDate: 2025-12-09 01:22:55 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 11:00:51 +0900

    [ruby/resolv] Handle TCP Requester #recv_reply incomplete data

    https://github.com/ruby/resolv/commit/9c640bdc4a

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15736

commit 4b7bbd43408f230997e216a557d586edd492172d
  Author:     Jean-Samuel Aubry-Guzzi <js.aubry@shopify.com>
  AuthorDate: 2025-10-29 21:31:26 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 11:00:51 +0900

    [ruby/resolv] Fix TCP Requester #recv_reply

    https://github.com/ruby/resolv/commit/96dc3d15fe

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15736

commit 74becf1b61272c66e835c446525920eae0b8574a
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2025-12-26 09:32:02 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 11:00:51 +0900

    Start to develop 4.1.0.dev

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15736

commit bdbe8d50150447748eaa92a0cce7327d8dec9903
  Author:     eileencodes <eileencodes@gmail.com>
  AuthorDate: 2025-11-26 04:17:03 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 11:00:51 +0900

    [ruby/rubygems] Write gem files atomically

    This change updates `write_binary` to use a new class,
    `AtomicFileWriter.open` to write the gem's files. This implementation
    is borrowed from Active Support's [`atomic_write`](https://github.com/rails/rails/blob/main/activesupport/lib/active_support/core_ext/file/atomic.rb).

    Atomic write will write the files to a temporary file and then once
    created, sets permissions and renames the file. If the file is corrupted
    - ie on failed download, an error occurs, or for some other reason, the
    real file will not be created. The changes made here make `verify_gz`
    obsolete, we don't need to verify it if we have successfully created the
    file atomically. If it exists, it is not corrupt. If it is corrupt, the
    file won't exist on disk.

    While writing tests for this functionality I replaced the
    `RemoteFetcher` stub with `FakeFetcher` except for where we really do
    need to overwrite the `RemoteFetcher`. The new test implementation is much
    clearer on what it's trying to accomplish versus the prior test
    implementation.

    https://github.com/ruby/rubygems/commit/0cd4b54291

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15736

commit c5376a3a167cbb90023e7610a4fafda22a5c381c
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2025-12-05 11:11:31 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 11:00:51 +0900

    [ruby/rubygems] Remove deprecated, unused Gem::List

    https://github.com/ruby/rubygems/commit/43371085f4

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15736

commit 8024245854ac9e92947e7bd4a58223d8998d3893
  Author:     Maciej Mensfeld <maciej@mensfeld.pl>
  AuthorDate: 2025-12-18 22:03:00 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 11:00:51 +0900

    [ruby/date] remove conditional for uint64_t

    https://github.com/ruby/date/commit/47778c32d8

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15736

commit 5960fb9fa000898b863565a8f48b81fd25bff88a
  Author:     Maciej Mensfeld <maciej@mensfeld.pl>
  AuthorDate: 2025-12-18 20:43:22 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 11:00:51 +0900

    [ruby/date] remove redundant code

    https://github.com/ruby/date/commit/5e6a458179

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15736

commit bcaa127ecd4f408299c8514569329df1b124f556
  Author:     Maciej Mensfeld <maciej@mensfeld.pl>
  AuthorDate: 2025-12-18 20:36:36 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 11:00:51 +0900

    [ruby/date] code remarks, macros and r2.6 support

    https://github.com/ruby/date/commit/2682dc79c0

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15736

commit ea03f263b51cfae3163e19dad5800c3a54d7cd1c
  Author:     Maciej Mensfeld <maciej@mensfeld.pl>
  AuthorDate: 2025-12-18 18:38:51 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 11:00:51 +0900

    [ruby/date] improve styling

    https://github.com/ruby/date/commit/cd7a329dfd

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15736

commit f09e35ee4a5283c1b6185383f9b89eb4caf99868
  Author:     Maciej Mensfeld <maciej@mensfeld.pl>
  AuthorDate: 2025-12-18 17:36:35 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 11:00:51 +0900

    [ruby/date] [ruby/date] Optimize Gregorian date conversions with Neri-Schneider algorithm

    Replace floating-point arithmetic and iterative loops with pure integer
    operations for ~40% faster Date operations. Date.ordinal and Date.commercial
    are ~2x faster due to O(1) first-day-of-year calculation.

    Reference: https://arxiv.org/abs/2102.06959

    https://github.com/ruby/date/commit/cc639549d6

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15736

commit ae46f916f1e686b5f7cc80402f2e8b5f299abc3c
  Author:     Burdette Lamar <BurdetteLamar@Yahoo.com>
  AuthorDate: 2025-12-23 09:43:58 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 11:00:51 +0900

    [ruby/stringio] [DOC] Doc for StringIO#read
    (https://github.com/ruby/stringio/pull/197)

    Previous doc merely linked to `IO#read`; new doc stays local, shows
    examples using `StringIO`.

    https://github.com/ruby/stringio/commit/e8b66f8cdd

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15736

commit 9a76ccdbabbd7d2814a3106cc10d2740b6120ab9
  Author:     Burdette Lamar <BurdetteLamar@Yahoo.com>
  AuthorDate: 2025-12-23 09:43:00 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 11:00:51 +0900

    [ruby/stringio] [DOC] Doc for StringIO#putc
    (https://github.com/ruby/stringio/pull/196)

    Previous doc merely linked to `IO#putc`. The new doc stays local,
    provides examples using `StringIO` objects.

    https://github.com/ruby/stringio/commit/8983f32c50

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15736

commit 354dc574de421e6cbfb4404abc49a5be462042a9
  Author:     Burdette Lamar <BurdetteLamar@Yahoo.com>
  AuthorDate: 2025-12-23 09:42:36 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 11:00:51 +0900

    [ruby/stringio] [DOC] Doc for StringIO#pread
    (https://github.com/ruby/stringio/pull/195)

    Previous doc unhelpfully pointed to `IO#pread`; this PR documents
    locally, with StringIO examples.

    https://github.com/ruby/stringio/commit/806f3d9741

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15736

commit 67f830e0925c328c19fc1c2f513a174c6e3ca63d
  Author:     Sutou Kouhei <kou@clear-code.com>
  AuthorDate: 2025-12-17 14:18:43 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 11:00:51 +0900

    [ruby/stringio] Development of 3.2.1 started.

    https://github.com/ruby/stringio/commit/c9cd1c9947

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15736

commit 290fa0d8b4e0145f389c6fdaff3ef45b915d706b
  Author:     Peter Zhu <peter@peterzhu.ca>
  AuthorDate: 2025-12-26 09:30:50 +0900
  Commit:     git[bot] <svn-admin@ruby-lang.org>
  CommitDate: 2025-12-26 09:31:28 +0900

    [ruby/mmtk] Fix cargo fmt

    https://github.com/ruby/mmtk/commit/f4c46cabc7

commit a06a59e3b34cd5227363dc3af14dc6d1ce93e665
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2025-12-26 09:06:11 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 09:06:11 +0900

    Rename and enabled auto-update bundled gems again

commit 2fa02d6d2e325e0c746f353e70403389072b5dee
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2025-12-26 09:06:05 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-26 09:06:05 +0900

    Enabled auto-update NEWS.md and sync for default gems again

commit 010dcf85567ee1898706a4a8e353ac915a3d8873
  Author:     Yukihiro "Matz" Matsumoto <matz@ruby.or.jp>
  AuthorDate: 2025-12-25 21:14:35 +0900
  Commit:     Yukihiro "Matz" Matsumoto <matz@ruby.or.jp>
  CommitDate: 2025-12-26 08:59:23 +0900

    Development of 4.1.0 started.
