aboutsummaryrefslogtreecommitdiffstats
path: root/string.c
Commit message (Collapse)AuthorAgeFilesLines
* Let String#slice! return nil (#3533)Soutaro Matsumoto2020-09-111-1/+4
| | | Returns `nil` instead of an empty string when non-integer number is given (to make it 2.7 compatible).
* Added Symbol#nameNobuyoshi Nakada2020-09-041-0/+1
| | | https://bugs.ruby-lang.org/issues/16150#change-87446
* Partial compliance with doc/method_documentation.rdoc in string.c (#3436)Burdette Lamar2020-08-201-23/+4
| | | Removes references to *-convertible thingies.
* register_fstring: avoid duping the passed string when possibleJean Boussier2020-08-191-1/+2
| | | | | | | | If the passed string is frozen, bare and not shared, then there is no need to duplicate it. Ref: 4ab69ebbd7cef8539f687e1f948845d076461dc6 Ref: https://bugs.ruby-lang.org/issues/11386
* [DOC] fixed a missing markupNobuyoshi Nakada2020-08-151-1/+1
|
* rb_str_{index,rindex}_m: Handle /\K/ in patternKasumi Hanazuki2020-08-131-5/+14
| | | | | | | | | | | | | | | | | | | | | | | | When the pattern Regexp given to String#index and String#rindex contain a /\K/ (lookbehind) operator, these methods return the position where the beginning of the lookbehind pattern matches, while they are expected to return the position where the \K matches. ``` # without patch "abcdbce".index(/b\Kc/) # => 1 "abcdbce".rindex(/b\Kc/) # => 4 ``` This patch fixes this problem by using BEG(0) instead of the return value of rb_reg_search. ``` # with patch "abcdbce".index(/b\Kc/) # => 2 "abcdbce".rindex(/b\Kc/) # => 5 ``` Fixes [Bug #17118]
* rb_str_{partition,rpartition}_m: Handle /\K/ in patternKasumi Hanazuki2020-08-131-23/+22
| | | | | | | | | | | | | | | | | | | | | | | | | | | When the pattern given to String#partition and String#rpartition contain a /\K/ (lookbehind) operator, the methods return strings sliced at incorrect positions. ``` # without patch "abcdbce".partition(/b\Kc/) # => ["a", "c", "cdbce"] "abcdbce".rpartition(/b\Kc/) # => ["abcd", "c", "ce"] ``` This patch fixes the problem by using BEG(0) instead of the return value of rb_reg_search. ``` # with patch "abcdbce".partition(/b\Kc/) # => ["ab", "c", "dbce"] "abcdbce".rpartition(/b\Kc/) # => ["abcdb", "c", "e"] ``` As a side-effect this patch makes String#partition 2x faster when the pattern is a costly Regexp by performing Regexp search only once, which was unexpectedly done twice in the original implementation. Fixes [Bug #17119]
* string.c(rb_str_split_m): Handle /\K/ correctlyKasumi Hanazuki2020-08-121-1/+2
| | | | | | | Use BEG(0) instead of the result of rb_reg_search to handle the cases when the separator Regexp contains /\K/ (lookbehind) operator. Fixes [Bug #17113]
* Removed non-ASCII code to suppress warnings by localized compilersNobuyoshi Nakada2020-08-101-4/+4
|
* Adjust indentNobuyoshi Nakada2020-08-101-1/+1
|
* Use https instead of httpKazuhiro NISHIYAMA2020-07-281-1/+1
|
* add UNREACHABLE_RETURN卜部昌平2020-06-291-0/+2
| | | | | | Not every compilers understand that rb_raise does not return. When a function does not end with a return statement, such compilers can issue warnings. We would better tell them about reachabilities.
* rb_str_partition: do not goto into a branch卜部昌平2020-06-291-2/+4
| | | | | I'm not necessarily against every goto in general, but jumping into a branch is definitely a bad idea. Better refactor.
* rb_str_crypt: do not goto into a branch卜部昌平2020-06-291-2/+4
| | | | | I'm not necessarily against every goto in general, but jumping into a branch is definitely a bad idea. Better refactor.
* trnext: do not goto into a branch卜部昌平2020-06-291-1/+1
| | | | | I'm not necessarily against every goto in general, but jumping into a branch is definitely a bad idea. Better refactor.
* chompped_length: do not goto into a branch卜部昌平2020-06-291-30/+34
| | | | | I'm not necessarily against every goto in general, but jumping into a branch is definitely a bad idea. Better refactor.
* get_pat_quoted: do not goto into a branch卜部昌平2020-06-291-3/+1
| | | | | I'm not necessarily against every goto in general, but jumping into a branch is definitely a bad idea. Better refactor.
* get_pat: do not goto into a branch卜部昌平2020-06-291-3/+1
| | | | | I'm not necessarily against every goto in general, but jumping into a branch is definitely a bad idea. Better refactor.
* rb_str_slice_bang: do not goto into a branch卜部昌平2020-06-291-7/+12
| | | | | I'm not necessarily against every goto in general, but jumping into a branch is definitely a bad idea. Better refactor.
* rb_str_aset: do not goto into a branch卜部昌平2020-06-291-11/+6
| | | | | I'm not necessarily against every goto in general, but jumping into a branch is definitely a bad idea. Better refactor.
* rb_str_subpat_set: do not goto into a branch卜部昌平2020-06-291-5/+1
| | | | | I'm not necessarily against every goto in general, but jumping into a branch is definitely a bad idea. Better refactor.
* rb_str_update: do not goto into a branch卜部昌平2020-06-291-5/+1
| | | | | I'm not necessarily against every goto in general, but jumping into a branch is definitely a bad idea. Better refactor.
* rb_str_match: do not goto into a branch卜部昌平2020-06-291-3/+1
| | | | | I'm not necessarily against every goto in general, but jumping into a branch is definitely a bad idea. Better refactor.
* rb_str_rindex_m: do not goto into a branch卜部昌平2020-06-291-19/+4
| | | | | I'm not necessarily against every goto in general, but jumping into a branch is definitely a bad idea. Better refactor.
* rb_str_index_m: do not goto into a branch卜部昌平2020-06-291-19/+4
| | | | | I'm not necessarily against every goto in general, but jumping into a branch is definitely a bad idea. Better refactor.
* rb_enc_cr_str_buf_cat: do not goto into a branch卜部昌平2020-06-291-3/+5
| | | | | I'm not necessarily against every goto in general, but jumping into a branch is definitely a bad idea. Better refactor.
* add static modifier for rb_str_ord funcS-H-GAMELINKS2020-05-271-1/+1
|
* Fix typos [ci skip]Kazuhiro NISHIYAMA2020-05-171-5/+5
|
* [ci skip] Enhanced rdoc for String.new (#3067)Burdette Lamar2020-05-151-15/+88
| | | | | | | * Per @nobu review * Enhanced rdoc for String.new * Respond to review
* Optimize String#splitNobuyoshi Nakada2020-05-121-26/+52
| | | | | | | | | | | | | | | | | | Optimized `String#split` with `/ /` (single space regexp) as simple string splitting. [ruby-core:98272] | |compare-ruby|built-ruby| |:--------------|-----------:|---------:| |re_space-1 | 432.786k| 1.539M| | | -| 3.56x| |re_space-10 | 76.231k| 191.547k| | | -| 2.51x| |re_space-100 | 8.152k| 19.557k| | | -| 2.40x| |re_space-1000 | 837.405| 2.022k| | | -| 2.41x| ruby-core:98272: https://bugs.ruby-lang.org/issues/15771#change-85511
* sed -i 's|ruby/impl|ruby/internal|'卜部昌平2020-05-111-1/+1
| | | | To fix build failures.
* sed -i s|ruby/3|ruby/impl|g卜部昌平2020-05-111-1/+1
| | | | This shall fix compile errors.
* remove unused rb_str_clear define (#3059)S.H2020-04-251-2/+0
|
* Use UNREACHABLE_RETURN for non-void functionNobuyoshi Nakada2020-04-161-2/+1
|
* Add {Regexp,String}#match with block to call-seq [ci skip]Kazuhiro NISHIYAMA2020-04-141-2/+2
|
* Merge pull request #2991 from shyouhei/ruby.h卜部昌平2020-04-081-1/+1
| | | Split ruby.h
* Warn non-nil `$/` [Feature #14240]Nobuyoshi Nakada2020-02-231-0/+15
|
* Get rid of warnings/exceptions at cleanupNobuyoshi Nakada2020-02-131-0/+1
| | | | | | | | After the encoding index instance variable is removed when all instance variables are removed in `obj_free`, then `rb_str_free` causes uninitialized instance variable warning and nil-to-integer conversion exception. Both cases result in object allocation during GC, and crashes.
* Copy non-inlined encoding indexNobuyoshi Nakada2020-02-121-0/+6
|
* Make temporary lock string encoding freeNobuyoshi Nakada2020-02-121-2/+9
| | | | | As a temporary lock string is hidden, it can not have instance variables, including non-inlined encoding index.
* Improve `String#slice!` performanceNobuyoshi Nakada2020-01-311-15/+69
| | | | | | | | | | | | | | Instead of searching twice to extract and to delete, extract and delete the found position at the first search. This makes faster nearly twice, for regexps and strings. | |compare-ruby|built-ruby| |:-------------|-----------:|---------:| |regexp-short | 2.143M| 3.918M| |regexp-long | 105.162k| 205.410k| |string-short | 3.789M| 7.964M| |string-long | 1.301M| 2.457M|
* Make `empty_string` a fake stringNobuyoshi Nakada2020-01-311-9/+9
|
* Avoid allocating a temporary empty string in String#slice!Jean Boussier2020-01-311-3/+8
|
* Added rb_warn_deprecated_to_removeNobuyoshi Nakada2020-01-231-2/+2
| | | | | Warn the deprecation and future removal, with obeying the warning flag.
* Make taint warnings non-verbose instead of verboseJeremy Evans2020-01-221-2/+2
|
* Fix `String#partition`Nobuyoshi Nakada2020-01-161-1/+0
| | | | | Split with the matched part when the separator matches the empty part at the beginning. [Bug #11014]
* [DOC] Improve docs for String#matchMarcus Stollsteimer2020-01-081-8/+8
| | | | Fix invalid code to make it syntax highlighted; other small fixes.
* Improve docs for String#=~Marcus Stollsteimer2020-01-081-9/+14
| | | | | | | | Move existing example to the corresponding paragraph and add an example for `string =~ regexp` vs. `regexp =~ string`; avoid using the receiver's identifier from the call-seq because it does not appear in rendered HTML docs; mention deprecation of Object#=~; fix some markup and typos.
* decouple internal.h headers卜部昌平2019-12-261-16/+31
| | | | | | | | | | | | | | | | | | Saves comitters' daily life by avoid #include-ing everything from internal.h to make each file do so instead. This would significantly speed up incremental builds. We take the following inclusion order in this changeset: 1. "ruby/config.h", where _GNU_SOURCE is defined (must be the very first thing among everything). 2. RUBY_EXTCONF_H if any. 3. Standard C headers, sorted alphabetically. 4. Other system headers, maybe guarded by #ifdef 5. Everything else, sorted alphabetically. Exceptions are those win32-related headers, which tend not be self- containing (headers have inclusion order dependencies).
* Refined the warning message for $, and $;Nobuyoshi Nakada2019-12-201-1/+1
| | | | [Bug #16438]