From 0918c27a40129a34ed5f2468f742b4912c4ae76d Mon Sep 17 00:00:00 2001 From: nobu Date: Mon, 6 Jul 2015 02:24:29 +0000 Subject: [PATCH] string.c: register_fstring * string.c (register_fstring): separate registration from rb_fstring(). * string.c (rb_fstring_new): skip argument checks in rb_fstring(). git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51157 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- string.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/string.c b/string.c index 34c77a5054..6ef92eb9fb 100644 --- a/string.c +++ b/string.c @@ -212,6 +212,7 @@ static int fstring_cmp(VALUE a, VALUE b); /* in case we restart MVM development, this needs to be per-VM */ static st_table* frozen_strings; +static VALUE register_fstring(VALUE str); static inline st_table* rb_vm_fstring_table(void) @@ -260,13 +261,19 @@ fstr_update_callback(st_data_t *key, st_data_t *value, st_data_t arg, int existi VALUE rb_fstring(VALUE str) { - VALUE ret; - Check_Type(str, T_STRING); if (FL_TEST(str, RSTRING_FSTR)) return str; + return register_fstring(str); +} + +static VALUE +register_fstring(VALUE str) +{ + VALUE ret; + do { ret = str; st_update(rb_vm_fstring_table(), (st_data_t)str, @@ -301,7 +308,7 @@ VALUE rb_fstring_new(const char *ptr, long len) { struct RString fake_str; - return rb_fstring(setup_fake_str(&fake_str, ptr, len, ENCINDEX_US_ASCII)); + return register_fstring(setup_fake_str(&fake_str, ptr, len, ENCINDEX_US_ASCII)); } VALUE