Project

General

Profile

Feature #9171

Updated by nobu (Nobuyoshi Nakada) over 4 years ago

Here is a simple patch to use fstrings for the table backing symbols. 

 Unfortunately it causes a segfault in test/rdoc/test_rdoc_parser_ruby.rb. Maybe someone wants to investigate. 

 ~~~diff 
 diff --git a/parse.y b/parse.y 
 index 8207ad7..b1f3112 100644 
 --- a/parse.y 
 +++ b/parse.y 
 @@ -10333,7 +10333,7 @@ register_symid(ID id, const char *name, long len, rb_encoding *enc) 
  static ID 
  register_symid_str(ID id, VALUE str) 
  { 
 -      OBJ_FREEZE(str); 
 +      str = rb_fstring(str); 
 
      if (RUBY_DTRACE_SYMBOL_CREATE_ENABLED()) { 
 	 RUBY_DTRACE_SYMBOL_CREATE(RSTRING_PTR(str), rb_sourcefile(), rb_sourceline()); 
 diff --git a/string.c b/string.c 
 index 231bb2f..6ae33e3 100644 
 --- a/string.c 
 +++ b/string.c 
 @@ -138,6 +138,9 @@ rb_fstring(VALUE str) 
      st_data_t fstr; 
      Check_Type(str, T_STRING); 
 
 +      if (!frozen_strings) 
 + 	 frozen_strings = st_init_table(&fstring_hash_type); 
 + 
      if (FL_TEST(str, RSTRING_FSTR)) 
 	 return str; 
 
 @@ -8707,8 +8710,6 @@ Init_String(void) 
  #undef rb_intern 
  #define rb_intern(str) rb_intern_const(str) 
 
 -      frozen_strings = st_init_table(&fstring_hash_type); 
 - 
      rb_cString    = rb_define_class("String", rb_cObject); 
      rb_include_module(rb_cString, rb_mComparable); 
      rb_define_alloc_func(rb_cString, empty_str_alloc); 

Back