summaryrefslogtreecommitdiff
path: root/string.c
AgeCommit message (Collapse)Author
2023-06-28[Bug #19746] `String#index` with regexp should clear `$~` unless matchedNobuyoshi Nakada
Notes: Merged: https://github.com/ruby/ruby/pull/7988
2023-06-20[DOC] Regexp doc (#7923)Burdette Lamar
Notes: Merged-By: peterzhu2118 <[email protected]>
2023-06-09Assign into optimal size pools using String#split("")Matt Valentine-House
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
2023-06-06Unify length field for embedded and heap strings (#7908)Peter Zhu
* 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]>
2023-06-05[DOC] Update flags doc for stringsPeter Zhu
The length of an embedded string is no longer in the flags.
2023-06-01Simplify duplicated codePeter Zhu
The capacity of the string can be calculated using the str_capacity function. Notes: Merged: https://github.com/ruby/ruby/pull/7879
2023-06-01Don't refetch ptr and lenPeter Zhu
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
2023-05-26Remove dead code in string.cPeter Zhu
The STR_DEC_LEN macro is not used.
2023-04-06[Feature #19474] Refactor NEWOBJ macrosMatt Valentine-House
NEWOBJ_OF is now our canonical newobj macro. It takes an optional ec Notes: Merged: https://github.com/ruby/ruby/pull/7393
2023-04-04[Feature #19579] Remove !USE_RVARGC code (#7655)Peter Zhu
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]>
2023-03-18RJIT: Optimize String#bytesizeTakashi Kokubun
2023-03-06Stop exporting symbols for MJITTakashi Kokubun
Notes: Merged: https://github.com/ruby/ruby/pull/7459
2023-03-05Optimize String#getbyteTakashi Kokubun
Notes: Merged: https://github.com/ruby/ruby/pull/7448
2023-03-03rb_str_modify_expand: clear the string coderangeRômulo Ceccon
[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
2023-02-27Fix spelling (#7389)John Bampton
Notes: Merged-By: k0kubun <[email protected]>
2023-02-27Symbol#end_with? accepts Strings onlyAdam Daniels
Regular expressions are not supported (same as String#end_with?). Notes: Merged: https://github.com/ruby/ruby/pull/7384
2023-02-19Remove (newly unneeded) remarks about aliasesBurdetteLamar
2023-02-19[DOC] Small adjustment for String method docszverok
* 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
2023-02-09Rename rb_str_splice_{0,1} -> rb_str_update_{0,1}Matt Valentine-House
Notes: Merged: https://github.com/ruby/ruby/pull/7278
2023-02-09Remove alias macro rb_str_spliceMatt Valentine-House
Notes: Merged: https://github.com/ruby/ruby/pull/7278
2023-02-09Merge gc.h and internal/gc.hMatt Valentine-House
[Feature #19425] Notes: Merged: https://github.com/ruby/ruby/pull/7273
2023-02-03Mark "mapping_buffer" as write barrier protectedJean Boussier
It doesn't have any reference so it can be marked as protected. Notes: Merged: https://github.com/ruby/ruby/pull/7238
2023-01-20[Feature #19314] Add new arguments of String#bytespliceShugo Maeda
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
2023-01-19String#bytesplice should return selfShugo Maeda
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.
2023-01-13Use str_enc_copy_direct to improve performanceMatt Valentine-House
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
2023-01-13Remove MIN_PRE_ALLOC_SIZE from Strings.Matt Valentine-House
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
2023-01-12Add str_enc_copy_directPeter Zhu
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
2023-01-09Set STR_SHARED_ROOT flag on root of stringPeter Zhu
Notes: Merged: https://github.com/ruby/ruby/pull/7071
2023-01-09Fix re-embedding of strings during compactionPeter Zhu
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
2023-01-06[Bug #19319] Fix crash in rb_str_casemapPeter Zhu
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
2022-12-22[DOC] Fix typoNobuyoshi Nakada
2022-12-02Introduce encoding check macroS-H-GAMELINKS
Notes: Merged: https://github.com/ruby/ruby/pull/6700
2022-11-24Make String#rstrip{,!} raise Encoding::CompatibilityError for broken coderangeJeremy Evans
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
2022-11-16Using UNDEF_P macroS-H-GAMELINKS
Notes: Merged: https://github.com/ruby/ruby/pull/6721
2022-11-15Rewrite Symbol#to_sym and #intern in Ruby (#6683)Takashi Kokubun
Notes: Merged-By: k0kubun <[email protected]>
2022-11-14Use string's capacity to determine if reembeddablePeter Zhu
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.
2022-11-03Make str_alloc_heap return a STR_NOEMBED stringPeter Zhu
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
2022-10-04Correcting example for swapcase! methodVaevictusnet
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
2022-09-28Fix bug when slicing a string with broken encodingPeter Zhu
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
2022-09-28Make string slices views rather than copiesPeter Zhu
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
2022-09-26Refactor str_substr and str_subseqPeter Zhu
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
2022-09-26string.c: don't create a frozen copy for str_new_sharedJean Boussier
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
2022-09-26Fix coderange calculation in String#bKazuki Yamaguchi
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).
2022-09-23Revert "Revert "error.c: Let Exception#inspect inspect its message""Yusuke Endoh
This reverts commit b9f030954a8a1572032f3548b39c5b8ac35792ce. [Bug #18170]
2022-09-12Remove get_actual_encoding() and the dynamic endian detection for dummy ↵Benoit Daloze
UTF-16/UTF-32 * And simplify callers of get_actual_encoding(). * See [Feature #18949]. * See https://github.com/ruby/ruby/pull/6322#issuecomment-1242758474
2022-09-09Avoid unnecessary copying when removing the leading part of a stringKazuki Yamaguchi
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
2022-09-08rb_str_concat_literals: use rb_str_buf_appendJean Boussier
That's about 1.30x faster. Notes: Merged: https://github.com/ruby/ruby/pull/6334
2022-09-08[DOC] non-positive `base` in `Kernel#Integer` and `String#to_i`Nobuyoshi Nakada
2022-08-31[Bug #18973] Promote US-ASCII to ASCII-8BIT when adding 8-bit charNobuyoshi Nakada
Notes: Merged: https://github.com/ruby/ruby/pull/6306
2022-08-27[DOC] Fix a typo [ci skip]Nobuyoshi Nakada