summaryrefslogtreecommitdiff
path: root/vm.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-09-24 08:36:53 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-09-24 08:36:53 +0000
commit2314b80d4c5ed712308f6b32aa8bf865d8d9ffff (patch)
tree8a531352ebd8b352e6c1b5cadeeb7d49d28da147 /vm.c
parent8ac52a95d577d00ed7b783fde8bca5b2b76cb404 (diff)
Feature #7035
* compile.c (defined_expr), insns.def (defined): share single frozen strings. [EXPERIMENTAL] [ruby-core:47558][Feature #7035] * iseq.c (rb_iseq_defined_string): make expression strings. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37025 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'vm.c')
-rw-r--r--vm.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/vm.c b/vm.c
index 55ccfe7939..f842a6dfba 100644
--- a/vm.c
+++ b/vm.c
@@ -1515,6 +1515,9 @@ rb_vm_mark(void *ptr)
if (vm->trap_list[i].cmd)
rb_gc_mark(vm->trap_list[i].cmd);
}
+ if (vm->defined_strings) {
+ rb_gc_mark_locations(vm->defined_strings, vm->defined_strings + DEFINED_EXPR);
+ }
}
RUBY_MARK_LEAVE("vm");
@@ -1560,7 +1563,12 @@ vm_memsize(const void *ptr)
{
if (ptr) {
const rb_vm_t *vmobj = ptr;
- return sizeof(rb_vm_t) + st_memsize(vmobj->living_threads);
+ size_t size = sizeof(rb_vm_t);
+ size += st_memsize(vmobj->living_threads);
+ if (vmobj->defined_strings) {
+ size += DEFINED_EXPR * sizeof(VALUE);
+ }
+ return size;
}
else {
return 0;