Age | Commit message (Collapse) | Author |
|
Notes:
Merged: https://github.com/ruby/ruby/pull/7988
|
|
Notes:
Merged-By: peterzhu2118 <[email protected]>
|
|
When String#split is used with an empty string as the field seperator it
effectively splits the original string into chars, and there is a
pre-existing fast path for this using SPLIT_TYPE_CHARS.
However this path creates an empty array in the smallest size pool and
grows from there, despite already knowing the size of the desired array.
This commit pre-allocates the correct size array in this case in order
to allow the arrays to be embedded and avoid being allocated in the
transient heap
Notes:
Merged: https://github.com/ruby/ruby/pull/7919
|
|
* Unify length field for embedded and heap strings
The length field is of the same type and position in RString for both
embedded and heap allocated strings, so we can unify it.
* Remove RSTRING_EMBED_LEN
Notes:
Merged-By: maximecb <[email protected]>
|
|
The length of an embedded string is no longer in the flags.
|
|
The capacity of the string can be calculated using the str_capacity
function.
Notes:
Merged: https://github.com/ruby/ruby/pull/7879
|
|
The call to RSTRING_GETMEM already fetched the pointer and length, so we
don't need to fetch it again.
Notes:
Merged: https://github.com/ruby/ruby/pull/7879
|
|
The STR_DEC_LEN macro is not used.
|
|
NEWOBJ_OF is now our canonical newobj macro. It takes an optional ec
Notes:
Merged: https://github.com/ruby/ruby/pull/7393
|
|
Remove !USE_RVARGC code
[Feature #19579]
The Variable Width Allocation feature was turned on by default in Ruby
3.2. Since then, we haven't received bug reports or backports to the
non-Variable Width Allocation code paths, so we assume that nobody is
using it. We also don't plan on maintaining the non-Variable Width
Allocation code, so we are going to remove it.
Notes:
Merged-By: maximecb <[email protected]>
|
|
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/7459
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/7448
|
|
[Bug #19468]
b0b9f7201acab05c2a3ad92c3043a1f01df3e17f errornously stopped
clearing the coderange.
Since `rb_str_modify` clears it, `rb_str_modify_expand`
should too.
Notes:
Merged: https://github.com/ruby/ruby/pull/7437
|
|
Notes:
Merged-By: k0kubun <[email protected]>
|
|
Regular expressions are not supported (same as String#end_with?).
Notes:
Merged: https://github.com/ruby/ruby/pull/7384
|
|
|
|
* Hide freeze method (no useful docs, same as Object#freeze)
* Add dedup to call-seq of str_uminus
Notes:
Merged: https://github.com/ruby/ruby/pull/7316
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/7278
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/7278
|
|
[Feature #19425]
Notes:
Merged: https://github.com/ruby/ruby/pull/7273
|
|
It doesn't have any reference so it can be marked as protected.
Notes:
Merged: https://github.com/ruby/ruby/pull/7238
|
|
bytesplice(index, length, str, str_index, str_length) -> string
bytesplice(range, str, str_range) -> string
In these forms, the content of +self+ is replaced by str.byteslice(str_index, str_length) or str.byteslice(str_range); however the substring of +str+ is not allocated as a new string.
Notes:
Merged: https://github.com/ruby/ruby/pull/7160
|
|
In Feature #19314, we concluded that the return value of String#bytesplice
should be changed from the source string to the receiver, because the source
string is useless and confusing when extra arguments are added.
This change should be included in Ruby 3.2.1.
|
|
str_enc_copy_direct copies the string encoding over without checking the
frozen status of the string. Because we know that we're safe here (we
only use this function when interpolating strings on the stack via a
concatstrings instruction) we can safely skip this check
Notes:
Merged: https://github.com/ruby/ruby/pull/6965
|
|
This optimisation is no longer helpful now that we use VWA to allocate
strings in larger size pools where they can be embedded.
Notes:
Merged: https://github.com/ruby/ruby/pull/6965
|
|
This commit adds str_enc_copy_direct, which is like str_enc_copy but
does not check the frozen status of str1 and does not check the validity
of the encoding of str2. This makes certain string operations ~5% faster.
```ruby
puts(Benchmark.measure do
100_000_000.times do
"a".downcase
end
end)
```
Before this patch:
```
7.587598 0.040858 7.628456 ( 7.669022)
```
After this patch:
```
7.133128 0.039809 7.172937 ( 7.183124)
```
Notes:
Merged: https://github.com/ruby/ruby/pull/7106
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/7071
|
|
The reference updating code for strings is not re-embedding strings
because the code is incorrectly wrapped inside of a
`if (STR_SHARED_P(obj))` clause. Shared strings can't be re-embedded
so this ends up being a no-op. This means that strings can be moved to a
large size pool during compaction, but won't be re-embedded, which would
waste the space.
Notes:
Merged: https://github.com/ruby/ruby/pull/7071
|
|
The following code crashes on my machine:
```
GC.stress = true
str = "testing testing testing"
puts str.capitalize
```
We need to ensure that the object `buffer_anchor` remains on the stack
so it does not get GC'd.
Notes:
Merged: https://github.com/ruby/ruby/pull/7080
|
|
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/6700
|
|
It's questionable whether we want to allow rstrip to work for strings
where the broken coderange occurs before the trailing whitespace and
not after, but this approach is probably simpler, and I don't think
users should expect string operations like rstrip to work on broken
strings.
In some cases, this changes rstrip to raise
Encoding::CompatibilityError instead of ArgumentError. However, as
the problem is related to an encoding issue in the receiver, and due
not due to an issue with an argument, I think
Encoding::CompatibilityError is the more appropriate error.
Fixes [Bug #18931]
Notes:
Merged: https://github.com/ruby/ruby/pull/6282
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/6721
|
|
Notes:
Merged-By: k0kubun <[email protected]>
|
|
During auto-compaction, using length to determine whether or not a
string can be re-embedded may be a problem for newly created strings.
This is because usually it requires a malloc before setting the length.
If the malloc triggers compaction, then the string may be re-embedded
and can cause crashes.
|
|
This commit refactors str_alloc_heap to return a string with the
STR_NOEMBED flag set.
Notes:
Merged: https://github.com/ruby/ruby/pull/6663
|
|
Example, line 3, swapcase! was incorrect. implied that the swapcase! did /not/ change the starting string.
Notes:
Merged: https://github.com/ruby/ruby/pull/6474
|
|
Commit aa2a428 introduced a bug where non-embedded string slices copied
the encoding of the original string. If the original string had a broken
encoding but the slice has valid encoding, then the slice would be
incorrectly marked as broken encoding.
Notes:
Merged: https://github.com/ruby/ruby/pull/6456
|
|
Just like commit 1c16645 for arrays, this commit changes string slices
to be a view rather than a copy even if it can be allocated through VWA.
Notes:
Merged: https://github.com/ruby/ruby/pull/6456
|
|
This commit extracts common code between str_substr and rb_str_subseq
into a function called str_subseq.
This commit also applies optimizations in commit 2e88bca to
rb_str_subseq.
Notes:
Merged: https://github.com/ruby/ruby/pull/6447
|
|
str_new_shared already has all the necessary logic to do this
and is also smart enough to skip this step if the source string
is already a shared string itself.
This saves a useless String allocation on each call.
Notes:
Merged: https://github.com/ruby/ruby/pull/6443
|
|
Leave the new coderange unknown if the original encoding is not
ASCII-compatible. Non-ASCII-compatible encoding strings with valid or
broken coderange can end up as ascii-only.
Fixes 9a8f6e392fbd ("Cheaply derive code range for String#b return
value", 2022-07-25).
|
|
This reverts commit b9f030954a8a1572032f3548b39c5b8ac35792ce.
[Bug #18170]
|
|
UTF-16/UTF-32
* And simplify callers of get_actual_encoding().
* See [Feature #18949].
* See https://github.com/ruby/ruby/pull/6322#issuecomment-1242758474
|
|
Remove the superfluous str_modify_keep_cr() call from rb_str_update().
It ends up calling either rb_str_drop_bytes() or rb_str_splice_0(),
which already does checks if necessary.
The extra call makes the string "independent". This is not always
wanted, in other words, it can keep the same shared root when merely
removing the leading part of a shared string.
Notes:
Merged: https://github.com/ruby/ruby/pull/6336
|
|
That's about 1.30x faster.
Notes:
Merged: https://github.com/ruby/ruby/pull/6334
|
|
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/6306
|
|
|