1#ifndef INTERNAL_STRING_H
2#define INTERNAL_STRING_H
11#include "ruby/internal/config.h"
13#include "internal/compilers.h"
18#define STR_NOEMBED FL_USER1
19#define STR_SHARED FL_USER2
22# undef rb_fstring_cstr
26VALUE rb_fstring(VALUE);
27VALUE rb_fstring_cstr(
const char *str);
28VALUE rb_fstring_enc_new(
const char *ptr,
long len,
rb_encoding *enc);
29int rb_str_buf_cat_escaped_char(VALUE result,
unsigned int c,
int unicode_p);
30int rb_str_symname_p(VALUE);
31VALUE rb_str_quote_unprintable(VALUE);
32char *rb_str_fill_terminator(VALUE str,
const int termlen);
33void rb_str_change_terminator_length(VALUE str,
const int oldtermlen,
const int termlen);
34VALUE rb_str_locktmp_ensure(VALUE str, VALUE (*func)(VALUE), VALUE arg);
35VALUE rb_str_chomp_string(VALUE str, VALUE chomp);
36VALUE rb_external_str_with_enc(VALUE str,
rb_encoding *eenc);
37VALUE rb_str_cat_conv_enc_opts(VALUE newstr,
long ofs,
const char *ptr,
long len,
39VALUE rb_enc_str_scrub(
rb_encoding *enc, VALUE str, VALUE repl);
40VALUE rb_str_escape(VALUE str);
41size_t rb_str_memsize(VALUE);
42char *rb_str_to_cstr(VALUE str);
43const char *ruby_escaped_char(
int c);
44void rb_str_make_independent(VALUE str);
45int rb_enc_str_coderange_scan(VALUE str,
rb_encoding *enc);
47static inline bool STR_EMBED_P(VALUE str);
48static inline bool STR_SHARED_P(VALUE str);
49static inline VALUE QUOTE(VALUE v);
50static inline VALUE QUOTE_ID(ID v);
51static inline bool is_ascii_string(VALUE str);
52static inline bool is_broken_string(VALUE str);
53static inline VALUE rb_str_eql_internal(
const VALUE str1,
const VALUE str2);
55RUBY_SYMBOL_EXPORT_BEGIN
57VALUE rb_str_tmp_frozen_acquire(VALUE str);
58void rb_str_tmp_frozen_release(VALUE str, VALUE tmp);
59VALUE rb_setup_fake_str(
struct RString *fake_str,
const char *name,
long len,
rb_encoding *enc);
60VALUE rb_str_upto_each(VALUE, VALUE,
int,
int (*each)(VALUE, VALUE), VALUE);
61VALUE rb_str_upto_endless_each(VALUE,
int (*each)(VALUE, VALUE), VALUE);
64MJIT_SYMBOL_EXPORT_BEGIN
65VALUE rb_fstring_new(
const char *ptr,
long len);
66VALUE rb_obj_as_string_result(VALUE str, VALUE obj);
67VALUE rb_str_opt_plus(VALUE x, VALUE y);
68VALUE rb_str_concat_literals(
size_t num,
const VALUE *strary);
69VALUE rb_str_eql(VALUE str1, VALUE str2);
70VALUE rb_id_quote_unprintable(ID);
71VALUE rb_sym_proc_call(ID mid,
int argc,
const VALUE *argv,
int kw_splat, VALUE passed_proc);
77#define rb_fstring_lit(str) rb_fstring_new((str), rb_strlen_lit(str))
78#define rb_fstring_literal(str) rb_fstring_lit(str)
79#define rb_fstring_enc_lit(str, enc) rb_fstring_enc_new((str), rb_strlen_lit(str), (enc))
80#define rb_fstring_enc_literal(str, enc) rb_fstring_enc_lit(str, enc)
85 return rb_str_quote_unprintable(v);
91 return rb_id_quote_unprintable(i);
101STR_SHARED_P(VALUE str)
107is_ascii_string(VALUE str)
113is_broken_string(VALUE str)
121rb_str_eql_internal(
const VALUE str1,
const VALUE str2)
124 const char *ptr1, *ptr2;
130 if (memcmp(ptr1, ptr2, len) == 0)
135#if __has_builtin(__builtin_constant_p)
136# define rb_fstring_cstr(str) \
137 (__builtin_constant_p(str) ? \
138 rb_fstring_new((str), (long)strlen(str)) : \
139 (rb_fstring_cstr)(str))
#define ENC_CODERANGE_7BIT
Old name of RUBY_ENC_CODERANGE_7BIT.
#define ELTS_SHARED
Old name of RUBY_ELTS_SHARED.
#define FL_TEST_RAW
Old name of RB_FL_TEST_RAW.
#define Qtrue
Old name of RUBY_Qtrue.
#define Qfalse
Old name of RUBY_Qfalse.
#define ENC_CODERANGE_BROKEN
Old name of RUBY_ENC_CODERANGE_BROKEN.
#define FL_ALL_RAW
Old name of RB_FL_ALL_RAW.
int rb_enc_str_coderange(VALUE str)
Scans the passed string to collect its code range.
int rb_str_comparable(VALUE str1, VALUE str2)
Checks if two strings are comparable each other or not.
static long RSTRING_LEN(VALUE str)
Queries the length of the string.
static char * RSTRING_PTR(VALUE str)
Queries the contents pointer of the string.