| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
| |
rb_ary_tmp_new suggests that the array is temporary in some way, but
that's not true, it just creates an array that's hidden and not on the
transient heap. This commit renames it to rb_ary_hidden_new.
|
|
|
|
| |
This was a public method, so we should probably keep it.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Previously, because opt_aref and opt_aset don't push a frame, when they
would call rb_hash to determine the hash value of the key, the initial
level of recursion would incorrectly use the method id at the top of the
stack instead of "hash".
This commit replaces rb_exec_recursive_outer with
rb_exec_recursive_outer_mid, which takes an explicit method id, so that
we can make the hash calculation behave consistently.
rb_exec_recursive_outer was documented as being internal, so I believe
this should be okay to change.
|
|
|
|
|
|
|
|
| |
[Feature #18683]
This allows parsers and similar libraries to create Hashes of
a certain capacity in advance. It's useful when the key and values
are streamed, hence `bulk_insert()` can't be used.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This commit reintroduces finer-grained constant cache invalidation.
After 8008fb7 got merged, it was causing issues on token-threaded
builds (such as on Windows).
The issue was that when you're iterating through instruction sequences
and using the translator functions to get back the instruction structs,
you're either using `rb_vm_insn_null_translator` or
`rb_vm_insn_addr2insn2` depending if it's a direct-threading build.
`rb_vm_insn_addr2insn2` does some normalization to always return to
you the non-trace version of whatever instruction you're looking at.
`rb_vm_insn_null_translator` does not do that normalization.
This means that when you're looping through the instructions if you're
trying to do an opcode comparison, it can change depending on the type
of threading that you're using. This can be very confusing. So, this
commit creates a new translator function
`rb_vm_insn_normalizing_translator` to always return the non-trace
version so that opcode comparisons don't have to worry about different
configurations.
[Feature #18589]
|
|
|
|
|
|
|
|
|
|
|
|
| |
This reverts commits for [Feature #18589]:
* 8008fb7352abc6fba433b99bf20763cf0d4adb38
"Update formatting per feedback"
* 8f6eaca2e19828e92ecdb28b0fe693d606a03f96
"Delete ID from constant cache table if it becomes empty on ISEQ free"
* 629908586b4bead1103267652f8b96b1083573a8
"Finer-grained inline constant cache invalidation"
MSWin builds on AppVeyor have been crashing since the merger.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Current behavior - caches depend on a global counter. All constant mutations cause caches to be invalidated.
```ruby
class A
B = 1
end
def foo
A::B # inline cache depends on global counter
end
foo # populate inline cache
foo # hit inline cache
C = 1 # global counter increments, all caches are invalidated
foo # misses inline cache due to `C = 1`
```
Proposed behavior - caches depend on name components. Only constant mutations with corresponding names will invalidate the cache.
```ruby
class A
B = 1
end
def foo
A::B # inline cache depends constants named "A" and "B"
end
foo # populate inline cache
foo # hit inline cache
C = 1 # caches that depend on the name "C" are invalidated
foo # hits inline cache because IC only depends on "A" and "B"
```
Examples of breaking the new cache:
```ruby
module C
# Breaks `foo` cache because "A" constant is set and the cache in foo depends
# on "A" and "B"
class A; end
end
B = 1
```
We expect the new cache scheme to be invalidated less often because names aren't frequently reused. With the cache being invalidated less, we can rely on its stability more to keep our constant references fast and reduce the need to throw away generated code in YJIT.
|
|
|
|
|
|
| |
In the past, many internal functions are declared in intern.h
under include/ruby directory, because there were no headers for
internal use.
|
|
|
|
|
| |
IA64 support was dropped in ticket #15894, so we can drop support for
HP-UX.
|
| |
|
| |
|
|
|
|
| |
Already these had been announced to be removed in 3.2.
|
| |
|
|
|
|
| |
This unused parameter seems to be accidently introduced by https://github.com/ruby/ruby/commit/9e6e39c
|
|
|
|
|
|
|
| |
Implements [Feature #18273]
Returns an array containing the receiver's direct subclasses without
singleton classes.
|
|
|
|
|
|
|
|
| |
Presence of RBIMPL_ATTR_NONNULL let C compilers to eliminate
must_not_null(). Because null pointers are not allowed to exist there
are no reason to call the function. In reality null pointers are still
passed to those functions in a number of ways. Runtime check for them
are definitely nice to have. fix [Feature#18280]
|
|
|
|
| |
Must not be a bad idea to improve documents. [ci skip]
|
| |
|
| |
|
|
|
|
|
|
|
|
| |
invalidate_mark_stack_chunk
This commit deprecates rb_gc_force_recycle and coverts it to a no-op
function. Also removes invalidate_mark_stack_chunk since only
rb_gc_force_recycle uses it.
|
| |
|
|
|
|
|
|
|
|
| |
Doesn't include receiver or singleton classes.
Implements [Feature #14394]
Co-authored-by: fatkodima <fatkodima123@gmail.com>
Co-authored-by: Benoit Daloze <eregontp@gmail.com>
|
|
|
|
|
|
|
|
|
|
| |
instead
Refinement#import_methods imports methods from modules.
Unlike Module#include, it copies methods and adds them into the refinement,
so the refinement is activated in the imported methods.
[Bug #17429] [ruby-core:101639]
|
|
|
|
| |
Must not be a bad idea to improve documents.
|
| |
|
|
|
|
| |
I was not aware of this because I use clang these days.
|
|
|
|
| |
Explicit check done at runtime.
|
|
|
|
| |
Asked ko1 about the design. [ci skip]
|
|
|
|
| |
Must not be a bad idea to improve documents. [ci skip]
|
|
|
|
| |
Must not be a bad idea to improve documents. [ci skip]
|
|
|
|
| |
Must not be a bad idea to improve documents. [ci skip]
|
|
|
|
| |
Must not be a bad idea to improve documents. [ci skip]
|
|
|
|
| |
Must not be a bad idea to improve documents. [ci skip]
|
|
|
|
| |
Must not be a bad idea to improve documents. [ci skip]
|
|
|
|
| |
Must not be a bad idea to improve documents. [ci skip]
|
|
|
|
| |
Must not be a bad idea to improve documents. [ci skip]
|
|
|
|
| |
Must not be a bad idea to improve documents. [ci skip]
|
|
|
|
| |
Must not be a bad idea to improve documents. [ci skip]
|
|
|
|
| |
Must not be a bad idea to improve documents. [ci skip]
|
|
|
|
| |
Must not be a bad idea to improve documents. [ci skip]
|
|
|
|
| |
Must not be a bad idea to improve documents. [ci skip]
|
|
|
|
| |
Must not be a bad idea to improve documents. [ci skip]
|
|
|
|
| |
Must not be a bad idea to improve documents. [ci skip]
|
|
|
|
| |
Must not be a bad idea to improve documents. [ci skip]
|
|
|
|
| |
Must not be a bad idea to improve documents. [ci skip]
|
|
|
|
| |
Must not be a bad idea to improve documents. [ci skip]
|
|
|
|
| |
Must not be a bad idea to improve documents. [ci skip]
|
|
|
|
| |
Must not be a bad idea to improve documents. [ci skip]
|
|
|
|
| |
Must not be a bad idea to improve documents. [ci skip]
|
|
|
|
| |
Must not be a bad idea to improve documents. [ci skip]
|