aboutsummaryrefslogtreecommitdiffstats
path: root/encoding.c
diff options
context:
space:
mode:
Diffstat (limited to 'encoding.c')
-rw-r--r--encoding.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/encoding.c b/encoding.c
index 95b2767911..0b6bf96bc5 100644
--- a/encoding.c
+++ b/encoding.c
@@ -685,8 +685,8 @@ rb_enc_get_index(VALUE obj)
return i;
}
-void
-rb_enc_set_index(VALUE obj, int idx)
+static void
+enc_set_index(VALUE obj, int idx)
{
if (idx < ENCODING_INLINE_MAX) {
ENCODING_SET_INLINED(obj, idx);
@@ -694,13 +694,20 @@ rb_enc_set_index(VALUE obj, int idx)
}
ENCODING_SET_INLINED(obj, ENCODING_INLINE_MAX);
rb_ivar_set(obj, rb_id_encoding(), INT2NUM(idx));
- return;
+}
+
+void
+rb_enc_set_index(VALUE obj, int idx)
+{
+ rb_check_frozen(obj);
+ enc_set_index(obj, idx);
}
VALUE
rb_enc_associate_index(VALUE obj, int idx)
{
/* enc_check_capable(obj);*/
+ rb_check_frozen(obj);
if (rb_enc_get_index(obj) == idx)
return obj;
if (SPECIAL_CONST_P(obj)) {
@@ -710,7 +717,7 @@ rb_enc_associate_index(VALUE obj, int idx)
!rb_enc_asciicompat(rb_enc_from_index(idx))) {
ENC_CODERANGE_CLEAR(obj);
}
- rb_enc_set_index(obj, idx);
+ enc_set_index(obj, idx);
return obj;
}