From ef19fb111a8c8bf1a71d46e6fcf34b227e086845 Mon Sep 17 00:00:00 2001 From: Jean Boussier Date: Fri, 25 Sep 2020 14:46:59 +0200 Subject: Expose the rb_interned_str_* family of functions Fixes [Feature #13381] --- include/ruby/encoding.h | 2 ++ include/ruby/internal/intern/string.h | 3 +++ string.c | 30 ++++++++++++++++++++++++++++++ 3 files changed, 35 insertions(+) diff --git a/include/ruby/encoding.h b/include/ruby/encoding.h index 01cbf8bb75..07e6c9a671 100644 --- a/include/ruby/encoding.h +++ b/include/ruby/encoding.h @@ -127,6 +127,8 @@ void rb_enc_copy(VALUE dst, VALUE src); VALUE rb_enc_str_new(const char*, long, rb_encoding*); VALUE rb_enc_str_new_cstr(const char*, rb_encoding*); VALUE rb_enc_str_new_static(const char*, long, rb_encoding*); +VALUE rb_enc_interned_str(const char *, long, rb_encoding *); +VALUE rb_enc_interned_str_cstr(const char *, rb_encoding *); VALUE rb_enc_reg_new(const char*, long, rb_encoding*, int); PRINTF_ARGS(VALUE rb_enc_sprintf(rb_encoding *, const char*, ...), 2, 3); VALUE rb_enc_vsprintf(rb_encoding *, const char*, va_list); diff --git a/include/ruby/internal/intern/string.h b/include/ruby/internal/intern/string.h index f2f563ebf9..a590b2043e 100644 --- a/include/ruby/internal/intern/string.h +++ b/include/ruby/internal/intern/string.h @@ -74,6 +74,9 @@ VALUE rb_utf8_str_new_cstr(const char*); VALUE rb_str_new_static(const char *ptr, long len); VALUE rb_usascii_str_new_static(const char *ptr, long len); VALUE rb_utf8_str_new_static(const char *ptr, long len); +VALUE rb_str_to_interned_str(VALUE); +VALUE rb_interned_str(const char *, long); +VALUE rb_interned_str_cstr(const char *); void rb_str_free(VALUE); void rb_str_shared_replace(VALUE, VALUE); VALUE rb_str_buf_append(VALUE, VALUE); diff --git a/string.c b/string.c index 3dc9aa69d8..a60add658a 100644 --- a/string.c +++ b/string.c @@ -11402,6 +11402,36 @@ sym_all_symbols(VALUE _) return rb_sym_all_symbols(); } +VALUE +rb_str_to_interned_str(VALUE str) +{ + return rb_fstring(str); +} + +VALUE +rb_interned_str(const char *ptr, long len) +{ + return rb_fstring_new(ptr, len); +} + +VALUE +rb_interned_str_cstr(const char *ptr) +{ + return rb_fstring_cstr(ptr); +} + +VALUE +rb_enc_interned_str(const char *ptr, long len, rb_encoding *enc) +{ + return rb_fstring_enc_new(ptr, len, enc); +} + +VALUE +rb_enc_interned_str_cstr(const char *ptr, rb_encoding *enc) +{ + return rb_fstring_enc_new(ptr, strlen(ptr), enc); +} + /* * A String object holds and manipulates an arbitrary sequence of * bytes, typically representing characters. String objects may be created -- cgit v1.2.3