diff options
Diffstat (limited to 'ext/-test-/string/fstring.c')
| -rw-r--r-- | ext/-test-/string/fstring.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/ext/-test-/string/fstring.c b/ext/-test-/string/fstring.c new file mode 100644 index 0000000000..0b5940f28c --- /dev/null +++ b/ext/-test-/string/fstring.c @@ -0,0 +1,38 @@ +#include "ruby.h" +#include "ruby/encoding.h" +#include "internal/string.h" + +VALUE +bug_s_fstring(VALUE self, VALUE str) +{ + return rb_str_to_interned_str(str); +} + +VALUE +bug_s_fstring_fake_str(VALUE self) +{ + static const char literal[] = "abcdefghijklmnopqrstuvwxyz"; + struct RString fake_str = {RBASIC_INIT}; + return rb_str_to_interned_str(rb_setup_fake_str(&fake_str, literal, sizeof(literal) - 1, 0)); +} + +VALUE +bug_s_rb_enc_interned_str(VALUE self, VALUE encoding) +{ + return rb_enc_interned_str("foo", 3, NIL_P(encoding) ? NULL : RTYPEDDATA_GET_DATA(encoding)); +} + +VALUE +bug_s_rb_enc_str_new(VALUE self, VALUE encoding) +{ + return rb_enc_str_new("foo", 3, NIL_P(encoding) ? NULL : RTYPEDDATA_GET_DATA(encoding)); +} + +void +Init_string_fstring(VALUE klass) +{ + rb_define_singleton_method(klass, "fstring", bug_s_fstring, 1); + rb_define_singleton_method(klass, "fstring_fake_str", bug_s_fstring_fake_str, 0); + rb_define_singleton_method(klass, "rb_enc_interned_str", bug_s_rb_enc_interned_str, 1); + rb_define_singleton_method(klass, "rb_enc_str_new", bug_s_rb_enc_str_new, 1); +} |
