mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
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:
parent
5522e010e5
commit
3fc5459977
2 changed files with 10 additions and 3 deletions
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue