aboutsummaryrefslogtreecommitdiffstats
path: root/re.c
Commit message (Collapse)AuthorAgeFilesLines
* `Regexp` in `MatchData` can be `nil`Nobuyoshi Nakada2020-01-161-0/+1
| | | | | | | `String#sub` with a string pattern defers creating a `Regexp` until `MatchData#regexp` creates a `Regexp` from the matched string. `Regexp#last_match(group_name)` accessed its content without creating the `Regexp` though. [Bug #16508]
* Revert "Regexp#match{?} with nil raises TypeError as String, Symbol (#1506)"NARUSE, Yui2019-12-041-1/+1
| | | | | This reverts commit 2a22a6b2d8465934e75520a7fdcf522d50890caf. Revert [Feature #13083]
* Revert "Revert nil error and adding deprecation message"NARUSE, Yui2019-12-041-7/+1
| | | | This reverts commit 452bee3ee8d68059fabd9b1c7a75661b14e3933e.
* Revert "Improve warning message"NARUSE, Yui2019-12-041-2/+2
| | | | This reverts commit 31110d820cc1258cbc84b46ecc65b254c7d5529a.
* Deprecate taint/trust and related methods, and make the methods no-opsJeremy Evans2019-11-181-25/+0
| | | | | | This removes the related tests, and puts the related specs behind version guards. This affects all code in lib, including some libraries that may want to support older versions of Ruby.
* Undefine MatchData.allocate [Feature #16294]Nobuyoshi Nakada2019-11-061-0/+1
|
* Improve warning messageKenichi Kamiya2019-11-031-2/+2
| | | | https://github.com/ruby/ruby/pull/2637#discussion_r341812475
* Revert nil error and adding deprecation messageKenichi Kamiya2019-11-031-1/+7
|
* Mention correct class name in uninitialized errorAlan Wu2019-11-011-1/+1
| | | | I think this meant to mention `MatchData`? This is a breaking change, but should be a minor one.
* Regexp#match{?} with nil raises TypeError as String, Symbol (#1506)Kenichi Kamiya2019-10-171-1/+1
| | | | | | | | | | | | | | | | | | | | | | | * {String|Symbol}#match{?} with nil returns falsy To improve consistency with Regexp#match{?} * String#match(nil) returns `nil` instead of TypeError * String#match?(nil) returns `false` instead of TypeError * Symbol#match(nil) returns `nil` instead of TypeError * Symbol#match?(nil) returns `false` instead of TypeError * Prefer exception * Follow empty ENV * Drop outdated specs * Write ruby/spec for above https://github.com/ruby/ruby/pull/1506/files#r183242981 * Fix merge miss
* re.c (match_set_string): add a check for memory allocationYusuke Endoh2019-10-121-1/+2
| | | | Found by Coverity Scan
* drop-in type check for rb_define_singleton_method卜部昌平2019-08-291-1/+1
| | | | | | We can check the function pointer passed to rb_define_singleton_method like how we do so in rb_define_method. Doing so revealed many arity mismatches.
* delete `$` sign from C identifiers卜部昌平2019-08-271-2/+2
| | | | | They lack portability. See also https://travis-ci.org/shyouhei/ruby/jobs/577164015
* rb_define_hooked_variable now free from ANYARGS卜部昌平2019-08-271-10/+16
| | | | | | | | | After 5e86b005c0f2ef30df2f9906c7e2f3abefe286a2, I now think ANYARGS is dangerous and should be extinct. This commit uses rb_gvar_getter_t / rb_gvar_setter_t for rb_define_hooked_variable / rb_define_virtual_variable which revealed lots of function prototype inconsistencies. Some of them were literally decades old, going back to dda5dc00cff334cac373096d444a0fd59e716124.
* Reuse match dataNobuyoshi Nakada2019-07-281-0/+6
| | | | * string.c (rb_str_split_m): reuse occupied match data. [Bug #16024]
* Document encoding of string returned by Regexp.quote [ci skip]Jeremy Evans2019-07-221-2/+2
| | | | | | | | | Also, remove documentation about returning self, which makes no sense as self would be the Regexp class. It could be interpreted as return the argument if no changes were made, but that hasn't been the behavior at least since 1.8.7 (and probably before). Fixes [Bug #10239]
* Remove member char_offset_updated from struct rmatch as member ↵Lourens Naudé2019-04-241-12/+2
| | | | char_offset_num_allocated can serve the same purpose as that predicate
* [DOC] fix markups [ci skip]nobu2019-03-281-41/+41
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67354 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* re.c: [DOC] fix typosstomar2018-12-131-3/+3
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66387 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* [DOC] Fix typos [ci skip]kazu2018-12-131-1/+1
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66383 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Enchance MatchData docs [Bug #14450]naruse2018-12-121-7/+45
| | | | | | From: Victor Shepelev <zverok.offline@gmail.com> git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66350 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Prefer rb_check_arity when 0 or 1 argumentsnobu2018-12-041-4/+2
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66179 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* char is not unsignedshyouhei2018-11-211-4/+5
| | | | | | | | | | It seems that decades ago, ruby was written under assumption that char is unsigned. Which is of course a false assumption. We need to explicitly store a numeric value into an unsigned char variable to tell we expect 0..255 value. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65900 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* char is neither signed nor unsignedshyouhei2018-11-121-5/+6
| | | | | | | | | | read_escaped_byte() returns values of range -1...256. -1 indicates error. So the function basically expects char to be 0..255 range. There is no such guarantee. `char` is not always unsigned. We need to explicitly declare chbuf to be unsigned char. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65677 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Fix call-seq [ci skip]kazu2018-11-071-1/+1
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65591 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* no-op if it is T_STRINGnaruse2018-09-291-0/+3
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64887 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * expand tabs.svn2018-09-291-1/+1
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64885 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Remove unnecessary use of function pointernaruse2018-09-291-1/+1
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64884 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Remove -Wno-parentheses flag.nobu2018-09-211-1/+1
| | | | | | | | [Fix GH-1958] From: Jun Aruga <jaruga@redhat.com> git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64806 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* re.c: do not escape terminator in Regexp.unionnobu2018-03-161-12/+19
| | | | | | | | | | * re.c (rb_reg_str_with_term): change terminator. * re.c (rb_reg_s_union): terminator in source string does not need to be escaped. terminators are outside of regexp source itself. [ruby-core:86149] [Bug #14608] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62779 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* re.c: fixed escaped multibyte charnobu2018-03-111-0/+12
| | | | | | | | * re.c (unescape_nonascii): escaped multibyte character should be copied as-is, just with checking if the encoding matches. https://twitter.com/sakuro/status/972014409986883584 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62718 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* mjit_compile.c: merge initial JIT compilerk0kubun2018-02-041-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | which has been developed by Takashi Kokubun <takashikkbn@gmail> as YARV-MJIT. Many of its bugs are fixed by wanabe <s.wanabe@gmail.com>. This JIT compiler is designed to be a safe migration path to introduce JIT compiler to MRI. So this commit does not include any bytecode changes or dynamic instruction modifications, which are done in original MJIT. This commit even strips off some aggressive optimizations from YARV-MJIT, and thus it's slower than YARV-MJIT too. But it's still fairly faster than Ruby 2.5 in some benchmarks (attached below). Note that this JIT compiler passes `make test`, `make test-all`, `make test-spec` without JIT, and even with JIT. Not only it's perfectly safe with JIT disabled because it does not replace VM instructions unlike MJIT, but also with JIT enabled it stably runs Ruby applications including Rails applications. I'm expecting this version as just "initial" JIT compiler. I have many optimization ideas which are skipped for initial merging, and you may easily replace this JIT compiler with a faster one by just replacing mjit_compile.c. `mjit_compile` interface is designed for the purpose. common.mk: update dependencies for mjit_compile.c. internal.h: declare `rb_vm_insn_addr2insn` for MJIT. vm.c: exclude some definitions if `-DMJIT_HEADER` is provided to compiler. This avoids to include some functions which take a long time to compile, e.g. vm_exec_core. Some of the purpose is achieved in transform_mjit_header.rb (see `IGNORED_FUNCTIONS`) but others are manually resolved for now. Load mjit_helper.h for MJIT header. mjit_helper.h: New. This is a file used only by JIT-ed code. I'll refactor `mjit_call_cfunc` later. vm_eval.c: add some #ifdef switches to skip compiling some functions like Init_vm_eval. win32/mkexports.rb: export thread/ec functions, which are used by MJIT. include/ruby/defines.h: add MJIT_FUNC_EXPORTED macro alis to clarify that a function is exported only for MJIT. array.c: export a function used by MJIT. bignum.c: ditto. class.c: ditto. compile.c: ditto. error.c: ditto. gc.c: ditto. hash.c: ditto. iseq.c: ditto. numeric.c: ditto. object.c: ditto. proc.c: ditto. re.c: ditto. st.c: ditto. string.c: ditto. thread.c: ditto. variable.c: ditto. vm_backtrace.c: ditto. vm_insnhelper.c: ditto. vm_method.c: ditto. I would like to improve maintainability of function exports, but I believe this way is acceptable as initial merging if we clarify the new exports are for MJIT (so that we can use them as TODO list to fix) and add unit tests to detect unresolved symbols. I'll add unit tests of JIT compilations in succeeding commits. Author: Takashi Kokubun <takashikkbn@gmail.com> Contributor: wanabe <s.wanabe@gmail.com> Part of [Feature #14235] --- * Known issues * Code generated by gcc is faster than clang. The benchmark may be worse in macOS. Following benchmark result is provided by gcc w/ Linux. * Performance is decreased when Google Chrome is running * JIT can work on MinGW, but it doesn't improve performance at least in short running benchmark. * Currently it doesn't perform well with Rails. We'll try to fix this before release. --- * Benchmark reslts Benchmarked with: Intel 4.0GHz i7-4790K with 16GB memory under x86-64 Ubuntu 8 Cores - 2.0.0-p0: Ruby 2.0.0-p0 - r62186: Ruby trunk (early 2.6.0), before MJIT changes - JIT off: On this commit, but without `--jit` option - JIT on: On this commit, and with `--jit` option ** Optcarrot fps Benchmark: https://github.com/mame/optcarrot | |2.0.0-p0 |r62186 |JIT off |JIT on | |:--------|:--------|:--------|:--------|:--------| |fps |37.32 |51.46 |51.31 |58.88 | |vs 2.0.0 |1.00x |1.38x |1.37x |1.58x | ** MJIT benchmarks Benchmark: https://github.com/benchmark-driver/mjit-benchmarks (Original: https://github.com/vnmakarov/ruby/tree/rtl_mjit_branch/MJIT-benchmarks) | |2.0.0-p0 |r62186 |JIT off |JIT on | |:----------|:--------|:--------|:--------|:--------| |aread |1.00 |1.09 |1.07 |2.19 | |aref |1.00 |1.13 |1.11 |2.22 | |aset |1.00 |1.50 |1.45 |2.64 | |awrite |1.00 |1.17 |1.13 |2.20 | |call |1.00 |1.29 |1.26 |2.02 | |const2 |1.00 |1.10 |1.10 |2.19 | |const |1.00 |1.11 |1.10 |2.19 | |fannk |1.00 |1.04 |1.02 |1.00 | |fib |1.00 |1.32 |1.31 |1.84 | |ivread |1.00 |1.13 |1.12 |2.43 | |ivwrite |1.00 |1.23 |1.21 |2.40 | |mandelbrot |1.00 |1.13 |1.16 |1.28 | |meteor |1.00 |2.97 |2.92 |3.17 | |nbody |1.00 |1.17 |1.15 |1.49 | |nest-ntimes|1.00 |1.22 |1.20 |1.39 | |nest-while |1.00 |1.10 |1.10 |1.37 | |norm |1.00 |1.18 |1.16 |1.24 | |nsvb |1.00 |1.16 |1.16 |1.17 | |red-black |1.00 |1.02 |0.99 |1.12 | |sieve |1.00 |1.30 |1.28 |1.62 | |trees |1.00 |1.14 |1.13 |1.19 | |while |1.00 |1.12 |1.11 |2.41 | ** Discourse's script/bench.rb Benchmark: https://github.com/discourse/discourse/blob/v1.8.7/script/bench.rb NOTE: Rails performance was somehow a little degraded with JIT for now. We should fix this. (At least I know opt_aref is performing badly in JIT and I have an idea to fix it. Please wait for the fix.) *** JIT off Your Results: (note for timings- percentile is first, duration is second in millisecs) categories_admin: 50: 17 75: 18 90: 22 99: 29 home_admin: 50: 21 75: 21 90: 27 99: 40 topic_admin: 50: 17 75: 18 90: 22 99: 32 categories: 50: 35 75: 41 90: 43 99: 77 home: 50: 39 75: 46 90: 49 99: 95 topic: 50: 46 75: 52 90: 56 99: 101 *** JIT on Your Results: (note for timings- percentile is first, duration is second in millisecs) categories_admin: 50: 19 75: 21 90: 25 99: 33 home_admin: 50: 24 75: 26 90: 30 99: 35 topic_admin: 50: 19 75: 20 90: 25 99: 30 categories: 50: 40 75: 44 90: 48 99: 76 home: 50: 42 75: 48 90: 51 99: 89 topic: 50: 49 75: 55 90: 58 99: 99 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62197 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* rb_reg_raise_str marked as NORETURNshyouhei2018-01-181-0/+2
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61920 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* rb_enc_reg_raise marked as NORETURNshyouhei2018-01-181-0/+2
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61919 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* rb_reg_enc_error marked as NORETURNshyouhei2018-01-181-0/+1
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61918 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* rb_reg_raise marked as NORETURNshyouhei2018-01-181-0/+2
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61917 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* internal.h: remove dependecy on ruby/encoding.hnobu2018-01-091-1/+2
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61713 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* ULL suffix is a C99ismshyouhei2018-01-041-7/+1
| | | | | | ... and why not just use ~0 instead? git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61593 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* [DOC] Fix exception class [ci skip]kazu2017-12-131-2/+2
| | | | | | ref https://github.com/rurema/doctree/pull/816 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61212 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Regexp#===: Use `\A` and `\z` instead of `^` and `$`kazu2017-11-161-3/+3
| | | | | | | [ci skip] ref https://github.com/rurema/doctree/pull/812 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60784 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* [Feature #13712] String#start_with? supports regexpnaruse2017-10-211-0/+77
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60234 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* use rb_hash_new_with_size()nobu2017-10-021-3/+3
| | | | git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60101 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* re.c: remove unused rb_memcmp() functionrhe2017-09-181-8/+0
| | | | | | It is no longer used or exported as of r13641. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59953 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* re.c: options for sub-regexpnobu2017-08-111-1/+1
| | | | | | | * re.c (rb_reg_to_s): needs embedded options to check syntax of sub-regexp. [ruby-core:82328] [Bug #13798] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59574 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* refine a warning message.akr2017-03-021-1/+1
| | | | | | | | | The "n" option for regexp, /.../n, is historical. It doesn't mean the regexp works as binary match since Ruby 1.9. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57759 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* refine warning message for binary regexp /.../n.akr2017-02-221-1/+1
| | | | | | | | Reported by Herwin W. [ruby-core:78592] [Bug #13024] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57684 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* re.c: consider the case of RMatch::regexp is nilrhe2016-12-201-2/+7
| | | | | | | | Follow r49675, r57098 and r57110. Don't assume RMatch::regexp always contains a valid Regexp instance; it will be Qnil if the MatchData is created by rb_backref_set_string(). [ruby-core:78741] [Bug #13054] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57123 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* re.c: RB_TYPE_Pnobu2016-12-191-22/+14
| | | | | | | * re.c (match_backref_number, namev_to_backref_number): use RB_TYPE_P instead of switching by TYPE. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57114 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* re.c: NAME_TO_NUMBERnobu2016-12-191-6/+9
| | | | | | | * re.c (namev_to_backref_number, rb_reg_regsub): extract name to backref number check as NAME_TO_NUMBER. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57112 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* re.c: use name_to_backref_numbernobu2016-12-181-5/+4
| | | | | | | * re.c (match_backref_number): use name_to_backref_number for casts. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57110 b2dd03c8-39d4-4d8f-98ff-823fe69b080e