diff options
| author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-06-27 16:45:56 +0000 |
|---|---|---|
| committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-06-27 16:45:56 +0000 |
| commit | 7ec9594d950e4e0c3f1678c1400c87695f7b81ff (patch) | |
| tree | 307abc855e097e9b6a2ed1d8a15d29a8646c1cec | |
| parent | ee7e7f75a801299474f3cccbef00123c096a1dc5 (diff) | |
| download | ruby-7ec9594d950e4e0c3f1678c1400c87695f7b81ff.tar.gz ruby-7ec9594d950e4e0c3f1678c1400c87695f7b81ff.tar.xz ruby-7ec9594d950e4e0c3f1678c1400c87695f7b81ff.zip | |
* parse.y (rb_intern2): don't allocate a string object at first.
[ruby-dev:31064]
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@12640 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
| -rw-r--r-- | ChangeLog | 5 | ||||
| -rw-r--r-- | parse.y | 13 |
2 files changed, 15 insertions, 3 deletions
@@ -1,3 +1,8 @@ +Thu Jun 28 01:44:31 2007 Tanaka Akira <akr@fsij.org> + + * parse.y (rb_intern2): don't allocate a string object at first. + [ruby-dev:31064] + Thu Jun 28 01:24:02 2007 Koichi Sasada <ko1@atdot.net> * bootstraptest/runner.rb: fix to show file name. @@ -8389,11 +8389,17 @@ ID rb_intern2(const char *name, long len) { const char *m = name; - VALUE str = rb_str_new(name, len); + VALUE str; ID id; int last; - - if (st_lookup(global_symbols.sym_id, (st_data_t)str, (st_data_t *)&id)) + 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)&fake_str, (st_data_t *)&id)) return id; last = len-1; @@ -8453,6 +8459,7 @@ rb_intern2(const char *name, long len) 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); |
