diff options
Diffstat (limited to 'ext/-test-/string/coderange.c')
| -rw-r--r-- | ext/-test-/string/coderange.c | 41 |
1 files changed, 29 insertions, 12 deletions
diff --git a/ext/-test-/string/coderange.c b/ext/-test-/string/coderange.c index 2f1e6a06a8..4197ecca9f 100644 --- a/ext/-test-/string/coderange.c +++ b/ext/-test-/string/coderange.c @@ -2,29 +2,46 @@ #include "ruby/encoding.h" static VALUE sym_7bit, sym_valid, sym_unknown, sym_broken; + static VALUE -str_coderange(VALUE str) +coderange_int2sym(int coderange) { - switch (ENC_CODERANGE(str)) { + switch (coderange) { case ENC_CODERANGE_7BIT: - return sym_7bit; + return sym_7bit; case ENC_CODERANGE_VALID: - return sym_valid; + return sym_valid; case ENC_CODERANGE_UNKNOWN: - return sym_unknown; + return sym_unknown; case ENC_CODERANGE_BROKEN: - return sym_broken; + return sym_broken; } rb_bug("wrong condition of coderange"); - UNREACHABLE; + UNREACHABLE_RETURN(Qnil); +} + +/* return coderange without scan */ +static VALUE +str_coderange(VALUE str) +{ + return coderange_int2sym(ENC_CODERANGE(str)); +} + +/* scan coderange and return the result */ +static VALUE +str_coderange_scan(VALUE str) +{ + ENC_CODERANGE_SET(str, ENC_CODERANGE_UNKNOWN); + return coderange_int2sym(rb_enc_str_coderange(str)); } void -Init_coderange(VALUE klass) +Init_string_coderange(VALUE klass) { - sym_7bit = ID2SYM(rb_intern("7bit")); - sym_valid = ID2SYM(rb_intern("valid")); - sym_unknown = ID2SYM(rb_intern("unknown")); - sym_broken = ID2SYM(rb_intern("broken")); + sym_7bit = ID2SYM(rb_intern_const("7bit")); + sym_valid = ID2SYM(rb_intern_const("valid")); + sym_unknown = ID2SYM(rb_intern_const("unknown")); + sym_broken = ID2SYM(rb_intern_const("broken")); rb_define_method(klass, "coderange", str_coderange, 0); + rb_define_method(klass, "coderange_scan", str_coderange_scan, 0); } |
