mirror of
https://github.com/ruby/ruby.git
synced 2025-09-17 01:23:57 +02:00
merge revision(s) 49376,49387,49389: [Backport #10761]
* st.c (st_numhash): mix float value for flonum * hash.c (rb_any_hash): ditto * benchmark/bm_hash_aref_flo.rb: new benchmark * benchmark/bm_hash_ident_flo.rb: ditto [Bug #10761] * benchmark/bm_marshal_dump_flo.rb: new benchmark for [Bug #10761] * marshal.c (w_object, marshal_dump): use indetity tables for arbitrary VALUE keys, because of performance of FLONUM. [Bug #10761] * marshal.c (obj_alloc_by_klass, marshal_load): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_2@49513 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
b5623f9863
commit
665f7a2ff1
9 changed files with 67 additions and 8 deletions
|
@ -751,7 +751,7 @@ w_object(VALUE obj, struct dump_arg *arg, int limit)
|
|||
VALUE real_obj = obj;
|
||||
obj = compat->dumper(real_obj);
|
||||
if (!arg->compat_tbl) {
|
||||
arg->compat_tbl = st_init_numtable();
|
||||
arg->compat_tbl = rb_init_identtable();
|
||||
}
|
||||
st_insert(arg->compat_tbl, (st_data_t)obj, (st_data_t)real_obj);
|
||||
if (obj != real_obj && !ivtbl) hasiv = 0;
|
||||
|
@ -1000,7 +1000,7 @@ marshal_dump(int argc, VALUE *argv)
|
|||
wrapper = TypedData_Make_Struct(rb_cData, struct dump_arg, &dump_arg_data, arg);
|
||||
arg->dest = 0;
|
||||
arg->symbols = st_init_numtable();
|
||||
arg->data = st_init_numtable();
|
||||
arg->data = rb_init_identtable();
|
||||
arg->infection = 0;
|
||||
arg->compat_tbl = 0;
|
||||
arg->encodings = 0;
|
||||
|
@ -1510,7 +1510,7 @@ obj_alloc_by_klass(VALUE klass, struct load_arg *arg, VALUE *oldclass)
|
|||
if (oldclass) *oldclass = compat->oldclass;
|
||||
|
||||
if (!arg->compat_tbl) {
|
||||
arg->compat_tbl = st_init_numtable();
|
||||
arg->compat_tbl = rb_init_identtable();
|
||||
}
|
||||
st_insert(arg->compat_tbl, (st_data_t)obj, (st_data_t)real_obj);
|
||||
return obj;
|
||||
|
@ -2019,7 +2019,7 @@ marshal_load(int argc, VALUE *argv)
|
|||
arg->src = port;
|
||||
arg->offset = 0;
|
||||
arg->symbols = st_init_numtable();
|
||||
arg->data = st_init_numtable();
|
||||
arg->data = rb_init_identtable();
|
||||
arg->compat_tbl = 0;
|
||||
arg->proc = 0;
|
||||
arg->readable = 0;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue