mruby-string-ext (str_b): add a new method String#b

The method makes the receiver binary-mode, but in mruby, which is
virtually no meaning.
This commit is contained in:
Yukihiro "Matz" Matsumoto
2025-01-01 23:30:12 +09:00
parent 85df487e63
commit b0127f0cdd
2 changed files with 12 additions and 1 deletions
+4 -1
View File
@@ -92,6 +92,8 @@ struct RStringEmbed {
# define RSTR_COPY_SINGLE_BYTE_FLAG(dst, src) (void)0
#endif
#define RSTR_SET_ASCII_FLAG(s) RSTR_SET_SINGLE_BYTE_FLAG(s)
#define RSTR_BINARY_P(s) ((s)->flags & MRB_STR_BINARY)
#define RSTR_SET_BINARY_FLAG(s) ((s)->flags |= MRB_STR_BINARY)
/**
* Returns a pointer from a Ruby string
@@ -109,7 +111,8 @@ struct RStringEmbed {
#define MRB_STR_FSHARED 2
#define MRB_STR_NOFREE 4
#define MRB_STR_EMBED 8 /* type flags up to here */
#define MRB_STR_SINGLE_BYTE 16
#define MRB_STR_BINARY 16
#define MRB_STR_SINGLE_BYTE 32
#define MRB_STR_EMBED_LEN_SHIFT 6
#define MRB_STR_EMBED_LEN_BIT 5
#define MRB_STR_EMBED_LEN_MASK (((1 << MRB_STR_EMBED_LEN_BIT) - 1) << MRB_STR_EMBED_LEN_SHIFT)
+8
View File
@@ -1325,6 +1325,13 @@ str_ascii_only_p(mrb_state *mrb, mrb_value str)
return mrb_true_value();
}
static mrb_value
str_b(mrb_state *mrb, mrb_value str)
{
RSTR_SET_BINARY_FLAG(mrb_str_ptr(str));
return str;
}
void
mrb_mruby_string_ext_gem_init(mrb_state* mrb)
{
@@ -1364,6 +1371,7 @@ mrb_mruby_string_ext_gem_init(mrb_state* mrb)
mrb_define_method_id(mrb, s, MRB_OPSYM(minus), str_uminus, MRB_ARGS_REQ(1));
mrb_define_method_id(mrb, s, MRB_SYM_Q(valid_encoding), str_valid_enc_p, MRB_ARGS_NONE());
mrb_define_method_id(mrb, s, MRB_SYM_Q(ascii_only), str_ascii_only_p, MRB_ARGS_NONE());
mrb_define_method_id(mrb, s, MRB_SYM(b), str_b, MRB_ARGS_NONE());
mrb_define_method_id(mrb, s, MRB_SYM(__lines), str_lines, MRB_ARGS_NONE());
mrb_define_method_id(mrb, s, MRB_SYM(__codepoints), str_codepoints, MRB_ARGS_NONE());