<feed xmlns='http://www.w3.org/2005/Atom'>
<title>ruby.git/internal, branch v3_0_7</title>
<subtitle>The Ruby Programming Language</subtitle>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/'/>
<entry>
<title>merge revision(s) 60d0421ca861944459f52292d65dbf0ece26e38a,b6534691a16d751d59fc572d5dddebcaeb21f007,409dbc951b9875d27bd73748c88e15386473cffb,842b0008c132dd587f09766a228041afb7fed24f: [Backport #18191]</title>
<updated>2021-10-09T06:08:38+00:00</updated>
<author>
<name>nagachika</name>
<email>nagachika@ruby-lang.org</email>
</author>
<published>2021-10-09T06:08:38+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=2c947e74a0a11fe6c54253c15224dc80054c62a2'/>
<id>2c947e74a0a11fe6c54253c15224dc80054c62a2</id>
<content type='text'>
	Fix the encoding of loaded feature names [Bug #18191]

	The feature names loaded from the default load paths should also
	be in the file system encoding.
	---
	 ruby.c                    | 12 +++++++++++-
	 test/ruby/test_require.rb | 22 ++++++++++++++++++++++
	 2 files changed, 33 insertions(+), 1 deletion(-)

	Copy path strings as interned strings

	---
	 ruby.c | 12 ++++++++++--
	 1 file changed, 10 insertions(+), 2 deletions(-)

	Replace expanded load path only when modified

	---
	 ruby.c | 6 +++++-
	 1 file changed, 5 insertions(+), 1 deletion(-)

	Skip broken strings as the locale encoding

	---
	 internal/string.h |  1 +
	 ruby.c            | 11 +++++++----
	 string.c          |  6 ++++++
	 3 files changed, 14 insertions(+), 4 deletions(-)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
	Fix the encoding of loaded feature names [Bug #18191]

	The feature names loaded from the default load paths should also
	be in the file system encoding.
	---
	 ruby.c                    | 12 +++++++++++-
	 test/ruby/test_require.rb | 22 ++++++++++++++++++++++
	 2 files changed, 33 insertions(+), 1 deletion(-)

	Copy path strings as interned strings

	---
	 ruby.c | 12 ++++++++++--
	 1 file changed, 10 insertions(+), 2 deletions(-)

	Replace expanded load path only when modified

	---
	 ruby.c | 6 +++++-
	 1 file changed, 5 insertions(+), 1 deletion(-)

	Skip broken strings as the locale encoding

	---
	 internal/string.h |  1 +
	 ruby.c            | 11 +++++++----
	 string.c          |  6 ++++++
	 3 files changed, 14 insertions(+), 4 deletions(-)
</pre>
</div>
</content>
</entry>
<entry>
<title>partially merge revision(s) 5f69a7f60467fa58c2f998daffab43e118bff36c: [Backport #17666]</title>
<updated>2021-07-25T04:49:53+00:00</updated>
<author>
<name>nagachika</name>
<email>nagachika@ruby-lang.org</email>
</author>
<published>2021-07-25T04:38:05+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=95dc88c88869541dd0eccafd14924d78c8d7f427'/>
<id>95dc88c88869541dd0eccafd14924d78c8d7f427</id>
<content type='text'>
Co-authored-by: Samuel Williams &lt;@ioquatix&gt;
https://github.com/nagachika/ruby/pull/1/commits/2cee515f024f3295945f312cb6b052f972f9c93d
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Co-authored-by: Samuel Williams &lt;@ioquatix&gt;
https://github.com/nagachika/ruby/pull/1/commits/2cee515f024f3295945f312cb6b052f972f9c93d
</pre>
</div>
</content>
</entry>
<entry>
<title>partially merge revision(s) 119697f61e2b2b157816a8aa33aada5863959900,4a627dbdfd1165022fa9e716ba845e937b03773d: [Backport #18014]</title>
<updated>2021-07-22T02:47:00+00:00</updated>
<author>
<name>nagachika</name>
<email>nagachika@ruby-lang.org</email>
</author>
<published>2021-07-18T06:23:09+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=a215c6d0448764131cbbb48b476dc698b51c2273'/>
<id>a215c6d0448764131cbbb48b476dc698b51c2273</id>
<content type='text'>
	[Bug #18014] Fix rb_gc_force_recycle unmark before sweep

	If we force recycle an object before the page is swept, we should clear
	it in the mark bitmap. If we don't clear it in the bitmap, then during
	sweeping we won't account for this free slot so the `free_slots` count
	of the page will be incorrect.
	---
	 gc.c | 2 +-
	 1 file changed, 1 insertion(+), 1 deletion(-)

	[Bug #18014] Fix memory leak in GC when using Ractors

	When a Ractor is removed, the freelist in the Ractor cache is not
	returned to the GC, leaving the freelist permanently lost. This commit
	recycles the freelist when the Ractor is destroyed, preventing a memory
	leak from occurring.
	---
	 gc.c          | 116 +++++++++++++++++++++++++++-------------------------------
	 internal/gc.h |   6 +++
	 ractor.c      |   3 ++
	 ractor_core.h |   5 +--
	 4 files changed, 64 insertions(+), 66 deletions(-)

Co-authored-by: Peter Zhu &lt;peter@peterzhu.ca&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
	[Bug #18014] Fix rb_gc_force_recycle unmark before sweep

	If we force recycle an object before the page is swept, we should clear
	it in the mark bitmap. If we don't clear it in the bitmap, then during
	sweeping we won't account for this free slot so the `free_slots` count
	of the page will be incorrect.
	---
	 gc.c | 2 +-
	 1 file changed, 1 insertion(+), 1 deletion(-)

	[Bug #18014] Fix memory leak in GC when using Ractors

	When a Ractor is removed, the freelist in the Ractor cache is not
	returned to the GC, leaving the freelist permanently lost. This commit
	recycles the freelist when the Ractor is destroyed, preventing a memory
	leak from occurring.
	---
	 gc.c          | 116 +++++++++++++++++++++++++++-------------------------------
	 internal/gc.h |   6 +++
	 ractor.c      |   3 ++
	 ractor_core.h |   5 +--
	 4 files changed, 64 insertions(+), 66 deletions(-)

Co-authored-by: Peter Zhu &lt;peter@peterzhu.ca&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>merge revision(s) 2bc293e899c9d32dcd794a73de8925c49ecf8f15,d0e6c6e682b9ba2b0309a5177933a0628e8ef316,cc0dc67bbbe1951ff90004bc987f78545625d772,e1eff837cf12a8e813de9d4ff2db50c9b68b86b5,0ab0b86c8491d639b9ff1335ddf35e341ecd867e,6911b4bc82889860ff7da4ecf975504cdc3e5314: [Backport #17854]</title>
<updated>2021-05-22T08:09:16+00:00</updated>
<author>
<name>nagachika</name>
<email>nagachika@ruby-lang.org</email>
</author>
<published>2021-05-22T08:09:16+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=31816356eee6313fe968eecd4cd3ad9ac4848819'/>
<id>31816356eee6313fe968eecd4cd3ad9ac4848819</id>
<content type='text'>
	cdhash_cmp: can take rational literals

	Rational literals are those integers suffixed with `r`.  They tend to
	be a part of more complex expressions like `123/456r`, but in theory
	they can live alone.  When such "bare" rational literals are passed to
	case-when branch, we have to take care of them.  Fixes [Bug #17854]
	---
	 common.mk                  |  1 +
	 compile.c                  |  7 +++++++
	 internal/rational.h        |  1 +
	 rational.c                 | 13 ++++++++++---
	 test/ruby/test_rational.rb |  7 +++++++
	 5 files changed, 26 insertions(+), 3 deletions(-)

	cdhash_cmp: rational literals with fractions

	Nobu kindly pointed out that rational literals can have fractions.
	---
	 compile.c                  | 5 +++--
	 test/ruby/test_rational.rb | 4 ++++
	 2 files changed, 7 insertions(+), 2 deletions(-)

	cdhash_cmp: can also take complex

	There are complex literals `123i`, which can also be a case condition.
	---
	 compile.c                  | 15 +++++++++++----
	 complex.c                  | 12 +++++++++---
	 internal/complex.h         |  1 +
	 test/ruby/test_rational.rb |  4 ++++
	 4 files changed, 25 insertions(+), 7 deletions(-)

	cdhash_cmp: recursively apply

	For instance a rational's numerator can be a bignum.  Comparison using
	C's == can be insufficient.
	---
	 compile.c | 4 ++--
	 1 file changed, 2 insertions(+), 2 deletions(-)

	cdhash_cmp: should use ||

	cf: https://github.com/ruby/ruby/pull/4469#discussion_r628386707
	---
	 compile.c | 4 ++--
	 1 file changed, 2 insertions(+), 2 deletions(-)

	test_cdhash: refactor change class

	It is now strange to test Complex in a class named Rational_Test.
	---
	 test/ruby/test_rational.rb | 15 ---------------
	 test/ruby/test_syntax.rb   | 15 +++++++++++++++
	 2 files changed, 15 insertions(+), 15 deletions(-)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
	cdhash_cmp: can take rational literals

	Rational literals are those integers suffixed with `r`.  They tend to
	be a part of more complex expressions like `123/456r`, but in theory
	they can live alone.  When such "bare" rational literals are passed to
	case-when branch, we have to take care of them.  Fixes [Bug #17854]
	---
	 common.mk                  |  1 +
	 compile.c                  |  7 +++++++
	 internal/rational.h        |  1 +
	 rational.c                 | 13 ++++++++++---
	 test/ruby/test_rational.rb |  7 +++++++
	 5 files changed, 26 insertions(+), 3 deletions(-)

	cdhash_cmp: rational literals with fractions

	Nobu kindly pointed out that rational literals can have fractions.
	---
	 compile.c                  | 5 +++--
	 test/ruby/test_rational.rb | 4 ++++
	 2 files changed, 7 insertions(+), 2 deletions(-)

	cdhash_cmp: can also take complex

	There are complex literals `123i`, which can also be a case condition.
	---
	 compile.c                  | 15 +++++++++++----
	 complex.c                  | 12 +++++++++---
	 internal/complex.h         |  1 +
	 test/ruby/test_rational.rb |  4 ++++
	 4 files changed, 25 insertions(+), 7 deletions(-)

	cdhash_cmp: recursively apply

	For instance a rational's numerator can be a bignum.  Comparison using
	C's == can be insufficient.
	---
	 compile.c | 4 ++--
	 1 file changed, 2 insertions(+), 2 deletions(-)

	cdhash_cmp: should use ||

	cf: https://github.com/ruby/ruby/pull/4469#discussion_r628386707
	---
	 compile.c | 4 ++--
	 1 file changed, 2 insertions(+), 2 deletions(-)

	test_cdhash: refactor change class

	It is now strange to test Complex in a class named Rational_Test.
	---
	 test/ruby/test_rational.rb | 15 ---------------
	 test/ruby/test_syntax.rb   | 15 +++++++++++++++
	 2 files changed, 15 insertions(+), 15 deletions(-)
</pre>
</div>
</content>
</entry>
<entry>
<title>merge revision(s) 3a3033c138c0951ad5edbf02b5c233b58a190d2f: [Backport #17787]</title>
<updated>2021-04-29T08:53:07+00:00</updated>
<author>
<name>nagachika</name>
<email>nagachika@ruby-lang.org</email>
</author>
<published>2021-04-29T08:53:07+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=3e07a4edc92f18dec4806961c1b724ac5cf4d6b2'/>
<id>3e07a4edc92f18dec4806961c1b724ac5cf4d6b2</id>
<content type='text'>
	get rid of using `__builtin_unreachable` directly [Bug #17787]

	As it is an independent feature from `clz`, `ctz` and `popcount`,
	it might be unavailable even if the latters are built in.
	---
	 internal/bits.h | 6 +++---
	 1 file changed, 3 insertions(+), 3 deletions(-)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
	get rid of using `__builtin_unreachable` directly [Bug #17787]

	As it is an independent feature from `clz`, `ctz` and `popcount`,
	it might be unavailable even if the latters are built in.
	---
	 internal/bits.h | 6 +++---
	 1 file changed, 3 insertions(+), 3 deletions(-)
</pre>
</div>
</content>
</entry>
<entry>
<title>merge revision(s) 7e8a9af9db42a21f6a1125a29e98c45ff9d5833b: [Backport #17732]</title>
<updated>2021-04-02T07:06:31+00:00</updated>
<author>
<name>NARUSE, Yui</name>
<email>naruse@airemix.jp</email>
</author>
<published>2021-04-02T07:06:31+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=4e2738f477b5343a0d48a400c975220fed123c9b'/>
<id>4e2738f477b5343a0d48a400c975220fed123c9b</id>
<content type='text'>
	rb_enc_interned_str: handle autoloaded encodings

	If called with an autoloaded encoding that was not yet
	initialized, `rb_enc_interned_str` would crash with
	a NULL pointer exception.

	See: https://github.com/ruby/ruby/pull/4119#issuecomment-800189841
	---
	 encoding.c                        | 28 ++++++++++++----------------
	 ext/-test-/string/depend          |  3 +++
	 ext/-test-/string/fstring.c       | 15 +++++++++++++++
	 internal/encoding.h               |  3 +++
	 string.c                          |  4 ++++
	 test/-ext-/string/test_fstring.rb | 16 ++++++++++++++++
	 6 files changed, 53 insertions(+), 16 deletions(-)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
	rb_enc_interned_str: handle autoloaded encodings

	If called with an autoloaded encoding that was not yet
	initialized, `rb_enc_interned_str` would crash with
	a NULL pointer exception.

	See: https://github.com/ruby/ruby/pull/4119#issuecomment-800189841
	---
	 encoding.c                        | 28 ++++++++++++----------------
	 ext/-test-/string/depend          |  3 +++
	 ext/-test-/string/fstring.c       | 15 +++++++++++++++
	 internal/encoding.h               |  3 +++
	 string.c                          |  4 ++++
	 test/-ext-/string/test_fstring.rb | 16 ++++++++++++++++
	 6 files changed, 53 insertions(+), 16 deletions(-)
</pre>
</div>
</content>
</entry>
<entry>
<title>merge revision(s) abdc634f64a440afcdc7f23c9757d27aab4db8a9,083c5f08ec4e95c9b75810d46f933928327a5ab3,1ecda213668644d656eb0d60654737482447dd92,813fe4c256f89babebb8ab53821ae5eb6bb138c6: [Backport #17497]</title>
<updated>2021-03-11T11:24:48+00:00</updated>
<author>
<name>NARUSE, Yui</name>
<email>naruse@airemix.jp</email>
</author>
<published>2021-03-11T11:24:48+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=de6072a22edbaab3793cf7f976cc9e0118d0df40'/>
<id>de6072a22edbaab3793cf7f976cc9e0118d0df40</id>
<content type='text'>
	remove unused decl

	---
	 internal/vm.h | 6 ------
	 vm_args.c     | 2 --
	 2 files changed, 8 deletions(-)

	Check stack overflow in recursive glob_helper [Bug #17162]

	---
	 dir.c         |  2 ++
	 internal/vm.h |  1 +
	 vm_eval.c     | 10 ++++++++++
	 3 files changed, 13 insertions(+)

	global call-cache cache table for rb_funcall*

	rb_funcall* (rb_funcall(), rb_funcallv(), ...) functions invokes
	Ruby's method with given receiver. Ruby 2.7 introduced inline method
	cache with static memory area. However, Ruby 3.0 reimplemented the
	method cache data structures and the inline cache was removed.

	Without inline cache, rb_funcall* searched methods everytime.
	Most of cases per-Class Method Cache (pCMC) will be helped but
	pCMC requires VM-wide locking and it hurts performance on
	multi-Ractor execution, especially all Ractors calls methods
	with rb_funcall*.

	This patch introduced Global Call-Cache Cache Table (gccct) for
	rb_funcall*. Call-Cache was introduced from Ruby 3.0 to manage
	method cache entry atomically and gccct enables method-caching
	without VM-wide locking. This table solves the performance issue
	on multi-ractor execution.
	[Bug #17497]

	Ruby-level method invocation does not use gccct because it has
	inline-method-cache and the table size is limited. Basically
	rb_funcall* is not used frequently, so 1023 entries can be enough.
	We will revisit the table size if it is not enough.
	---
	 debug_counter.h |   3 +
	 vm.c            |  12 +++
	 vm_callinfo.h   |  12 ---
	 vm_core.h       |   5 +
	 vm_eval.c       | 288 ++++++++++++++++++++++++++++++++++++++++++--------------
	 vm_insnhelper.c |  11 ++-
	 vm_method.c     |  14 ++-
	 7 files changed, 255 insertions(+), 90 deletions(-)

	opt_equality_by_mid for rb_equal_opt

	This patch improves the performance of sequential and parallel
	execution of rb_equal() (and rb_eql()).
	[Bug #17497]

	rb_equal_opt (and rb_eql_opt) does not have own cd and it waste
	a time to initialize cd. This patch introduces opt_equality_by_mid()
	to check equality without cd.

	Furthermore, current master uses "static" cd on rb_equal_opt
	(and rb_eql_opt) and it hurts CPU caches on multi-thread execution.
	Now they are gone so there are no bottleneck on parallel execution.
	---
	 vm_insnhelper.c | 99 ++++++++++++++++++++++++++++++++++++---------------------
	 1 file changed, 63 insertions(+), 36 deletions(-)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
	remove unused decl

	---
	 internal/vm.h | 6 ------
	 vm_args.c     | 2 --
	 2 files changed, 8 deletions(-)

	Check stack overflow in recursive glob_helper [Bug #17162]

	---
	 dir.c         |  2 ++
	 internal/vm.h |  1 +
	 vm_eval.c     | 10 ++++++++++
	 3 files changed, 13 insertions(+)

	global call-cache cache table for rb_funcall*

	rb_funcall* (rb_funcall(), rb_funcallv(), ...) functions invokes
	Ruby's method with given receiver. Ruby 2.7 introduced inline method
	cache with static memory area. However, Ruby 3.0 reimplemented the
	method cache data structures and the inline cache was removed.

	Without inline cache, rb_funcall* searched methods everytime.
	Most of cases per-Class Method Cache (pCMC) will be helped but
	pCMC requires VM-wide locking and it hurts performance on
	multi-Ractor execution, especially all Ractors calls methods
	with rb_funcall*.

	This patch introduced Global Call-Cache Cache Table (gccct) for
	rb_funcall*. Call-Cache was introduced from Ruby 3.0 to manage
	method cache entry atomically and gccct enables method-caching
	without VM-wide locking. This table solves the performance issue
	on multi-ractor execution.
	[Bug #17497]

	Ruby-level method invocation does not use gccct because it has
	inline-method-cache and the table size is limited. Basically
	rb_funcall* is not used frequently, so 1023 entries can be enough.
	We will revisit the table size if it is not enough.
	---
	 debug_counter.h |   3 +
	 vm.c            |  12 +++
	 vm_callinfo.h   |  12 ---
	 vm_core.h       |   5 +
	 vm_eval.c       | 288 ++++++++++++++++++++++++++++++++++++++++++--------------
	 vm_insnhelper.c |  11 ++-
	 vm_method.c     |  14 ++-
	 7 files changed, 255 insertions(+), 90 deletions(-)

	opt_equality_by_mid for rb_equal_opt

	This patch improves the performance of sequential and parallel
	execution of rb_equal() (and rb_eql()).
	[Bug #17497]

	rb_equal_opt (and rb_eql_opt) does not have own cd and it waste
	a time to initialize cd. This patch introduces opt_equality_by_mid()
	to check equality without cd.

	Furthermore, current master uses "static" cd on rb_equal_opt
	(and rb_eql_opt) and it hurts CPU caches on multi-thread execution.
	Now they are gone so there are no bottleneck on parallel execution.
	---
	 vm_insnhelper.c | 99 ++++++++++++++++++++++++++++++++++++---------------------
	 1 file changed, 63 insertions(+), 36 deletions(-)
</pre>
</div>
</content>
</entry>
<entry>
<title>merge revision(s) 85b5d4c8bf4cdcba4f1af65f2bc0c8ac716cb795: [Backport #17509]</title>
<updated>2021-02-01T10:16:54+00:00</updated>
<author>
<name>NARUSE, Yui</name>
<email>naruse@airemix.jp</email>
</author>
<published>2021-02-01T10:16:54+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=147453ad1e85bc94506c269e363e736675946908'/>
<id>147453ad1e85bc94506c269e363e736675946908</id>
<content type='text'>
	Revert "[Bug #11213] let defined?(super) call respond_to_missing?"

	This reverts commit fac2498e0299f13dffe4f09a7dd7657fb49bf643 for
	now, due to [Bug #17509], the breakage in the case `super` is
	called in `respond_to?`.
	---
	 internal/vm.h             |  2 +-
	 test/ruby/test_defined.rb | 33 ---------------------------------
	 vm_insnhelper.c           |  4 ++--
	 vm_method.c               | 12 +++++++-----
	 4 files changed, 10 insertions(+), 41 deletions(-)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
	Revert "[Bug #11213] let defined?(super) call respond_to_missing?"

	This reverts commit fac2498e0299f13dffe4f09a7dd7657fb49bf643 for
	now, due to [Bug #17509], the breakage in the case `super` is
	called in `respond_to?`.
	---
	 internal/vm.h             |  2 +-
	 test/ruby/test_defined.rb | 33 ---------------------------------
	 vm_insnhelper.c           |  4 ++--
	 vm_method.c               | 12 +++++++-----
	 4 files changed, 10 insertions(+), 41 deletions(-)
</pre>
</div>
</content>
</entry>
<entry>
<title>enable constant cache on ractors</title>
<updated>2021-01-13T08:06:16+00:00</updated>
<author>
<name>Koichi Sasada</name>
<email>ko1@atdot.net</email>
</author>
<published>2021-01-04T09:08:25+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=b93e16dc0f45069d4a5fcce20d5c4437e151f0a8'/>
<id>b93e16dc0f45069d4a5fcce20d5c4437e151f0a8</id>
<content type='text'>
constant cache `IC` is accessed by non-atomic manner and there are
thread-safety issues, so Ruby 3.0 disables to use const cache on
non-main ractors.

This patch enables it by introducing `imemo_constcache` and allocates
it by every re-fill of const cache like `imemo_callcache`.
[Bug #17510]

Now `IC` only has one entry `IC::entry` and it points to
`iseq_inline_constant_cache_entry`, managed by T_IMEMO object.

`IC` is atomic data structure so `rb_mjit_before_vm_ic_update()` and
`rb_mjit_after_vm_ic_update()` is not needed.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
constant cache `IC` is accessed by non-atomic manner and there are
thread-safety issues, so Ruby 3.0 disables to use const cache on
non-main ractors.

This patch enables it by introducing `imemo_constcache` and allocates
it by every re-fill of const cache like `imemo_callcache`.
[Bug #17510]

Now `IC` only has one entry `IC::entry` and it points to
`iseq_inline_constant_cache_entry`, managed by T_IMEMO object.

`IC` is atomic data structure so `rb_mjit_before_vm_ic_update()` and
`rb_mjit_after_vm_ic_update()` is not needed.
</pre>
</div>
</content>
</entry>
<entry>
<title>Optimize calls to `Kernel#hash` (#3987)</title>
<updated>2020-12-24T17:08:12+00:00</updated>
<author>
<name>Marc-André Lafortune</name>
<email>github@marc-andre.ca</email>
</author>
<published>2020-12-24T17:08:12+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=db2ebbd71b746734b88832b1e70db8afed3d68ed'/>
<id>db2ebbd71b746734b88832b1e70db8afed3d68ed</id>
<content type='text'>
This avoids recursive checks when the `hash` method of an object
isn't specialized.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This avoids recursive checks when the `hash` method of an object
isn't specialized.</pre>
</div>
</content>
</entry>
</feed>
