From b0cfa46bcea161a2907159c0cb228d869e4c1fa3 Mon Sep 17 00:00:00 2001 From: normal Date: Fri, 3 Feb 2017 23:55:06 +0000 Subject: [PATCH] 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 --- string.c | 5 ++--- symbol.c | 10 +--------- 2 files changed, 3 insertions(+), 12 deletions(-) diff --git a/string.c b/string.c index 3a7113dcc0..394fa8d332 100644 --- a/string.c +++ b/string.c @@ -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); } diff --git a/symbol.c b/symbol.c index facdb3ce24..f4516ebbe4 100644 --- a/symbol.c +++ b/symbol.c @@ -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 *