symbol.c (rb_id2str): eliminate branch to set class

Since the fstring table encompasses all strings in the
symbol table, we may reuse the fstring table walk to set
the class and eliminate the branch in rb_id2str.

* string.c (Init_String): use rb_cString immediately after definition
* symbol.c (rb_id2str): eliminate branch to set class

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57521 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
normal 2017-02-03 23:55:06 +00:00
Родитель 257bf9c0d0
Коммит b0cfa46bce
2 изменённых файлов: 3 добавлений и 12 удалений

Просмотреть файл

@ -10036,6 +10036,8 @@ Init_String(void)
#define rb_intern(str) rb_intern_const(str)
rb_cString = rb_define_class("String", rb_cObject);
assert(rb_vm_fstring_table());
st_foreach(rb_vm_fstring_table(), fstring_set_class_i, rb_cString);
rb_include_module(rb_cString, rb_mComparable);
rb_define_alloc_func(rb_cString, empty_str_alloc);
rb_define_singleton_method(rb_cString, "try_convert", rb_str_s_try_convert, 1);
@ -10215,7 +10217,4 @@ Init_String(void)
rb_define_method(rb_cSymbol, "swapcase", sym_swapcase, -1);
rb_define_method(rb_cSymbol, "encoding", sym_encoding, 0);
assert(rb_vm_fstring_table());
st_foreach(rb_vm_fstring_table(), fstring_set_class_i, rb_cString);
}

Просмотреть файл

@ -744,15 +744,7 @@ rb_sym2str(VALUE sym)
VALUE
rb_id2str(ID id)
{
VALUE str;
if ((str = lookup_id_str(id)) != 0) {
if (RBASIC(str)->klass == 0)
RBASIC_SET_CLASS_RAW(str, rb_cString);
return str;
}
return 0;
return lookup_id_str(id);
}
const char *