summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKoichi Sasada <ko1@atdot.net>2025-10-24 16:58:41 +0900
committerKoichi Sasada <ko1@atdot.net>2025-10-30 18:04:08 +0900
commit09e9247edc35b910bf8ca49c05151709929b79b4 (patch)
treee13f1d905f3d134a623de93f2c131af3aeaaaf7a
parent860bad854f9b9dcc565f20387eaf49fff6110768 (diff)
MatchData may refer a String
-rw-r--r--ractor.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/ractor.c b/ractor.c
index 2820a848a2..29eae00562 100644
--- a/ractor.c
+++ b/ractor.c
@@ -3,9 +3,9 @@
#include "ruby/ruby.h"
#include "ruby/thread.h"
#include "ruby/ractor.h"
+#include "ruby/re.h"
#include "ruby/thread_native.h"
#include "vm_core.h"
-#include "eval_intern.h"
#include "vm_sync.h"
#include "ractor_core.h"
#include "internal/complex.h"
@@ -1276,7 +1276,6 @@ obj_traverse_i(VALUE obj, struct obj_traverse_data *data)
case T_REGEXP:
case T_FILE:
case T_SYMBOL:
- case T_MATCH:
break;
case T_OBJECT:
@@ -1318,6 +1317,10 @@ obj_traverse_i(VALUE obj, struct obj_traverse_data *data)
}
break;
+ case T_MATCH:
+ if (obj_traverse_i(RMATCH(obj)->str, data)) return 1;
+ break;
+
case T_RATIONAL:
if (obj_traverse_i(RRATIONAL(obj)->num, data)) return 1;
if (obj_traverse_i(RRATIONAL(obj)->den, data)) return 1;
@@ -1769,7 +1772,6 @@ obj_traverse_replace_i(VALUE obj, struct obj_traverse_replace_data *data)
case T_REGEXP:
case T_FILE:
case T_SYMBOL:
- case T_MATCH:
break;
case T_STRING:
rb_str_make_independent(obj);
@@ -1854,6 +1856,10 @@ obj_traverse_replace_i(VALUE obj, struct obj_traverse_replace_data *data)
}
break;
+ case T_MATCH:
+ CHECK_AND_REPLACE(obj, RMATCH(obj)->str);
+ break;
+
case T_RATIONAL:
CHECK_AND_REPLACE(obj, RRATIONAL(obj)->num);
CHECK_AND_REPLACE(obj, RRATIONAL(obj)->den);