ruby-changes:22001
From: nobu <ko1@a...>
Date: Thu, 15 Dec 2011 13:16:11 +0900 (JST)
Subject: [ruby-changes:22001] nobu:r34050 (trunk): * regcomp.c (onig_region_memsize): implemented for memsize_of().
nobu 2011-12-15 13:15:54 +0900 (Thu, 15 Dec 2011) New Revision: 34050 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=34050 Log: * regcomp.c (onig_region_memsize): implemented for memsize_of(). * ext/objspace/objspace.c (memsize_of): use it. Modified files: trunk/ChangeLog trunk/ext/objspace/objspace.c trunk/regcomp.c trunk/regint.h trunk/test/objspace/test_objspace.rb Index: regcomp.c =================================================================== --- regcomp.c (revision 34049) +++ regcomp.c (revision 34050) @@ -5244,6 +5244,7 @@ onig_memsize(const regex_t *reg) { size_t size = sizeof(regex_t); + if (!reg) return 0; if (IS_NOT_NULL(reg->p)) size += reg->alloc; if (IS_NOT_NULL(reg->exact)) size += reg->exact_end - reg->exact; if (IS_NOT_NULL(reg->int_map)) size += sizeof(int) * ONIG_CHAR_TABLE_SIZE; @@ -5254,6 +5255,15 @@ return size; } +size_t +onig_region_memsize(const OnigRegion *regs) +{ + size_t size = sizeof(*regs); + if (!regs) return 0; + size += regs->allocated * (sizeof(*regs->beg) + sizeof(*regs->end)); + return size; +} + #define REGEX_TRANSFER(to,from) do {\ (to)->state = ONIG_STATE_MODIFY;\ onig_free_body(to);\ Index: ChangeLog =================================================================== --- ChangeLog (revision 34049) +++ ChangeLog (revision 34050) @@ -1,3 +1,9 @@ +Thu Dec 15 13:15:51 2011 Nobuyoshi Nakada <nobu@r...> + + * regcomp.c (onig_region_memsize): implemented for memsize_of(). + + * ext/objspace/objspace.c (memsize_of): use it. + Thu Dec 15 10:44:54 2011 Nobuyoshi Nakada <nobu@r...> * array.c (rb_ary_reject_bang, rb_ary_delete_if): update rdoc. Index: regint.h =================================================================== --- regint.h (revision 34049) +++ regint.h (revision 34050) @@ -842,6 +842,7 @@ extern int onigenc_property_list_init P_((ONIGENC_INIT_PROPERTY_LIST_FUNC_TYPE)); extern size_t onig_memsize P_((const regex_t *reg)); +extern size_t onig_region_memsize P_((const struct re_registers *regs)); #if defined __GNUC__ && __GNUC__ >= 4 #pragma GCC visibility pop Index: ext/objspace/objspace.c =================================================================== --- ext/objspace/objspace.c (revision 34049) +++ ext/objspace/objspace.c (revision 34050) @@ -97,7 +97,7 @@ case T_MATCH: if (RMATCH(obj)->rmatch) { struct rmatch *rm = RMATCH(obj)->rmatch; - size += sizeof(struct re_registers); /* TODO: onig_region_memsize(&rm->regs); */ + size += onig_region_memsize(&rm->regs); size += sizeof(struct rmatch_offset) * rm->char_offset_num_allocated; size += sizeof(struct rmatch); } Index: test/objspace/test_objspace.rb =================================================================== --- test/objspace/test_objspace.rb (revision 34049) +++ test/objspace/test_objspace.rb (revision 34050) @@ -17,6 +17,10 @@ f.close assert_kind_of(Integer, ObjectSpace.memsize_of(/a/.match("a"))) assert_kind_of(Integer, ObjectSpace.memsize_of(Struct.new(:a))) + + assert_operator(ObjectSpace.memsize_of(Regexp.new("(a)"*1000).match("a"*1000)), + :>, + ObjectSpace.memsize_of(//.match(""))) end def test_memsize_of_all -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/