зеркало из https://github.com/github/ruby.git
intern instruction
* insns.def (intern): new instruction to turn string into symbol. opt_call_c_function can not dump. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59951 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
b2da3824c5
Коммит
5d988300b2
|
@ -29,9 +29,6 @@
|
|||
#undef RUBY_UNTYPED_DATA_WARNING
|
||||
#define RUBY_UNTYPED_DATA_WARNING 0
|
||||
|
||||
rb_control_frame_t *
|
||||
FUNC_FASTCALL(rb_vm_str_intern)(rb_thread_t *, rb_control_frame_t *);
|
||||
|
||||
#define ISEQ_TYPE_ONCE_GUARD ISEQ_TYPE_DEFINED_GUARD
|
||||
|
||||
#define FIXNUM_INC(n, i) ((n)+(INT2FIX(i)&~FIXNUM_FLAG))
|
||||
|
@ -6582,7 +6579,7 @@ iseq_compile_each0(rb_iseq_t *iseq, LINK_ANCHOR *const ret, NODE *node, int popp
|
|||
case NODE_DSYM:{
|
||||
compile_dstr(iseq, ret, node);
|
||||
if (!popped) {
|
||||
ADD_INSN1(ret, line, opt_call_c_function, rb_vm_str_intern);
|
||||
ADD_INSN(ret, line, intern);
|
||||
}
|
||||
else {
|
||||
ADD_INSN(ret, line, pop);
|
||||
|
|
14
insns.def
14
insns.def
|
@ -398,6 +398,20 @@ toregexp
|
|||
rb_ary_clear(ary);
|
||||
}
|
||||
|
||||
/**
|
||||
@c put
|
||||
@e intern str to Symbol and push it.
|
||||
@j 文字列 str をシンボルに変換してスタックにプッシュする。
|
||||
*/
|
||||
DEFINE_INSN
|
||||
intern
|
||||
()
|
||||
(VALUE str)
|
||||
(VALUE sym)
|
||||
{
|
||||
sym = rb_str_intern(str);
|
||||
}
|
||||
|
||||
/**
|
||||
@c put
|
||||
@e put new array initialized with num values on the stack.
|
||||
|
|
|
@ -2794,13 +2794,6 @@ FUNC_FASTCALL(rb_vm_opt_struct_aset)(rb_thread_t *th, rb_control_frame_t *reg_cf
|
|||
return reg_cfp;
|
||||
}
|
||||
|
||||
rb_control_frame_t *
|
||||
FUNC_FASTCALL(rb_vm_str_intern)(rb_thread_t *th, rb_control_frame_t *reg_cfp)
|
||||
{
|
||||
TOPN(0) = rb_str_intern(TOPN(0));
|
||||
return reg_cfp;
|
||||
}
|
||||
|
||||
/* defined insn */
|
||||
|
||||
static enum defined_type
|
||||
|
|
Загрузка…
Ссылка в новой задаче