From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: AS8100 173.254.216.0/23 X-Spam-Status: No, score=-3.3 required=3.0 tests=AWL,BAYES_00, RCVD_IN_MSPIKE_BL,RCVD_IN_MSPIKE_ZBI,RCVD_IN_XBL,SPF_FAIL,SPF_HELO_FAIL, TO_EQ_FM_DOM_SPF_FAIL shortcircuit=no autolearn=no autolearn_force=no version=3.4.0 Received: from 80x24.org (exit-01a.noisetor.net [173.254.216.66]) by dcvr.yhbt.net (Postfix) with ESMTP id 31C0B1FB29 for ; Fri, 3 Feb 2017 23:34:42 +0000 (UTC) From: Eric Wong To: spew@80x24.org Subject: [PATCH] symbol.c (rb_id2str): eliminate branch to set class Date: Fri, 3 Feb 2017 23:34:39 +0000 Message-Id: <20170203233439.7288-1-e@80x24.org> List-Id: Since fstring table encompasses all strings in 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 --- 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 * -- EW