GitHub

@@ -1359,6 +1359,29 @@ str_b(mrb_state *mrb, mrb_value self)

13591359

return str;

13601360

}

136113611362+

static mrb_value

1363+

str_force_encoding(mrb_state *mrb, mrb_value self)

1364+

{

1365+

mrb_value enc;

1366+1367+

mrb_get_args(mrb, "S", &enc);

1368+1369+

struct RString *s = mrb_str_ptr(self);

1370+

if (ENC_COMP_P(enc, ENC_ASCII_8BIT) ||

1371+

ENC_COMP_P(enc, ENC_BINARY)) {

1372+

s->flags |= MRB_STR_BINARY;

1373+

}

1374+

#ifdef MRB_UTF8_STRING

1375+

else if (ENC_COMP_P(enc, ENC_UTF8)) {

1376+

s->flags &= ~MRB_STR_BINARY;

1377+

}

1378+

#endif

1379+

else {

1380+

mrb_raisef(mrb, E_ARGUMENT_ERROR, "unknown encoding name - %v", enc);

1381+

}

1382+

return self;

1383+

}

1384+13621385

void

13631386

mrb_mruby_string_ext_gem_init(mrb_state* mrb)

13641387

{

@@ -1400,6 +1423,7 @@ mrb_mruby_string_ext_gem_init(mrb_state* mrb)

14001423

mrb_define_method_id(mrb, s, MRB_SYM_Q(valid_encoding), str_valid_enc_p, MRB_ARGS_NONE());

14011424

mrb_define_method_id(mrb, s, MRB_SYM_Q(ascii_only), str_ascii_only_p, MRB_ARGS_NONE());

14021425

mrb_define_method_id(mrb, s, MRB_SYM(b), str_b, MRB_ARGS_NONE());

1426+

mrb_define_method_id(mrb, s, MRB_SYM(force_encoding), str_force_encoding, MRB_ARGS_REQ(1));

1403142714041428

mrb_define_method_id(mrb, s, MRB_SYM(__lines), str_lines, MRB_ARGS_NONE());

14051429

mrb_define_method_id(mrb, s, MRB_SYM(__codepoints), str_codepoints, MRB_ARGS_NONE());

Read the original on github.com ↗