summaryrefslogtreecommitdiff
path: root/ext/json/generator/generator.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/json/generator/generator.c')
-rw-r--r--ext/json/generator/generator.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/ext/json/generator/generator.c b/ext/json/generator/generator.c
index 487fc68f4d..7d40ba4dc1 100644
--- a/ext/json/generator/generator.c
+++ b/ext/json/generator/generator.c
@@ -742,17 +742,19 @@ static void generate_json_array(FBuffer *buffer, VALUE Vstate, JSON_Generator_St
fbuffer_append_char(buffer, ']');
}
-static int enc_utf8_compatible_p(rb_encoding *enc)
+static int usascii_encindex, utf8_encindex;
+
+static int enc_utf8_compatible_p(int enc_idx)
{
- if (enc == rb_usascii_encoding()) return 1;
- if (enc == rb_utf8_encoding()) return 1;
+ if (enc_idx == usascii_encindex) return 1;
+ if (enc_idx == utf8_encindex) return 1;
return 0;
}
static void generate_json_string(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj)
{
fbuffer_append_char(buffer, '"');
- if (!enc_utf8_compatible_p(rb_enc_get(obj))) {
+ if (!enc_utf8_compatible_p(RB_ENCODING_GET(obj))) {
obj = rb_str_export_to_enc(obj, rb_utf8_encoding());
}
convert_UTF8_to_JSON(buffer, obj, state->ascii_only, state->script_safe);
@@ -1479,4 +1481,7 @@ void Init_generator(void)
i_match = rb_intern("match");
i_keys = rb_intern("keys");
i_dup = rb_intern("dup");
+
+ usascii_encindex = rb_usascii_encindex();
+ utf8_encindex = rb_utf8_encindex();
}