diff options
| author | Koichi Sasada <ko1@atdot.net> | 2025-10-24 16:58:41 +0900 |
|---|---|---|
| committer | Koichi Sasada <ko1@atdot.net> | 2025-10-30 18:04:08 +0900 |
| commit | 09e9247edc35b910bf8ca49c05151709929b79b4 (patch) | |
| tree | e13f1d905f3d134a623de93f2c131af3aeaaaf7a | |
| parent | 860bad854f9b9dcc565f20387eaf49fff6110768 (diff) | |
MatchData may refer a String
| -rw-r--r-- | ractor.c | 12 |
1 files changed, 9 insertions, 3 deletions
@@ -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); |
