summaryrefslogtreecommitdiff
path: root/re.c
diff options
context:
space:
mode:
authorYusuke Endoh <mame@ruby-lang.org>2022-10-24 18:21:30 +0900
committerYusuke Endoh <mame@ruby-lang.org>2022-10-24 18:21:30 +0900
commit67ed70da615c7fa5dc46c30eb3e966b903ef1f8b (patch)
treeaa00211975029fefe78f15489c1222245e7c9e46 /re.c
parentef01482f64df9bcd7adb2b64ca6ab96f55f42c43 (diff)
downloadruby-67ed70da615c7fa5dc46c30eb3e966b903ef1f8b.tar.gz
Refactor timeout-setting code to a function
Diffstat (limited to 're.c')
-rw-r--r--re.c25
1 files changed, 12 insertions, 13 deletions
diff --git a/re.c b/re.c
index b21def1b7b..c65e4a58eb 100644
--- a/re.c
+++ b/re.c
@@ -3731,6 +3731,16 @@ str_to_option(VALUE str)
return flag;
}
+static void
+set_timeout(rb_hrtime_t *hrt, VALUE timeout)
+{
+ double timeout_d = NIL_P(timeout) ? 0.0 : NUM2DBL(timeout);
+ if (!NIL_P(timeout) && timeout_d <= 0) {
+ rb_raise(rb_eArgError, "invalid timeout: %"PRIsVALUE, timeout);
+ }
+ double2hrtime(hrt, timeout_d);
+}
+
/*
* call-seq:
* Regexp.new(string, options = 0, n_flag = nil, timeout: nil) -> regexp
@@ -3847,13 +3857,7 @@ rb_reg_initialize_m(int argc, VALUE *argv, VALUE self)
regex_t *reg = RREGEXP_PTR(self);
- {
- double timeout_d = NIL_P(timeout) ? 0.0 : NUM2DBL(timeout);
- if (!NIL_P(timeout) && timeout_d <= 0) {
- rb_raise(rb_eArgError, "invalid timeout: %"PRIsVALUE, timeout);
- }
- double2hrtime(&reg->timelimit, timeout_d);
- }
+ set_timeout(&reg->timelimit, timeout);
return self;
}
@@ -4478,14 +4482,9 @@ rb_reg_s_timeout_get(VALUE dummy)
static VALUE
rb_reg_s_timeout_set(VALUE dummy, VALUE timeout)
{
- double timeout_d = NIL_P(timeout) ? 0.0 : NUM2DBL(timeout);
-
rb_ractor_ensure_main_ractor("can not access Regexp.timeout from non-main Ractors");
- if (!NIL_P(timeout) && timeout_d <= 0) {
- rb_raise(rb_eArgError, "invalid timeout: %"PRIsVALUE, timeout);
- }
- double2hrtime(&rb_reg_match_time_limit, timeout_d);
+ set_timeout(&rb_reg_match_time_limit, timeout);
return timeout;
}