Skip to content

Commit

Permalink
resolve class name earlier and more consistently
Browse files Browse the repository at this point in the history
This further avoids class name resolution issues which came
about due to relying on hash table ordering before r53376.

Pre-caching the class name when it is never used raises memory
use, but the overall gain from moving away from st still gives
us a small gain.  Reverting r53376 and this patch and testing with
"valgrind -v ./ruby -rrdoc -eexit" on x86 (32-bit) shows:

before:
    in use at exit: 1,662,239 bytes in 25,286 blocks
  total heap usage: 49,514 allocs, 24,228 frees, 6,005,561 bytes allocated

after, with this change:
    in use at exit: 1,646,529 bytes in 24,572 blocks
  total heap usage: 48,891 allocs, 24,319 frees, 6,003,921 bytes allocated

* class.c (Init_class_hierarchy): resolve name for rb_cObject ASAP
* object.c (rb_mod_const_set): move name resolution to rb_const_set
* variable.c (rb_const_set): do class resolution here
  [ruby-core:72807] [Bug #11977]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53518 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
  • Loading branch information
normal committed Jan 12, 2016
1 parent 8c8f92c commit 244916d
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 7 deletions.
7 changes: 7 additions & 0 deletions ChangeLog
@@ -1,3 +1,10 @@
Wed Jan 13 03:42:58 2016 Eric Wong <e@80x24.org>

* class.c (Init_class_hierarchy): resolve name for rb_cObject ASAP
* object.c (rb_mod_const_set): move name resolution to rb_const_set
* variable.c (rb_const_set): do class resolution here
[ruby-core:72807] [Bug #11977]

Wed Jan 13 00:37:12 2016 Satoshi Ohmori <sachin21dev@gmail.com>

* man/ruby.1: fix double word typo. [Fix GH-1194]
Expand Down
4 changes: 4 additions & 0 deletions class.c
Expand Up @@ -547,6 +547,10 @@ Init_class_hierarchy(void)
{
rb_cBasicObject = boot_defclass("BasicObject", 0);
rb_cObject = boot_defclass("Object", rb_cBasicObject);

/* resolve class name ASAP for order-independence */
rb_class_name(rb_cObject);

rb_cModule = boot_defclass("Module", rb_cObject);
rb_cClass = boot_defclass("Class", rb_cModule);

Expand Down
7 changes: 0 additions & 7 deletions object.c
Expand Up @@ -2178,13 +2178,6 @@ rb_mod_const_set(VALUE mod, VALUE name, VALUE value)
if (!id) id = rb_intern_str(name);
rb_const_set(mod, id, value);

/*
* Resolve and cache class name immediately to resolve ambiguity
* and avoid order-dependency on const_tbl
*/
if (RB_TYPE_P(value, T_MODULE) || RB_TYPE_P(value, T_CLASS)) {
rb_class_name(value);
}
return value;
}

Expand Down
7 changes: 7 additions & 0 deletions variable.c
Expand Up @@ -2569,6 +2569,13 @@ rb_const_set(VALUE klass, ID id, VALUE val)
args.value = val;
const_tbl_update(&args);
}
/*
* Resolve and cache class name immediately to resolve ambiguity
* and avoid order-dependency on const_tbl
*/
if (rb_cObject && (RB_TYPE_P(val, T_MODULE) || RB_TYPE_P(val, T_CLASS))) {
rb_class_name(val);
}
}

static void
Expand Down

0 comments on commit 244916d

Please sign in to comment.