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…
	
	Add table
		Add a link
		
	
		Reference in a new issue