diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-02-16 20:08:35 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-02-16 20:08:35 +0000 |
commit | 71c5e485989cfead51f62f36d0d694cab65f855f (patch) | |
tree | 7d9961457503867eb9acdaf6b7c6786140c89bbb /gc.c | |
parent | 5b461c699623240b9b1305d567945ce7ffa297f4 (diff) | |
download | ruby-71c5e485989cfead51f62f36d0d694cab65f855f.tar.gz |
* include/ruby/re.h (struct rmatch_offset): new struct for character
offsets.
(struct rmatch): new struct.
(struct RMatch): reference struct rmatch.
(RMATCH_REGS): new macro.
* re.c (match_alloc): initialize struct rmatch.
(pair_byte_cmp): new function.
(update_char_offset): update character offsets.
(match_init_copy): copy regexp and character offsets.
(match_sublen): removed.
(match_offset): use update_char_offset.
(match_begin): ditto.
(match_end): ditto.
(rb_reg_search): make character offset updated flag false.
(match_size): use RMATCH_REGS.
(match_backref_number): ditto.
(rb_reg_nth_defined): ditto.
(rb_reg_nth_match): ditto.
(rb_reg_match_pre): ditto.
(rb_reg_match_post): ditto.
(rb_reg_match_last): ditto.
(match_array): ditto.
(match_aref): ditto.
(match_values_at): ditto.
(match_inspect): ditto.
* string.c (rb_str_subpat_set): use RMATCH_REGS.
(rb_str_sub_bang): ditto.
(str_gsub): ditto.
(rb_str_split_m): ditto.
(scan_once): ditto.
* gc.c (obj_free): free character offsets.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@15513 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'gc.c')
-rw-r--r-- | gc.c | 9 |
1 files changed, 6 insertions, 3 deletions
@@ -1322,9 +1322,12 @@ obj_free(VALUE obj) } break; case T_MATCH: - if (RANY(obj)->as.match.regs) { - onig_region_free(RANY(obj)->as.match.regs, 0); - RUBY_CRITICAL(free(RANY(obj)->as.match.regs)); + if (RANY(obj)->as.match.rmatch) { + struct rmatch *rm = RANY(obj)->as.match.rmatch; + onig_region_free(&rm->regs, 0); + if (rm->char_offset) + RUBY_CRITICAL(free(rm->char_offset)); + RUBY_CRITICAL(free(rm)); } break; case T_FILE: |