mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Make temporary lock string encoding free
As a temporary lock string is hidden, it can not have instance variables, including non-inlined encoding index.
This commit is contained in:
parent
1b219f1fb2
commit
bdf3032e35
3 changed files with 11 additions and 4 deletions
|
@ -257,7 +257,7 @@ rb_str_format(int argc, const VALUE *argv, VALUE fmt)
|
|||
blen = 0;
|
||||
bsiz = 120;
|
||||
result = rb_str_buf_new(bsiz);
|
||||
rb_enc_copy(result, fmt);
|
||||
rb_enc_associate(result, enc);
|
||||
buf = RSTRING_PTR(result);
|
||||
memset(buf, 0, bsiz);
|
||||
ENC_CODERANGE_SET(result, coderange);
|
||||
|
|
11
string.c
11
string.c
|
@ -199,6 +199,7 @@ VALUE rb_cSymbol;
|
|||
static VALUE str_replace_shared_without_enc(VALUE str2, VALUE str);
|
||||
static VALUE str_new_shared(VALUE klass, VALUE str);
|
||||
static VALUE str_new_frozen(VALUE klass, VALUE orig);
|
||||
static VALUE str_new_frozen_buffer(VALUE klass, VALUE orig, int copy_encoding);
|
||||
static VALUE str_new_static(VALUE klass, const char *ptr, long len, int encindex);
|
||||
static void str_make_independent_expand(VALUE str, long len, long expand, const int termlen);
|
||||
static inline void str_modifiable(VALUE str);
|
||||
|
@ -1225,7 +1226,7 @@ VALUE
|
|||
rb_str_tmp_frozen_acquire(VALUE orig)
|
||||
{
|
||||
if (OBJ_FROZEN_RAW(orig)) return orig;
|
||||
return str_new_frozen(0, orig);
|
||||
return str_new_frozen_buffer(0, orig, FALSE);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -1256,6 +1257,12 @@ rb_str_tmp_frozen_release(VALUE orig, VALUE tmp)
|
|||
|
||||
static VALUE
|
||||
str_new_frozen(VALUE klass, VALUE orig)
|
||||
{
|
||||
return str_new_frozen_buffer(klass, orig, TRUE);
|
||||
}
|
||||
|
||||
static VALUE
|
||||
str_new_frozen_buffer(VALUE klass, VALUE orig, int copy_encoding)
|
||||
{
|
||||
VALUE str;
|
||||
|
||||
|
@ -1304,7 +1311,7 @@ str_new_frozen(VALUE klass, VALUE orig)
|
|||
}
|
||||
}
|
||||
|
||||
rb_enc_cr_str_exact_copy(str, orig);
|
||||
if (copy_encoding) rb_enc_cr_str_exact_copy(str, orig);
|
||||
OBJ_FREEZE(str);
|
||||
return str;
|
||||
}
|
||||
|
|
|
@ -73,7 +73,7 @@ class TestEncoding < Test::Unit::TestCase
|
|||
}
|
||||
e = Encoding.list.last
|
||||
format = "%d".force_encoding(e)
|
||||
assert_raise(TypeError) {format % 0}
|
||||
assert_equal("0", format % 0)
|
||||
end;
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in a new issue