зеркало из https://github.com/github/ruby.git
load.c: use fstring for loaded features and expanded load path
Loaded features is an obvious candidate for fstring since feature paths of Ruby sources are included in iseq locations, and iseq locations are in the fstring table anyways. Deduplicating expanded load path can reuse old objects, since since repeated expansions may recycle before old expanded paths are GC-ed away. * load.c (rb_construct_expanded_load_path): fstring expanded path (get_loaded_features_index): fstring feature path (rb_provide_feature): ditto [ruby-core:69871] [Feature #11331] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51261 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
5522e010e5
Коммит
3fc5459977
|
@ -1,3 +1,10 @@
|
||||||
|
Thu Jul 16 08:47:29 2015 Eric Wong <e@80x24.org>
|
||||||
|
|
||||||
|
* load.c (rb_construct_expanded_load_path): fstring expanded path
|
||||||
|
(get_loaded_features_index): fstring feature path
|
||||||
|
(rb_provide_feature): ditto
|
||||||
|
[ruby-core:69871] [Feature #11331]
|
||||||
|
|
||||||
Thu Jul 16 02:56:14 2015 Eric Wong <e@80x24.org>
|
Thu Jul 16 02:56:14 2015 Eric Wong <e@80x24.org>
|
||||||
|
|
||||||
* thread.c (thread_initialize): avoid RSTRING_PTR and NUMT2INT
|
* thread.c (thread_initialize): avoid RSTRING_PTR and NUMT2INT
|
||||||
|
|
6
load.c
6
load.c
|
@ -87,7 +87,7 @@ rb_construct_expanded_load_path(int type, int *has_relative, int *has_non_cache)
|
||||||
as_str = rb_get_path_check_convert(path, as_str, level);
|
as_str = rb_get_path_check_convert(path, as_str, level);
|
||||||
expanded_path = rb_file_expand_path_fast(as_str, Qnil);
|
expanded_path = rb_file_expand_path_fast(as_str, Qnil);
|
||||||
rb_str_freeze(expanded_path);
|
rb_str_freeze(expanded_path);
|
||||||
rb_ary_push(ary, expanded_path);
|
rb_ary_push(ary, rb_fstring(expanded_path));
|
||||||
}
|
}
|
||||||
rb_obj_freeze(ary);
|
rb_obj_freeze(ary);
|
||||||
vm->expanded_load_path = ary;
|
vm->expanded_load_path = ary;
|
||||||
|
@ -287,9 +287,9 @@ get_loaded_features_index(void)
|
||||||
VALUE entry, as_str;
|
VALUE entry, as_str;
|
||||||
as_str = entry = rb_ary_entry(features, i);
|
as_str = entry = rb_ary_entry(features, i);
|
||||||
StringValue(as_str);
|
StringValue(as_str);
|
||||||
|
as_str = rb_fstring(rb_str_freeze(as_str));
|
||||||
if (as_str != entry)
|
if (as_str != entry)
|
||||||
rb_ary_store(features, i, as_str);
|
rb_ary_store(features, i, as_str);
|
||||||
rb_str_freeze(as_str);
|
|
||||||
features_index_add(as_str, INT2FIX(i));
|
features_index_add(as_str, INT2FIX(i));
|
||||||
}
|
}
|
||||||
reset_loaded_features_snapshot();
|
reset_loaded_features_snapshot();
|
||||||
|
@ -560,7 +560,7 @@ rb_provide_feature(VALUE feature)
|
||||||
}
|
}
|
||||||
rb_str_freeze(feature);
|
rb_str_freeze(feature);
|
||||||
|
|
||||||
rb_ary_push(features, feature);
|
rb_ary_push(features, rb_fstring(feature));
|
||||||
features_index_add(feature, INT2FIX(RARRAY_LEN(features)-1));
|
features_index_add(feature, INT2FIX(RARRAY_LEN(features)-1));
|
||||||
reset_loaded_features_snapshot();
|
reset_loaded_features_snapshot();
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче