diff options
author | Takashi Kokubun <takashikkbn@gmail.com> | 2023-07-27 15:28:23 -0700 |
---|---|---|
committer | Takashi Kokubun <takashikkbn@gmail.com> | 2023-07-27 15:30:10 -0700 |
commit | 97219721752e7cc1eda51131d6a3cd753d37276c (patch) | |
tree | cd797f16d54a35098125e46f2a7564fb1bb45e44 /include | |
parent | 5669a28fde3b767953b5a7d6e63cd8e53f0185eb (diff) | |
download | ruby-97219721752e7cc1eda51131d6a3cd753d37276c.tar.gz |
Resurrect rb_reg_prepare_re C API
Existing strscan releases rely on this C API. It means that the current
Ruby master doesn't work if your Gemfile.lock has strscan unless it's
locked to 3.0.7, which is not released yet.
To fix it, let's not remove the C API we've exposed to users.
Diffstat (limited to 'include')
-rw-r--r-- | include/ruby/re.h | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/include/ruby/re.h b/include/ruby/re.h index 52faeb1e98..f86d6f26cf 100644 --- a/include/ruby/re.h +++ b/include/ruby/re.h @@ -106,6 +106,27 @@ long rb_reg_adjust_startpos(VALUE re, VALUE str, long pos, int dir); VALUE rb_reg_quote(VALUE str); /** + * Exercises various checks and preprocesses so that the given regular + * expression can be applied to the given string. The preprocess here includes + * (but not limited to) for instance encoding conversion. + * + * @param[in] re Target regular expression. + * @param[in] str What `re` is about to run on. + * @exception rb_eArgError `re` does not fit for `str`. + * @exception rb_eEncCompatError `re` and `str` are incompatible. + * @exception rb_eRegexpError `re` is malformed. + * @return A preprocessesed pattern buffer ready to be applied to `str`. + * @note The return value is manages by our GC. Don't free. + * + * @internal + * + * The return type, `regex_t *`, is defined in `<ruby/onigmo.h>`, _and_ + * _conflicts_ with POSIX's `<regex.h>`. We can no longer save the situation + * at this point. Just don't mix the two. + */ +regex_t *rb_reg_prepare_re(VALUE re, VALUE str); + +/** * Runs a regular expression match using function `match`. Performs preparation, * error handling, and memory cleanup. * |