summaryrefslogtreecommitdiff
path: root/parse.y
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-03-26 06:34:33 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-03-26 06:34:33 +0000
commitad8ed59ab9d33820d06f6f75f05a3674ce34d585 (patch)
tree197b614db337d4f7edb78d358472891e7ef2ffc9 /parse.y
parent9a848c5f4a7930b88e28fd4650322690f9c210e6 (diff)
parse.y: dup iff needed
* parse.y (rb_str_dynamic_intern): dup the given string only if needed. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45431 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'parse.y')
-rw-r--r--parse.y7
1 files changed, 3 insertions, 4 deletions
diff --git a/parse.y b/parse.y
index 83af313306..6ef61d8684 100644
--- a/parse.y
+++ b/parse.y
@@ -10671,7 +10671,6 @@ rb_str_dynamic_intern(VALUE s)
{
#if USE_SYMBOL_GC
VALUE str = RB_GC_GUARD(s);
- VALUE dup;
rb_encoding *enc, *ascii;
VALUE dsym;
ID id, type;
@@ -10680,18 +10679,18 @@ rb_str_dynamic_intern(VALUE s)
return ID2SYM(id);
}
- dup = rb_str_dup(str);
enc = rb_enc_get(str);
ascii = rb_usascii_encoding();
if (enc != ascii) {
if (sym_check_asciionly(str)) {
+ str = rb_str_dup(str);
rb_enc_associate(dup, ascii);
+ OBJ_FREEZE(str);
}
}
type = rb_str_symname_type(str, TRUE);
- OBJ_FREEZE(dup);
- str = rb_fstring(dup);
+ str = rb_fstring(str);
dsym = rb_newobj_of(rb_cSymbol, T_SYMBOL);
OBJ_FREEZE(dsym);
RSYMBOL(dsym)->fstr = str;