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 | |
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
-rw-r--r-- | ChangeLog | 14 | ||||
-rw-r--r-- | compile.c | 16 | ||||
-rw-r--r-- | iseq.c | 8 | ||||
-rw-r--r-- | iseq.h | 2 |
4 files changed, 32 insertions, 8 deletions
@@ -1,3 +1,17 @@ +Sun May 15 03:13:01 2016 NARUSE, Yui <[email protected]> + + * 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. + Sat May 14 09:04:34 2016 Nobuyoshi Nakada <[email protected]> * lib/mkmf.rb (pkg_config): use xsystem consistently to set up @@ -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; } @@ -21,6 +21,7 @@ #include "gc.h" #include "vm_core.h" #include "iseq.h" +#include "id_table.h" #include "insns.inc" #include "insns_info.inc" @@ -58,8 +59,9 @@ compile_data_free(struct iseq_compile_data *compile_data) ruby_xfree(cur); cur = next; } - st_free_table(compile_data->ivar_cache_table); - + if (compile_data->ivar_cache_table) { + rb_id_table_free(compile_data->ivar_cache_table); + } ruby_xfree(compile_data); } } @@ -300,7 +302,7 @@ prepare_iseq_build(rb_iseq_t *iseq, ISEQ_COMPILE_DATA(iseq)->option = option; ISEQ_COMPILE_DATA(iseq)->last_coverable_line = -1; - ISEQ_COMPILE_DATA(iseq)->ivar_cache_table = st_init_numtable(); + ISEQ_COMPILE_DATA(iseq)->ivar_cache_table = NULL; if (option->coverage_enabled) { VALUE coverages = rb_get_coverages(); @@ -213,7 +213,7 @@ struct iseq_compile_data { unsigned int ci_index; unsigned int ci_kw_index; const rb_compile_option_t *option; - st_table *ivar_cache_table; + struct rb_id_table *ivar_cache_table; #if SUPPORT_JOKE st_table *labels_table; #endif |