diff options
author | ktsj <ktsj@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2014-04-01 00:07:58 +0000 |
---|---|---|
committer | ktsj <ktsj@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2014-04-01 00:07:58 +0000 |
commit | f6686b51325dc039652555c6724d7c1c960dd242 (patch) | |
tree | 893e8afc899b86d1fef06df4dfff68861d181b8a /parse.y | |
parent | f265ce708d975d32db295fc85c7e92d89c7f6d20 (diff) | |
download | ruby-f6686b51325dc039652555c6724d7c1c960dd242.tar.gz |
* parse.y (rb_str_dynamic_intern): set mark bit if dynamic symbol
is before sweeping.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45492 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'parse.y')
-rw-r--r-- | parse.y | 8 |
1 files changed, 7 insertions, 1 deletions
@@ -10705,7 +10705,13 @@ rb_str_dynamic_intern(VALUE str) ID id, type; if (st_lookup(global_symbols.sym_id, str, &id)) { - return ID2SYM(id); + VALUE sym = ID2SYM(id); + if (!STATIC_SYM_P(sym)) { + /* because of lazy sweep, dynamic symbol may be unmarked already and swept + * at next time */ + rb_gc_resurrect(sym); + } + return sym; } enc = rb_enc_get(str); |