зеркало из https://github.com/github/ruby.git
deduplicate strings sooner at load and compile
We can use rb_fstring_cstr in some places to prevent an intermediate object from being created before deduplication via rb_fstring. * compile.c (iseq_compile_each): use rb_fstring_cstr (rb_insns_name_array): ditto * load.c (rb_load_internal0): ditto git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57745 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
98374b99dd
Коммит
d1a506eca7
|
@ -5971,7 +5971,7 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *const ret, NODE *node, int poppe
|
|||
}
|
||||
case NODE_SCLASS:{
|
||||
ID singletonclass;
|
||||
const rb_iseq_t *singleton_class = NEW_ISEQ(node->nd_body, rb_str_new2("singleton class"),
|
||||
const rb_iseq_t *singleton_class = NEW_ISEQ(node->nd_body, rb_fstring_cstr("singleton class"),
|
||||
ISEQ_TYPE_CLASS, line);
|
||||
|
||||
CHECK(COMPILE(ret, "sclass#recv", node->nd_recv));
|
||||
|
@ -6515,7 +6515,7 @@ rb_insns_name_array(void)
|
|||
VALUE ary = rb_ary_new();
|
||||
int i;
|
||||
for (i = 0; i < numberof(insn_name_info); i++) {
|
||||
rb_ary_push(ary, rb_fstring(rb_str_new2(insn_name_info[i])));
|
||||
rb_ary_push(ary, rb_fstring_cstr(insn_name_info[i]));
|
||||
}
|
||||
return rb_obj_freeze(ary);
|
||||
}
|
||||
|
|
3
load.c
3
load.c
|
@ -612,7 +612,8 @@ rb_load_internal0(rb_thread_t *th, VALUE fname, int wrap)
|
|||
VALUE parser = rb_parser_new();
|
||||
rb_parser_set_context(parser, NULL, FALSE);
|
||||
node = (NODE *)rb_parser_load_file(parser, fname);
|
||||
iseq = rb_iseq_new_top(node, rb_str_new2("<top (required)>"), fname, rb_realpath_internal(Qnil, fname, 1), NULL);
|
||||
iseq = rb_iseq_new_top(node, rb_fstring_cstr("<top (required)>"),
|
||||
fname, rb_realpath_internal(Qnil, fname, 1), NULL);
|
||||
}
|
||||
rb_iseq_eval(iseq);
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче