diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/ruby/encoding.h | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/include/ruby/encoding.h b/include/ruby/encoding.h index 2dd2f93b1..0a6b7c18e 100644 --- a/include/ruby/encoding.h +++ b/include/ruby/encoding.h @@ -33,14 +33,14 @@ if (encoding_set_enc_index < ENCODING_INLINE_MAX) \ ENCODING_SET_INLINED(rb_encoding_set_obj, encoding_set_enc_index); \ else \ - rb_enc_internal_set_index(rb_encoding_set_obj, encoding_set_enc_index); \ + rb_enc_set_index(rb_encoding_set_obj, encoding_set_enc_index); \ } while (0) #define ENCODING_GET_INLINED(obj) ((RBASIC(obj)->flags & ENCODING_MASK)>>ENCODING_SHIFT) #define ENCODING_GET(obj) \ (ENCODING_GET_INLINED(obj) != ENCODING_INLINE_MAX ? \ ENCODING_GET_INLINED(obj) : \ - rb_enc_internal_get_index(obj)) + rb_enc_get_index(obj)) #define ENCODING_IS_ASCII8BIT(obj) (ENCODING_GET_INLINED(obj) == 0) @@ -74,9 +74,9 @@ typedef OnigEncodingType rb_encoding; int rb_enc_replicate(const char *, rb_encoding *); int rb_define_dummy_encoding(const char *); -int rb_enc_dummy_p(rb_encoding *); #define rb_enc_to_index(enc) ((enc) ? ((enc)->ruby_encoding_index) : 0) int rb_enc_get_index(VALUE obj); +void rb_enc_set_index(VALUE obj, int encindex); int rb_enc_find_index(const char *name); int rb_to_encoding_index(VALUE); rb_encoding* rb_to_encoding(VALUE); @@ -86,8 +86,6 @@ rb_encoding* rb_enc_check(VALUE,VALUE); void rb_enc_associate_index(VALUE, int); void rb_enc_associate(VALUE, rb_encoding*); void rb_enc_copy(VALUE dst, VALUE src); -int rb_enc_internal_get_index(VALUE obj); -void rb_enc_internal_set_index(VALUE obj, int encindex); VALUE rb_enc_str_new(const char*, long, rb_encoding*); VALUE rb_enc_reg_new(const char*, long, rb_encoding*, int); @@ -154,7 +152,7 @@ int rb_enc_codelen(int code, rb_encoding *enc); #define rb_enc_isspace(c,enc) ONIGENC_IS_CODE_SPACE(enc,c) #define rb_enc_isdigit(c,enc) ONIGENC_IS_CODE_DIGIT(enc,c) -#define rb_enc_asciicompat(enc) (!rb_enc_dummy_p(enc) && rb_enc_mbminlen(enc)==1) +#define rb_enc_asciicompat(enc) (rb_enc_mbminlen(enc)==1 && !rb_enc_dummy_p(enc)) int rb_enc_casefold(char *to, const char *p, const char *e, rb_encoding *enc); int rb_enc_toupper(int c, rb_encoding *enc); @@ -178,4 +176,21 @@ void rb_enc_set_default_external(VALUE encoding); VALUE rb_locale_charmap(VALUE klass); long rb_memsearch(const void*,long,const void*,long,rb_encoding*); +RUBY_EXTERN VALUE rb_cEncoding; + +#define ENC_UNINITIALIZED (&rb_cEncoding) +#define enc_initialized_p(enc) ((enc)->auxiliary_data != &rb_cEncoding) +#define ENC_FROM_ENCODING(enc) ((VALUE)(enc)->auxiliary_data) + +#define ENC_DUMMY_FLAG FL_USER2 +#define ENC_DUMMY_P(enc) (RBASIC(enc)->flags & ENC_DUMMY_FLAG) +#define ENC_SET_DUMMY(enc) (RBASIC(enc)->flags |= ENC_DUMMY_FLAG) + +static inline int +rb_enc_dummy_p(rb_encoding *enc) +{ + if (!enc_initialized_p(enc)) return Qfalse; + return ENC_DUMMY_P(ENC_FROM_ENCODING(enc)); +} + #endif /* RUBY_ENCODING_H */ |