diff options
author | naruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-05-14 18:43:11 +0000 |
---|---|---|
committer | naruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-05-14 18:43:11 +0000 |
commit | 3b4e68cfab987575662d3b6fcc593306255773bf (patch) | |
tree | c5890b1f3e6ed65691e455f01c6958793ade4b18 /compile.c | |
parent | 005ee0e45533e6b11722103418ebee9d3bba4a5d (diff) |
* iseq.h (struct iseq_compile_data): use struct rb_id_table
instead of st_table.
* iseq.c (prepare_iseq_build): don't allocate ivar_cache_table
until it has at least one element.
* iseq.c (compile_data_free): free ivar_cache_table only if it
is allocated.
* compile.c (get_ivar_ic_value): allocate if the table is not
allocated yet.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55002 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'compile.c')
-rw-r--r-- | compile.c | 16 |
1 files changed, 12 insertions, 4 deletions
@@ -19,6 +19,7 @@ #include "iseq.h" #include "insns.inc" #include "insns_info.inc" +#include "id_table.h" #include "gc.h" #ifdef HAVE_DLADDR @@ -1547,11 +1548,18 @@ static inline VALUE get_ivar_ic_value(rb_iseq_t *iseq,ID id) { VALUE val; - st_table *tbl = ISEQ_COMPILE_DATA(iseq)->ivar_cache_table; - if(!st_lookup(tbl,(st_data_t)id,&val)){ - val = INT2FIX(iseq->body->is_size++); - st_insert(tbl,id,val); + struct rb_id_table *tbl = ISEQ_COMPILE_DATA(iseq)->ivar_cache_table; + if (tbl) { + if (rb_id_table_lookup(tbl,id,&val)) { + return val; + } + } + else { + tbl = rb_id_table_create(1); + ISEQ_COMPILE_DATA(iseq)->ivar_cache_table = tbl; } + val = INT2FIX(iseq->body->is_size++); + rb_id_table_insert(tbl,id,val); return val; } |