Skip to content

Commit b0127f0

Browse files
committed
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.
1 parent 85df487 commit b0127f0

2 files changed

Lines changed: 12 additions & 1 deletion

File tree

include/mruby/string.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,8 @@ struct RStringEmbed {
9292
# define RSTR_COPY_SINGLE_BYTE_FLAG(dst, src) (void)0
9393
#endif
9494
#define RSTR_SET_ASCII_FLAG(s) RSTR_SET_SINGLE_BYTE_FLAG(s)
95+
#define RSTR_BINARY_P(s) ((s)->flags & MRB_STR_BINARY)
96+
#define RSTR_SET_BINARY_FLAG(s) ((s)->flags |= MRB_STR_BINARY)
9597

9698
/**
9799
* Returns a pointer from a Ruby string
@@ -109,7 +111,8 @@ struct RStringEmbed {
109111
#define MRB_STR_FSHARED 2
110112
#define MRB_STR_NOFREE 4
111113
#define MRB_STR_EMBED 8 /* type flags up to here */
112-
#define MRB_STR_SINGLE_BYTE 16
114+
#define MRB_STR_BINARY 16
115+
#define MRB_STR_SINGLE_BYTE 32
113116
#define MRB_STR_EMBED_LEN_SHIFT 6
114117
#define MRB_STR_EMBED_LEN_BIT 5
115118
#define MRB_STR_EMBED_LEN_MASK (((1 << MRB_STR_EMBED_LEN_BIT) - 1) << MRB_STR_EMBED_LEN_SHIFT)

mrbgems/mruby-string-ext/src/string.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1325,6 +1325,13 @@ str_ascii_only_p(mrb_state *mrb, mrb_value str)
13251325
return mrb_true_value();
13261326
}
13271327

1328+
static mrb_value
1329+
str_b(mrb_state *mrb, mrb_value str)
1330+
{
1331+
RSTR_SET_BINARY_FLAG(mrb_str_ptr(str));
1332+
return str;
1333+
}
1334+
13281335
void
13291336
mrb_mruby_string_ext_gem_init(mrb_state* mrb)
13301337
{
@@ -1364,6 +1371,7 @@ mrb_mruby_string_ext_gem_init(mrb_state* mrb)
13641371
mrb_define_method_id(mrb, s, MRB_OPSYM(minus), str_uminus, MRB_ARGS_REQ(1));
13651372
mrb_define_method_id(mrb, s, MRB_SYM_Q(valid_encoding), str_valid_enc_p, MRB_ARGS_NONE());
13661373
mrb_define_method_id(mrb, s, MRB_SYM_Q(ascii_only), str_ascii_only_p, MRB_ARGS_NONE());
1374+
mrb_define_method_id(mrb, s, MRB_SYM(b), str_b, MRB_ARGS_NONE());
13671375

13681376
mrb_define_method_id(mrb, s, MRB_SYM(__lines), str_lines, MRB_ARGS_NONE());
13691377
mrb_define_method_id(mrb, s, MRB_SYM(__codepoints), str_codepoints, MRB_ARGS_NONE());

0 commit comments

Comments
 (0)