rb_intern e$B$,Kh2s!“e(B(e$B$9$G$K%7%s%%k$,$”$C$F$be(B) String
e$B%*%V%8%'e(B
e$B%/%H$r@8@.$7$^$9!#e(B
e$B$=$&$7$J$$$h$&$K$9$k$U$6$1$?%3!<%I$r$D$$=q$$$F$7$^$C$?$N$G$He(B
e$B$j$"$($:Aw$C$F$*$-$^$9!#e(B
Index: parse.y
— parse.y (e$B%j%S%8%g%se(B 12629)
+++ parse.y (e$B:n6H%3%T!<e(B)
@@ -8390,11 +8390,17 @@
rb_intern2(const char *name, long len)
{
const char *m = name;
- VALUE str = rb_str_new(name, len);
- VALUE str;
ID id;
int last; - struct RString fake_str;
- fake_str.basic.flags = T_STRING|RSTRING_NOEMBED|FL_FREEZE;
- fake_str.basic.klass = rb_cString;
- fake_str.as.heap.len = len;
- fake_str.as.heap.ptr = name;
- fake_str.as.heap.aux.capa = len;
- if (st_lookup(global_symbols.sym_id, (st_data_t)str, (st_data_t
*)&id))
-
if (st_lookup(global_symbols.sym_id, (st_data_t)&fake_str,
(st_data_t *)&id))
return id;last = len-1;
@@ -8454,6 +8460,7 @@
new_id:
id |= ++global_symbols.last_id << ID_SCOPE_SHIFT;
id_register: -
str = rb_str_new(name, len);
OBJ_FREEZE(str);
st_add_direct(global_symbols.sym_id, (st_data_t)str, id);
st_add_direct(global_symbols.id_str, id, (st_data_t)str);