名前 | カテゴリ | 説明 |
---|---|---|
nop | nop | nop |
getlocal | variable | level, idx で指定されたローカル変数の値をスタックに置く。 |
setlocal | variable | level, idx で指定されたローカル変数の値を val にする。 |
getblockparam | variable | ブロックパラメータを取得する。 |
setblockparam | variable | ブロックパラメータを設定する。 |
getspecial | variable | 特殊なローカル変数($~, $_, ...)の値を得る。 |
setspecial | variable | 特別なローカル変数($~, $_, ...)の値を設定する。 |
getinstancevariable | variable | self のインスタンス変数 id の値を得る。 |
setinstancevariable | variable | self のインスタンス変数 id を val にする。 |
getclassvariable | variable | 現在のスコープのクラス変数 id の値を得る。 |
setclassvariable | variable | klass のクラス変数 id を val にする。 |
getconstant | variable | 定数 id の値を得る。 |
setconstant | variable | 定数 id の値を val にする。 |
getglobal | variable | グローバル変数 id の値を得る。 |
setglobal | variable | グローバル変数 id の値を設定する。 |
putnil | put | スタックに nil をプッシュする。 |
putself | put | スタックに self をプッシュする。 |
putobject | put | オブジェクト val をスタックにプッシュする。 |
putspecialobject | put | 特別なオブジェクト val をスタックにプッシュする。 |
putiseq | put | iseq をスタックにプッシュする。 |
putstring | put | 文字列をコピーしてスタックにプッシュする。 |
concatstrings | put | スタックトップの文字列を n 個連結し,結果をスタックにプッシュする。 |
tostring | put | to_s の結果をスタックにプッシュする。 |
freezestring | put | (埋め込み)文字列を freeze する。もし、debug_info が与えられていれば、それを設定する。 |
toregexp | put | 文字列 str を正規表現にコンパイルしてスタックにプッシュする。 |
intern | put | 文字列 str をシンボルに変換してスタックにプッシュする。 |
newarray | put | 新しい配列をスタック上の num 個の値で初期化して生成しプッシュする。 |
duparray | put | 配列 ary を dup してスタックにプッシュする。 |
expandarray | put | スタックトップのオブジェクトが配列であれば、それを展開する。 |
concatarray | put | 二つの配列 ary1, ary2 を連結しスタックへプッシュする。 |
splatarray | put | splat のために配列 ary に対して to_a を呼び出す。 |
newhash | put | 新しいハッシュをスタックトップの n 個を初期値として生成する。 |
newrange | put | Range.new(low, high, flag) のようなオブジェクトを生成しスタックにプッシュする。 |
pop | stack | スタックから一つポップする。 |
dup | stack | スタックトップをコピーしてスタックにプッシュする。 |
dupn | stack | スタックトップの n 個をコピーしてスタックにプッシュする。 |
swap | stack | スタックトップの 2 つの値を交換する。 |
reverse | stack | スタックトップの n 個の値を逆転する。 |
reput | stack | スタックキャッシングの状態を調整するために必要な命令。 |
topn | stack | スタックトップから n 個目をスタックにプッシュする。 |
setn | stack | スタックトップの値を n 個目のスタックにコピー |
adjuststack | stack | current stack を空にする。 |
defined | setting | defined? を行う。 |
checkmatch | setting | see above comments. |
checkkeyword | setting | キーワードが指定されているかどうかチェックする |
trace2 | setting | trace 用の命令。 |
defineclass | class/module | クラス定義スコープへ移行する。 |
send | method/iterator | メソッド呼び出しを行う。ci に必要な情報が格納されている。 |
opt_str_freeze | others | |
opt_str_uminus | others | |
opt_newarray_max | others | |
opt_newarray_min | others | |
opt_send_without_block | optimize | ブロックなしでメソッド呼び出しを行う。 |
invokesuper | method/iterator | super を実行する。ci に必要な情報が格納されている。 |
invokeblock | method/iterator | yield を実行する。 |
leave | method/iterator | このスコープから抜ける。 |
throw | exception | 大域ジャンプを行う。 |
jump | jump | PC を (PC + dst) にする。 |
branchif | jump | もし val が false か nil でなければ、PC を (PC + dst) にする。 |
branchunless | jump | もし val が false か nil ならば、PC を (PC + dst) にする。 |
branchnil | jump | もし val が nil ならば、PC を (PC + dst) にする。 |
branchiftype | jump | もし val が type ならば、PC を (PC + dst) にする。 |
getinlinecache | optimize | インラインキャッシュが有効なら、値をスタックにプッシュして dst へジャンプする。 |
setinlinecache | optimize | インラインキャッシュの値を設定する。 |
once | optimize | once を実現する。 |
opt_case_dispatch | optimize | case 文で、可能なら表引きでジャンプする。 |
opt_plus | optimize | 最適化された X+Y。 |
opt_minus | optimize | 最適化された X-Y。 |
opt_mult | optimize | 最適化された X*Y。 |
opt_div | optimize | 最適化された X/Y。 |
opt_mod | optimize | 最適化された X%Y。 |
opt_eq | optimize | 最適化された X==Y。 |
opt_neq | optimize | 最適化された X!=Y。 |
opt_lt | optimize | 最適化された X<Y。 |
opt_le | optimize | 最適化された X<=Y。 |
opt_gt | optimize | 最適化された X>Y。 |
opt_ge | optimize | 最適化された X>=Y。 |
opt_ltlt | optimize | 最適化された X<<Y。 |
opt_aref | optimize | 最適化された recv[obj]。 |
opt_aset | optimize | 最適化された recv[obj] = set。 |
opt_aset_with | optimize | 最適化された recv[str] = set。 |
opt_aref_with | optimize | 最適化された recv[str]。 |
opt_length | optimize | 最適化された recv.length()。 |
opt_size | optimize | 最適化された recv.size()。 |
opt_empty_p | optimize | 最適化された recv.empty?()。 |
opt_succ | optimize | 最適化された recv.succ()。 |
opt_not | optimize | 最適化された recv.!()。 |
opt_regexpmatch1 | optimize | 最適化された正規表現マッチ。 |
opt_regexpmatch2 | optimize | 最適化された正規表現マッチ 2 |
opt_call_c_function | optimize | ネイティブコンパイルしたメソッドを起動。 |
bitblt | joke | BLT |
answer | joke | 人生、宇宙、すべての答え。 |
getlocal_OP__WC__0 | optimize | level, idx で指定されたローカル変数の値をスタックに置く。 |
getlocal_OP__WC__1 | optimize | level, idx で指定されたローカル変数の値をスタックに置く。 |
setlocal_OP__WC__0 | optimize | level, idx で指定されたローカル変数の値を val にする。 |
setlocal_OP__WC__1 | optimize | level, idx で指定されたローカル変数の値を val にする。 |
putobject_OP_INT2FIX_O_0_C_ | optimize | オブジェクト val をスタックにプッシュする。 |
putobject_OP_INT2FIX_O_1_C_ | optimize | オブジェクト val をスタックにプッシュする。 |
trace_nop | nop | nop |
trace_getlocal | variable | level, idx で指定されたローカル変数の値をスタックに置く。 |
trace_setlocal | variable | level, idx で指定されたローカル変数の値を val にする。 |
trace_getblockparam | variable | ブロックパラメータを取得する。 |
trace_setblockparam | variable | ブロックパラメータを設定する。 |
trace_getspecial | variable | 特殊なローカル変数($~, $_, ...)の値を得る。 |
trace_setspecial | variable | 特別なローカル変数($~, $_, ...)の値を設定する。 |
trace_getinstancevariable | variable | self のインスタンス変数 id の値を得る。 |
trace_setinstancevariable | variable | self のインスタンス変数 id を val にする。 |
trace_getclassvariable | variable | 現在のスコープのクラス変数 id の値を得る。 |
trace_setclassvariable | variable | klass のクラス変数 id を val にする。 |
trace_getconstant | variable | 定数 id の値を得る。 |
trace_setconstant | variable | 定数 id の値を val にする。 |
trace_getglobal | variable | グローバル変数 id の値を得る。 |
trace_setglobal | variable | グローバル変数 id の値を設定する。 |
trace_putnil | put | スタックに nil をプッシュする。 |
trace_putself | put | スタックに self をプッシュする。 |
trace_putobject | put | オブジェクト val をスタックにプッシュする。 |
trace_putspecialobject | put | 特別なオブジェクト val をスタックにプッシュする。 |
trace_putiseq | put | iseq をスタックにプッシュする。 |
trace_putstring | put | 文字列をコピーしてスタックにプッシュする。 |
trace_concatstrings | put | スタックトップの文字列を n 個連結し,結果をスタックにプッシュする。 |
trace_tostring | put | to_s の結果をスタックにプッシュする。 |
trace_freezestring | put | (埋め込み)文字列を freeze する。もし、debug_info が与えられていれば、それを設定する。 |
trace_toregexp | put | 文字列 str を正規表現にコンパイルしてスタックにプッシュする。 |
trace_intern | put | 文字列 str をシンボルに変換してスタックにプッシュする。 |
trace_newarray | put | 新しい配列をスタック上の num 個の値で初期化して生成しプッシュする。 |
trace_duparray | put | 配列 ary を dup してスタックにプッシュする。 |
trace_expandarray | put | スタックトップのオブジェクトが配列であれば、それを展開する。 |
trace_concatarray | put | 二つの配列 ary1, ary2 を連結しスタックへプッシュする。 |
trace_splatarray | put | splat のために配列 ary に対して to_a を呼び出す。 |
trace_newhash | put | 新しいハッシュをスタックトップの n 個を初期値として生成する。 |
trace_newrange | put | Range.new(low, high, flag) のようなオブジェクトを生成しスタックにプッシュする。 |
trace_pop | stack | スタックから一つポップする。 |
trace_dup | stack | スタックトップをコピーしてスタックにプッシュする。 |
trace_dupn | stack | スタックトップの n 個をコピーしてスタックにプッシュする。 |
trace_swap | stack | スタックトップの 2 つの値を交換する。 |
trace_reverse | stack | スタックトップの n 個の値を逆転する。 |
trace_reput | stack | スタックキャッシングの状態を調整するために必要な命令。 |
trace_topn | stack | スタックトップから n 個目をスタックにプッシュする。 |
trace_setn | stack | スタックトップの値を n 個目のスタックにコピー |
trace_adjuststack | stack | current stack を空にする。 |
trace_defined | setting | defined? を行う。 |
trace_checkmatch | setting | see above comments. |
trace_checkkeyword | setting | キーワードが指定されているかどうかチェックする |
trace_trace2 | setting | trace 用の命令。 |
trace_defineclass | class/module | クラス定義スコープへ移行する。 |
trace_send | method/iterator | メソッド呼び出しを行う。ci に必要な情報が格納されている。 |
trace_opt_str_freeze | others | |
trace_opt_str_uminus | others | |
trace_opt_newarray_max | others | |
trace_opt_newarray_min | others | |
trace_opt_send_without_block | optimize | ブロックなしでメソッド呼び出しを行う。 |
trace_invokesuper | method/iterator | super を実行する。ci に必要な情報が格納されている。 |
trace_invokeblock | method/iterator | yield を実行する。 |
trace_leave | method/iterator | このスコープから抜ける。 |
trace_throw | exception | 大域ジャンプを行う。 |
trace_jump | jump | PC を (PC + dst) にする。 |
trace_branchif | jump | もし val が false か nil でなければ、PC を (PC + dst) にする。 |
trace_branchunless | jump | もし val が false か nil ならば、PC を (PC + dst) にする。 |
trace_branchnil | jump | もし val が nil ならば、PC を (PC + dst) にする。 |
trace_branchiftype | jump | もし val が type ならば、PC を (PC + dst) にする。 |
trace_getinlinecache | optimize | インラインキャッシュが有効なら、値をスタックにプッシュして dst へジャンプする。 |
trace_setinlinecache | optimize | インラインキャッシュの値を設定する。 |
trace_once | optimize | once を実現する。 |
trace_opt_case_dispatch | optimize | case 文で、可能なら表引きでジャンプする。 |
trace_opt_plus | optimize | 最適化された X+Y。 |
trace_opt_minus | optimize | 最適化された X-Y。 |
trace_opt_mult | optimize | 最適化された X*Y。 |
trace_opt_div | optimize | 最適化された X/Y。 |
trace_opt_mod | optimize | 最適化された X%Y。 |
trace_opt_eq | optimize | 最適化された X==Y。 |
trace_opt_neq | optimize | 最適化された X!=Y。 |
trace_opt_lt | optimize | 最適化された X<Y。 |
trace_opt_le | optimize | 最適化された X<=Y。 |
trace_opt_gt | optimize | 最適化された X>Y。 |
trace_opt_ge | optimize | 最適化された X>=Y。 |
trace_opt_ltlt | optimize | 最適化された X<<Y。 |
trace_opt_aref | optimize | 最適化された recv[obj]。 |
trace_opt_aset | optimize | 最適化された recv[obj] = set。 |
trace_opt_aset_with | optimize | 最適化された recv[str] = set。 |
trace_opt_aref_with | optimize | 最適化された recv[str]。 |
trace_opt_length | optimize | 最適化された recv.length()。 |
trace_opt_size | optimize | 最適化された recv.size()。 |
trace_opt_empty_p | optimize | 最適化された recv.empty?()。 |
trace_opt_succ | optimize | 最適化された recv.succ()。 |
trace_opt_not | optimize | 最適化された recv.!()。 |
trace_opt_regexpmatch1 | optimize | 最適化された正規表現マッチ。 |
trace_opt_regexpmatch2 | optimize | 最適化された正規表現マッチ 2 |
trace_opt_call_c_function | optimize | ネイティブコンパイルしたメソッドを起動。 |
trace_bitblt | joke | BLT |
trace_answer | joke | 人生、宇宙、すべての答え。 |
trace_getlocal_OP__WC__0 | optimize | level, idx で指定されたローカル変数の値をスタックに置く。 |
trace_getlocal_OP__WC__1 | optimize | level, idx で指定されたローカル変数の値をスタックに置く。 |
trace_setlocal_OP__WC__0 | optimize | level, idx で指定されたローカル変数の値を val にする。 |
trace_setlocal_OP__WC__1 | optimize | level, idx で指定されたローカル変数の値を val にする。 |
trace_putobject_OP_INT2FIX_O_0_C_ | optimize | オブジェクト val をスタックにプッシュする。 |
trace_putobject_OP_INT2FIX_O_1_C_ | optimize | オブジェクト val をスタックにプッシュする。 |
Opes
Returns
nop
/* none */
Opes
lindex_t,idx,rb_num_t,level
Returns
VALUE
val
level, idx で指定されたローカル変数の値をスタックに置く。
val = *(vm_get_ep(GET_EP(), level) - idx);
RB_DEBUG_COUNTER_INC(lvar_get);
(void)RB_DEBUG_COUNTER_INC_IF(lvar_get_dynamic, level > 0);
Opes
lindex_t,idx,rb_num_t,level
Returns
level, idx で指定されたローカル変数の値を val にする。
vm_env_write(vm_get_ep(GET_EP(), level), -(int)idx, val);
RB_DEBUG_COUNTER_INC(lvar_set);
(void)RB_DEBUG_COUNTER_INC_IF(lvar_set_dynamic, level > 0);
Opes
lindex_t,idx,rb_num_t,level
Returns
VALUE
val
ブロックパラメータを取得する。
const VALUE *ep = vm_get_ep(GET_EP(), level);
VM_ASSERT(VM_ENV_LOCAL_P(ep));
if (!VM_ENV_FLAGS(ep, VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM)) {
val = rb_vm_bh_to_procval(ec, VM_ENV_BLOCK_HANDLER(ep));
vm_env_write(ep, -(int)idx, val);
VM_ENV_FLAGS_SET(ep, VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM);
}
else {
val = *(ep - idx);
RB_DEBUG_COUNTER_INC(lvar_get);
(void)RB_DEBUG_COUNTER_INC_IF(lvar_get_dynamic, level > 0);
}
Opes
lindex_t,idx,rb_num_t,level
Returns
ブロックパラメータを設定する。
const VALUE *ep = vm_get_ep(GET_EP(), level);
VM_ASSERT(VM_ENV_LOCAL_P(ep));
vm_env_write(ep, -(int)idx, val);
RB_DEBUG_COUNTER_INC(lvar_set);
(void)RB_DEBUG_COUNTER_INC_IF(lvar_set_dynamic, level > 0);
VM_ENV_FLAGS_SET(ep, VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM);
Opes
rb_num_t,key,rb_num_t,type
Returns
VALUE
val
特殊なローカル変数($~, $_, ...)の値を得る。
val = vm_getspecial(ec, GET_LEP(), key, type);
Opes
rb_num_t,key
Returns
特別なローカル変数($~, $_, ...)の値を設定する。
lep_svar_set(ec, GET_LEP(), key, obj);
Opes
ID,id,IC,ic
Returns
VALUE
val
self のインスタンス変数 id の値を得る。
val = vm_getinstancevariable(GET_SELF(), id, ic);
Opes
ID,id,IC,ic
Returns
self のインスタンス変数 id を val にする。
vm_setinstancevariable(GET_SELF(), id, val, ic);
Opes
ID,id
Returns
VALUE
val
現在のスコープのクラス変数 id の値を得る。
val = rb_cvar_get(vm_get_cvar_base(rb_vm_get_cref(GET_EP()), GET_CFP()), id);
Opes
ID,id
Returns
klass のクラス変数 id を val にする。
vm_ensure_not_refinement_module(GET_SELF());
rb_cvar_set(vm_get_cvar_base(rb_vm_get_cref(GET_EP()), GET_CFP()), id, val);
Opes
ID,id
Returns
VALUE
val
定数 id の値を得る。
val = vm_get_ev_const(ec, klass, id, 0);
Opes
ID,id
Returns
定数 id の値を val にする。
vm_check_if_namespace(cbase);
vm_ensure_not_refinement_module(GET_SELF());
rb_const_set(cbase, id, val);
Opes
GENTRY,entry
Returns
VALUE
val
グローバル変数 id の値を得る。
val = GET_GLOBAL((VALUE)entry);
Opes
GENTRY,entry
Returns
グローバル変数 id の値を設定する。
SET_GLOBAL((VALUE)entry, val);
Opes
Returns
VALUE
val
スタックに nil をプッシュする。
val = Qnil;
Opes
Returns
VALUE
val
スタックに self をプッシュする。
val = GET_SELF();
Opes
VALUE,val
Returns
VALUE
val
オブジェクト val をスタックにプッシュする。
/* */
Opes
rb_num_t,value_type
Returns
VALUE
val
特別なオブジェクト val をスタックにプッシュする。
enum vm_special_object_type type;
type = (enum vm_special_object_type)value_type;
val = vm_get_special_object(GET_EP(), type);
Opes
ISEQ,iseq
Returns
VALUE
ret
iseq をスタックにプッシュする。
ret = (VALUE)iseq;
Opes
VALUE,str
Returns
VALUE
val
文字列をコピーしてスタックにプッシュする。
val = rb_str_resurrect(str);
Opes
rb_num_t,num
Returns
VALUE
val
スタックトップの文字列を n 個連結し,結果をスタックにプッシュする。
val = rb_str_concat_literals(num, STACK_ADDR_FROM_TOP(num));
POPN(num);
Opes
Returns
VALUE
val
to_s の結果をスタックにプッシュする。
VALUE rb_obj_as_string_result(VALUE str, VALUE obj);
val = rb_obj_as_string_result(str, val);
Opes
VALUE,debug_info
Returns
VALUE
str
(埋め込み)文字列を freeze する。もし、debug_info が与えられていれば、それを設定する。
vm_freezestring(str, debug_info);
Opes
rb_num_t,opt,rb_num_t,cnt
Returns
VALUE
val
文字列 str を正規表現にコンパイルしてスタックにプッシュする。
VALUE rb_reg_new_ary(VALUE ary, int options);
VALUE rb_ary_tmp_new_from_values(VALUE, long, const VALUE *);
const VALUE ary = rb_ary_tmp_new_from_values(0, cnt, STACK_ADDR_FROM_TOP(cnt));
POPN(cnt);
val = rb_reg_new_ary(ary, (int)opt);
rb_ary_clear(ary);
Opes
Returns
VALUE
sym
文字列 str をシンボルに変換してスタックにプッシュする。
sym = rb_str_intern(str);
Opes
rb_num_t,num
Returns
VALUE
val
新しい配列をスタック上の num 個の値で初期化して生成しプッシュする。
val = rb_ary_new4(num, STACK_ADDR_FROM_TOP(num));
POPN(num);
Opes
VALUE,ary
Returns
VALUE
val
配列 ary を dup してスタックにプッシュする。
val = rb_ary_resurrect(ary);
Opes
rb_num_t,num,rb_num_t,flag
Returns
...
...
スタックトップのオブジェクトが配列であれば、それを展開する。
vm_expandarray(GET_CFP(), ary, num, (int)flag);
Opes
Returns
VALUE
ary
二つの配列 ary1, ary2 を連結しスタックへプッシュする。
ary = vm_concat_array(ary1, ary2);
Opes
VALUE,flag
Returns
VALUE
obj
splat のために配列 ary に対して to_a を呼び出す。
obj = vm_splat_array(flag, ary);
Opes
rb_num_t,num
Returns
VALUE
val
新しいハッシュをスタックトップの n 個を初期値として生成する。
RUBY_DTRACE_CREATE_HOOK(HASH, num);
val = rb_hash_new_with_size(num / 2);
if (num) {
rb_hash_bulk_insert(num, STACK_ADDR_FROM_TOP(num), val);
}
POPN(num);
Opes
rb_num_t,flag
Returns
VALUE
val
Range.new(low, high, flag) のようなオブジェクトを生成しスタックにプッシュする。
val = rb_range_new(low, high, (int)flag);
Opes
Returns
スタックから一つポップする。
(void)val;
/* none */
Opes
Returns
VALUE
val2
VALUE
val1
スタックトップをコピーしてスタックにプッシュする。
val1 = val2 = val;
Opes
rb_num_t,n
Returns
...
...
スタックトップの n 個をコピーしてスタックにプッシュする。
void *dst = GET_SP();
void *src = STACK_ADDR_FROM_TOP(n);
INC_SP(n); /* alloca */
MEMCPY(dst, src, VALUE, n);
Opes
Returns
VALUE
val
VALUE
obj
スタックトップの 2 つの値を交換する。
/* none */
Opes
rb_num_t,n
Returns
...
...
スタックトップの n 個の値を逆転する。
rb_num_t i;
VALUE *sp = STACK_ADDR_FROM_TOP(n);
for (i=0; i<n/2; i++) {
VALUE v0 = sp[i];
VALUE v1 = TOPN(i);
sp[i] = v1;
TOPN(i) = v0;
}
Opes
Returns
VALUE
val
スタックキャッシングの状態を調整するために必要な命令。
/* none */
Opes
rb_num_t,n
Returns
VALUE
val
スタックトップから n 個目をスタックにプッシュする。
val = TOPN(n);
Opes
rb_num_t,n
Returns
VALUE
val
スタックトップの値を n 個目のスタックにコピー
TOPN(n-1) = val;
Opes
rb_num_t,n
Returns
...
...
current stack を空にする。
DEC_SP(n);
Opes
rb_num_t,op_type,VALUE,obj,VALUE,needstr
Returns
VALUE
val
defined? を行う。
val = vm_defined(ec, GET_CFP(), op_type, obj, needstr, v);
Opes
rb_num_t,flag
Returns
VALUE
result
see above comments.
result = vm_check_match(ec, target, pattern, flag);
Opes
lindex_t,kw_bits_index,rb_num_t,keyword_index
Returns
VALUE
ret
キーワードが指定されているかどうかチェックする
ret = vm_check_keyword(kw_bits_index, keyword_index, GET_EP());
Opes
rb_num_t,nf,VALUE,data
Returns
trace 用の命令。
rb_event_flag_t flag = (rb_event_flag_t)nf;
vm_dtrace(flag, ec);
EXEC_EVENT_HOOK(ec, flag, GET_SELF(), 0, 0, 0 /* id and klass are resolved at callee */, data);
Opes
ID,id,ISEQ,class_iseq,rb_num_t,flags
Returns
VALUE
val
クラス定義スコープへ移行する。
VALUE klass = vm_find_or_create_class_by_id(id, flags, cbase, super);
rb_iseq_check(class_iseq);
/* enter scope */
vm_push_frame(ec, class_iseq, VM_FRAME_MAGIC_CLASS | VM_ENV_FLAG_LOCAL, klass,
GET_BLOCK_HANDLER(),
(VALUE)vm_cref_push(ec, klass, NULL, FALSE),
class_iseq->body->iseq_encoded, GET_SP(),
class_iseq->body->local_table_size,
class_iseq->body->stack_max);
RESTORE_REGS();
NEXT_INSN();
Opes
CALL_INFO,ci,CALL_CACHE,cc,ISEQ,blockiseq
Returns
VALUE
val
メソッド呼び出しを行う。ci に必要な情報が格納されている。
struct rb_calling_info calling;
vm_caller_setup_arg_block(ec, reg_cfp, &calling, ci, blockiseq, FALSE);
vm_search_method(ci, cc, calling.recv = TOPN(calling.argc = ci->orig_argc));
CALL_METHOD(&calling, ci, cc);
Opes
VALUE,str
Returns
VALUE
val
if (BASIC_OP_UNREDEFINED_P(BOP_FREEZE, STRING_REDEFINED_OP_FLAG)) {
val = str;
}
else {
val = rb_funcall(rb_str_resurrect(str), idFreeze, 0);
}
Opes
VALUE,str
Returns
VALUE
val
if (BASIC_OP_UNREDEFINED_P(BOP_UMINUS, STRING_REDEFINED_OP_FLAG)) {
val = str;
}
else {
val = rb_funcall(rb_str_resurrect(str), idUMinus, 0);
}
Opes
rb_num_t,num
Returns
VALUE
val
val = vm_opt_newarray_max(num, STACK_ADDR_FROM_TOP(num));
POPN(num);
Opes
rb_num_t,num
Returns
VALUE
val
val = vm_opt_newarray_min(num, STACK_ADDR_FROM_TOP(num));
POPN(num);
Opes
CALL_INFO,ci,CALL_CACHE,cc
Returns
VALUE
val
ブロックなしでメソッド呼び出しを行う。
struct rb_calling_info calling;
calling.block_handler = VM_BLOCK_HANDLER_NONE;
vm_search_method(ci, cc, calling.recv = TOPN(calling.argc = ci->orig_argc));
CALL_METHOD(&calling, ci, cc);
Opes
CALL_INFO,ci,CALL_CACHE,cc,ISEQ,blockiseq
Returns
VALUE
val
super を実行する。ci に必要な情報が格納されている。
struct rb_calling_info calling;
calling.argc = ci->orig_argc;
vm_caller_setup_arg_block(ec, reg_cfp, &calling, ci, blockiseq, TRUE);
calling.recv = GET_SELF();
vm_search_super_method(ec, GET_CFP(), &calling, ci, cc);
CALL_METHOD(&calling, ci, cc);
Opes
CALL_INFO,ci
Returns
VALUE
val
yield を実行する。
struct rb_calling_info calling;
calling.argc = ci->orig_argc;
calling.block_handler = VM_BLOCK_HANDLER_NONE;
calling.recv = GET_SELF();
val = vm_invoke_block(ec, GET_CFP(), &calling, ci);
if (val == Qundef) {
RESTORE_REGS();
NEXT_INSN();
}
Opes
Returns
VALUE
val
このスコープから抜ける。
if (OPT_CHECKED_RUN) {
const VALUE *const bp = vm_base_ptr(reg_cfp);
if (reg_cfp->sp != bp) {
vm_stack_consistency_error(ec, reg_cfp, bp);
}
}
RUBY_VM_CHECK_INTS(ec);
if (vm_pop_frame(ec, GET_CFP(), GET_EP())) {
#if OPT_CALL_THREADED_CODE
rb_ec_thread_ptr(ec)->retval = val;
return 0;
#else
return val;
#endif
}
else {
RESTORE_REGS();
}
Opes
rb_num_t,throw_state
Returns
VALUE
val
大域ジャンプを行う。
RUBY_VM_CHECK_INTS(ec);
val = vm_throw(ec, GET_CFP(), throw_state, throwobj);
THROW_EXCEPTION(val);
/* unreachable */
Opes
OFFSET,dst
Returns
PC を (PC + dst) にする。
RUBY_VM_CHECK_INTS(ec);
JUMP(dst);
Opes
OFFSET,dst
Returns
もし val が false か nil でなければ、PC を (PC + dst) にする。
if (RTEST(val)) {
RUBY_VM_CHECK_INTS(ec);
JUMP(dst);
}
Opes
OFFSET,dst
Returns
もし val が false か nil ならば、PC を (PC + dst) にする。
if (!RTEST(val)) {
RUBY_VM_CHECK_INTS(ec);
JUMP(dst);
}
Opes
OFFSET,dst
Returns
もし val が nil ならば、PC を (PC + dst) にする。
if (NIL_P(val)) {
RUBY_VM_CHECK_INTS(ec);
JUMP(dst);
}
Opes
rb_num_t,type,OFFSET,dst
Returns
もし val が type ならば、PC を (PC + dst) にする。
if (TYPE(val) == (int)type) {
RUBY_VM_CHECK_INTS(ec);
JUMP(dst);
}
Opes
OFFSET,dst,IC,ic
Returns
VALUE
val
インラインキャッシュが有効なら、値をスタックにプッシュして dst へジャンプする。
val = vm_ic_hit_p(ic, GET_EP());
if (val != Qnil) {
JUMP(dst);
}
Opes
IC,ic
Returns
VALUE
val
インラインキャッシュの値を設定する。
vm_ic_update(ic, val, GET_EP());
Opes
ISEQ,iseq,IC,ic
Returns
VALUE
val
once を実現する。
val = vm_once_dispatch(ec, iseq, ic);
Opes
CDHASH,hash,OFFSET,else_offset
Returns
case 文で、可能なら表引きでジャンプする。
OFFSET dst = vm_case_dispatch(hash, else_offset, key);
if (dst) {
JUMP(dst);
}
Opes
CALL_INFO,ci,CALL_CACHE,cc
Returns
VALUE
val
最適化された X+Y。
val = vm_opt_plus(recv, obj);
if (val == Qundef) {
/* other */
PUSH(recv);
PUSH(obj);
CALL_SIMPLE_METHOD(recv);
}
Opes
CALL_INFO,ci,CALL_CACHE,cc
Returns
VALUE
val
最適化された X-Y。
val = vm_opt_minus(recv, obj);
if (val == Qundef) {
/* other */
PUSH(recv);
PUSH(obj);
CALL_SIMPLE_METHOD(recv);
}
Opes
CALL_INFO,ci,CALL_CACHE,cc
Returns
VALUE
val
最適化された X*Y。
val = vm_opt_mult(recv, obj);
if (val == Qundef) {
/* other */
PUSH(recv);
PUSH(obj);
CALL_SIMPLE_METHOD(recv);
}
Opes
CALL_INFO,ci,CALL_CACHE,cc
Returns
VALUE
val
最適化された X/Y。
val = vm_opt_div(recv, obj);
if (val == Qundef) {
/* other */
PUSH(recv);
PUSH(obj);
CALL_SIMPLE_METHOD(recv);
}
Opes
CALL_INFO,ci,CALL_CACHE,cc
Returns
VALUE
val
最適化された X%Y。
val = vm_opt_mod(recv, obj);
if (val == Qundef) {
/* other */
PUSH(recv);
PUSH(obj);
CALL_SIMPLE_METHOD(recv);
}
Opes
CALL_INFO,ci,CALL_CACHE,cc
Returns
VALUE
val
最適化された X==Y。
val = opt_eq_func(recv, obj, ci, cc);
if (val == Qundef) {
/* other */
PUSH(recv);
PUSH(obj);
CALL_SIMPLE_METHOD(recv);
}
Opes
CALL_INFO,ci,CALL_CACHE,cc,CALL_INFO,ci_eq,CALL_CACHE,cc_eq
Returns
VALUE
val
最適化された X!=Y。
val = vm_opt_neq(ci, cc, ci_eq, cc_eq, recv, obj);
if (val == Qundef) {
/* other */
PUSH(recv);
PUSH(obj);
CALL_SIMPLE_METHOD(recv);
}
Opes
CALL_INFO,ci,CALL_CACHE,cc
Returns
VALUE
val
最適化された X<Y。
val = vm_opt_lt(recv, obj);
if (val == Qundef) {
/* other */
PUSH(recv);
PUSH(obj);
CALL_SIMPLE_METHOD(recv);
}
Opes
CALL_INFO,ci,CALL_CACHE,cc
Returns
VALUE
val
最適化された X<=Y。
val = vm_opt_le(recv, obj);
if (val == Qundef) {
/* other */
PUSH(recv);
PUSH(obj);
CALL_SIMPLE_METHOD(recv);
}
Opes
CALL_INFO,ci,CALL_CACHE,cc
Returns
VALUE
val
最適化された X>Y。
val = vm_opt_gt(recv, obj);
if (val == Qundef) {
/* other */
PUSH(recv);
PUSH(obj);
CALL_SIMPLE_METHOD(recv);
}
Opes
CALL_INFO,ci,CALL_CACHE,cc
Returns
VALUE
val
最適化された X>=Y。
val = vm_opt_ge(recv, obj);
if (val == Qundef) {
/* other */
PUSH(recv);
PUSH(obj);
CALL_SIMPLE_METHOD(recv);
}
Opes
CALL_INFO,ci,CALL_CACHE,cc
Returns
VALUE
val
最適化された X<<Y。
val = vm_opt_ltlt(recv, obj);
if (val == Qundef) {
/* other */
PUSH(recv);
PUSH(obj);
CALL_SIMPLE_METHOD(recv);
}
Opes
CALL_INFO,ci,CALL_CACHE,cc
Returns
VALUE
val
最適化された recv[obj]。
val = vm_opt_aref(recv, obj);
if (val == Qundef) {
/* other */
PUSH(recv);
PUSH(obj);
CALL_SIMPLE_METHOD(recv);
}
Opes
CALL_INFO,ci,CALL_CACHE,cc
Returns
VALUE
val
最適化された recv[obj] = set。
val = vm_opt_aset(recv, obj, set);
if (val == Qundef) {
/* other */
PUSH(recv);
PUSH(obj);
PUSH(set);
CALL_SIMPLE_METHOD(recv);
}
Opes
CALL_INFO,ci,CALL_CACHE,cc,VALUE,key
Returns
VALUE
val
最適化された recv[str] = set。
VALUE tmp = vm_opt_aset_with(recv, key, val);
if (tmp != Qundef) {
val = tmp;
}
else {
/* other */
PUSH(recv);
PUSH(rb_str_resurrect(key));
PUSH(val);
CALL_SIMPLE_METHOD(recv);
}
Opes
CALL_INFO,ci,CALL_CACHE,cc,VALUE,key
Returns
VALUE
val
最適化された recv[str]。
val = vm_opt_aref_with(recv, key);
if (val == Qundef) {
/* other */
PUSH(recv);
PUSH(rb_str_resurrect(key));
CALL_SIMPLE_METHOD(recv);
}
Opes
CALL_INFO,ci,CALL_CACHE,cc
Returns
VALUE
val
最適化された recv.length()。
val = vm_opt_length(recv, BOP_LENGTH);
if (val == Qundef) {
/* other */
PUSH(recv);
CALL_SIMPLE_METHOD(recv);
}
Opes
CALL_INFO,ci,CALL_CACHE,cc
Returns
VALUE
val
最適化された recv.size()。
val = vm_opt_length(recv, BOP_SIZE);
if (val == Qundef) {
/* other */
PUSH(recv);
CALL_SIMPLE_METHOD(recv);
}
Opes
CALL_INFO,ci,CALL_CACHE,cc
Returns
VALUE
val
最適化された recv.empty?()。
val = vm_opt_empty_p(recv);
if (val == Qundef) {
/* other */
PUSH(recv);
CALL_SIMPLE_METHOD(recv);
}
Opes
CALL_INFO,ci,CALL_CACHE,cc
Returns
VALUE
val
最適化された recv.succ()。
val = vm_opt_succ(recv);
if (val == Qundef) {
/* other */
PUSH(recv);
CALL_SIMPLE_METHOD(recv);
}
Opes
CALL_INFO,ci,CALL_CACHE,cc
Returns
VALUE
val
最適化された recv.!()。
val = vm_opt_not(ci, cc, recv);
if (val == Qundef) {
/* other */
PUSH(recv);
CALL_SIMPLE_METHOD(recv);
}
Opes
VALUE,recv
Returns
VALUE
val
最適化された正規表現マッチ。
val = vm_opt_regexpmatch1(recv, obj);
Opes
CALL_INFO,ci,CALL_CACHE,cc
Returns
VALUE
val
最適化された正規表現マッチ 2
val = vm_opt_regexpmatch2(obj2, obj1);
if (val == Qundef) {
/* other */
PUSH(obj2);
PUSH(obj1);
CALL_SIMPLE_METHOD(obj2);
}
Opes
rb_insn_func_t,funcptr
Returns
ネイティブコンパイルしたメソッドを起動。
reg_cfp = (funcptr)(ec, reg_cfp);
if (reg_cfp == 0) {
VALUE err = ec->errinfo;
ec->errinfo = Qnil;
THROW_EXCEPTION(err);
}
RESTORE_REGS();
NEXT_INSN();
Opes
Returns
VALUE
ret
BLT
ret = rb_str_new2("a bit of bacon, lettuce and tomato");
Opes
Returns
VALUE
ret
人生、宇宙、すべての答え。
ret = INT2FIX(42);
Opes
lindex_t,idx
Returns
VALUE
val
level, idx で指定されたローカル変数の値をスタックに置く。
val = *(vm_get_ep(GET_EP(), level) - idx);
RB_DEBUG_COUNTER_INC(lvar_get);
(void)RB_DEBUG_COUNTER_INC_IF(lvar_get_dynamic, level > 0);
Opes
lindex_t,idx
Returns
VALUE
val
level, idx で指定されたローカル変数の値をスタックに置く。
val = *(vm_get_ep(GET_EP(), level) - idx);
RB_DEBUG_COUNTER_INC(lvar_get);
(void)RB_DEBUG_COUNTER_INC_IF(lvar_get_dynamic, level > 0);
Opes
lindex_t,idx
Returns
level, idx で指定されたローカル変数の値を val にする。
vm_env_write(vm_get_ep(GET_EP(), level), -(int)idx, val);
RB_DEBUG_COUNTER_INC(lvar_set);
(void)RB_DEBUG_COUNTER_INC_IF(lvar_set_dynamic, level > 0);
Opes
lindex_t,idx
Returns
level, idx で指定されたローカル変数の値を val にする。
vm_env_write(vm_get_ep(GET_EP(), level), -(int)idx, val);
RB_DEBUG_COUNTER_INC(lvar_set);
(void)RB_DEBUG_COUNTER_INC_IF(lvar_set_dynamic, level > 0);
Opes
Returns
VALUE
val
オブジェクト val をスタックにプッシュする。
/* */
Opes
Returns
VALUE
val
オブジェクト val をスタックにプッシュする。
/* */
Opes
Returns
nop
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_nop;
Opes
lindex_t,idx,rb_num_t,level
Returns
VALUE
val
level, idx で指定されたローカル変数の値をスタックに置く。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_getlocal;
Opes
lindex_t,idx,rb_num_t,level
Returns
level, idx で指定されたローカル変数の値を val にする。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_setlocal;
Opes
lindex_t,idx,rb_num_t,level
Returns
VALUE
val
ブロックパラメータを取得する。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_getblockparam;
Opes
lindex_t,idx,rb_num_t,level
Returns
ブロックパラメータを設定する。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_setblockparam;
Opes
rb_num_t,key,rb_num_t,type
Returns
VALUE
val
特殊なローカル変数($~, $_, ...)の値を得る。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_getspecial;
Opes
rb_num_t,key
Returns
特別なローカル変数($~, $_, ...)の値を設定する。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_setspecial;
Opes
ID,id,IC,ic
Returns
VALUE
val
self のインスタンス変数 id の値を得る。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_getinstancevariable;
Opes
ID,id,IC,ic
Returns
self のインスタンス変数 id を val にする。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_setinstancevariable;
Opes
ID,id
Returns
VALUE
val
現在のスコープのクラス変数 id の値を得る。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_getclassvariable;
Opes
ID,id
Returns
klass のクラス変数 id を val にする。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_setclassvariable;
Opes
ID,id
Returns
VALUE
val
定数 id の値を得る。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_getconstant;
Opes
ID,id
Returns
定数 id の値を val にする。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_setconstant;
Opes
GENTRY,entry
Returns
VALUE
val
グローバル変数 id の値を得る。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_getglobal;
Opes
GENTRY,entry
Returns
グローバル変数 id の値を設定する。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_setglobal;
Opes
Returns
VALUE
val
スタックに nil をプッシュする。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_putnil;
Opes
Returns
VALUE
val
スタックに self をプッシュする。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_putself;
Opes
VALUE,val
Returns
VALUE
val
オブジェクト val をスタックにプッシュする。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_putobject;
Opes
rb_num_t,value_type
Returns
VALUE
val
特別なオブジェクト val をスタックにプッシュする。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_putspecialobject;
Opes
ISEQ,iseq
Returns
VALUE
ret
iseq をスタックにプッシュする。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_putiseq;
Opes
VALUE,str
Returns
VALUE
val
文字列をコピーしてスタックにプッシュする。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_putstring;
Opes
rb_num_t,num
Returns
VALUE
val
スタックトップの文字列を n 個連結し,結果をスタックにプッシュする。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_concatstrings;
Opes
Returns
VALUE
val
to_s の結果をスタックにプッシュする。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_tostring;
Opes
VALUE,debug_info
Returns
VALUE
str
(埋め込み)文字列を freeze する。もし、debug_info が与えられていれば、それを設定する。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_freezestring;
Opes
rb_num_t,opt,rb_num_t,cnt
Returns
VALUE
val
文字列 str を正規表現にコンパイルしてスタックにプッシュする。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_toregexp;
Opes
Returns
VALUE
sym
文字列 str をシンボルに変換してスタックにプッシュする。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_intern;
Opes
rb_num_t,num
Returns
VALUE
val
新しい配列をスタック上の num 個の値で初期化して生成しプッシュする。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_newarray;
Opes
VALUE,ary
Returns
VALUE
val
配列 ary を dup してスタックにプッシュする。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_duparray;
Opes
rb_num_t,num,rb_num_t,flag
Returns
...
...
スタックトップのオブジェクトが配列であれば、それを展開する。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_expandarray;
Opes
Returns
VALUE
ary
二つの配列 ary1, ary2 を連結しスタックへプッシュする。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_concatarray;
Opes
VALUE,flag
Returns
VALUE
obj
splat のために配列 ary に対して to_a を呼び出す。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_splatarray;
Opes
rb_num_t,num
Returns
VALUE
val
新しいハッシュをスタックトップの n 個を初期値として生成する。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_newhash;
Opes
rb_num_t,flag
Returns
VALUE
val
Range.new(low, high, flag) のようなオブジェクトを生成しスタックにプッシュする。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_newrange;
Opes
Returns
スタックから一つポップする。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_pop;
Opes
Returns
VALUE
val2
VALUE
val1
スタックトップをコピーしてスタックにプッシュする。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_dup;
Opes
rb_num_t,n
Returns
...
...
スタックトップの n 個をコピーしてスタックにプッシュする。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_dupn;
Opes
Returns
VALUE
val
VALUE
obj
スタックトップの 2 つの値を交換する。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_swap;
Opes
rb_num_t,n
Returns
...
...
スタックトップの n 個の値を逆転する。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_reverse;
Opes
Returns
VALUE
val
スタックキャッシングの状態を調整するために必要な命令。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_reput;
Opes
rb_num_t,n
Returns
VALUE
val
スタックトップから n 個目をスタックにプッシュする。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_topn;
Opes
rb_num_t,n
Returns
VALUE
val
スタックトップの値を n 個目のスタックにコピー
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_setn;
Opes
rb_num_t,n
Returns
...
...
current stack を空にする。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_adjuststack;
Opes
rb_num_t,op_type,VALUE,obj,VALUE,needstr
Returns
VALUE
val
defined? を行う。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_defined;
Opes
rb_num_t,flag
Returns
VALUE
result
see above comments.
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_checkmatch;
Opes
lindex_t,kw_bits_index,rb_num_t,keyword_index
Returns
VALUE
ret
キーワードが指定されているかどうかチェックする
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_checkkeyword;
Opes
rb_num_t,nf,VALUE,data
Returns
trace 用の命令。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_trace2;
Opes
ID,id,ISEQ,class_iseq,rb_num_t,flags
Returns
VALUE
val
クラス定義スコープへ移行する。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_defineclass;
Opes
CALL_INFO,ci,CALL_CACHE,cc,ISEQ,blockiseq
Returns
VALUE
val
メソッド呼び出しを行う。ci に必要な情報が格納されている。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_send;
Opes
VALUE,str
Returns
VALUE
val
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_opt_str_freeze;
Opes
VALUE,str
Returns
VALUE
val
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_opt_str_uminus;
Opes
rb_num_t,num
Returns
VALUE
val
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_opt_newarray_max;
Opes
rb_num_t,num
Returns
VALUE
val
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_opt_newarray_min;
Opes
CALL_INFO,ci,CALL_CACHE,cc
Returns
VALUE
val
ブロックなしでメソッド呼び出しを行う。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_opt_send_without_block;
Opes
CALL_INFO,ci,CALL_CACHE,cc,ISEQ,blockiseq
Returns
VALUE
val
super を実行する。ci に必要な情報が格納されている。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_invokesuper;
Opes
CALL_INFO,ci
Returns
VALUE
val
yield を実行する。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_invokeblock;
Opes
Returns
VALUE
val
このスコープから抜ける。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_leave;
Opes
rb_num_t,throw_state
Returns
VALUE
val
大域ジャンプを行う。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_throw;
Opes
OFFSET,dst
Returns
PC を (PC + dst) にする。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_jump;
Opes
OFFSET,dst
Returns
もし val が false か nil でなければ、PC を (PC + dst) にする。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_branchif;
Opes
OFFSET,dst
Returns
もし val が false か nil ならば、PC を (PC + dst) にする。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_branchunless;
Opes
OFFSET,dst
Returns
もし val が nil ならば、PC を (PC + dst) にする。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_branchnil;
Opes
rb_num_t,type,OFFSET,dst
Returns
もし val が type ならば、PC を (PC + dst) にする。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_branchiftype;
Opes
OFFSET,dst,IC,ic
Returns
VALUE
val
インラインキャッシュが有効なら、値をスタックにプッシュして dst へジャンプする。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_getinlinecache;
Opes
IC,ic
Returns
VALUE
val
インラインキャッシュの値を設定する。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_setinlinecache;
Opes
ISEQ,iseq,IC,ic
Returns
VALUE
val
once を実現する。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_once;
Opes
CDHASH,hash,OFFSET,else_offset
Returns
case 文で、可能なら表引きでジャンプする。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_opt_case_dispatch;
Opes
CALL_INFO,ci,CALL_CACHE,cc
Returns
VALUE
val
最適化された X+Y。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_opt_plus;
Opes
CALL_INFO,ci,CALL_CACHE,cc
Returns
VALUE
val
最適化された X-Y。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_opt_minus;
Opes
CALL_INFO,ci,CALL_CACHE,cc
Returns
VALUE
val
最適化された X*Y。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_opt_mult;
Opes
CALL_INFO,ci,CALL_CACHE,cc
Returns
VALUE
val
最適化された X/Y。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_opt_div;
Opes
CALL_INFO,ci,CALL_CACHE,cc
Returns
VALUE
val
最適化された X%Y。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_opt_mod;
Opes
CALL_INFO,ci,CALL_CACHE,cc
Returns
VALUE
val
最適化された X==Y。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_opt_eq;
Opes
CALL_INFO,ci,CALL_CACHE,cc,CALL_INFO,ci_eq,CALL_CACHE,cc_eq
Returns
VALUE
val
最適化された X!=Y。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_opt_neq;
Opes
CALL_INFO,ci,CALL_CACHE,cc
Returns
VALUE
val
最適化された X<Y。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_opt_lt;
Opes
CALL_INFO,ci,CALL_CACHE,cc
Returns
VALUE
val
最適化された X<=Y。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_opt_le;
Opes
CALL_INFO,ci,CALL_CACHE,cc
Returns
VALUE
val
最適化された X>Y。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_opt_gt;
Opes
CALL_INFO,ci,CALL_CACHE,cc
Returns
VALUE
val
最適化された X>=Y。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_opt_ge;
Opes
CALL_INFO,ci,CALL_CACHE,cc
Returns
VALUE
val
最適化された X<<Y。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_opt_ltlt;
Opes
CALL_INFO,ci,CALL_CACHE,cc
Returns
VALUE
val
最適化された recv[obj]。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_opt_aref;
Opes
CALL_INFO,ci,CALL_CACHE,cc
Returns
VALUE
val
最適化された recv[obj] = set。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_opt_aset;
Opes
CALL_INFO,ci,CALL_CACHE,cc,VALUE,key
Returns
VALUE
val
最適化された recv[str] = set。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_opt_aset_with;
Opes
CALL_INFO,ci,CALL_CACHE,cc,VALUE,key
Returns
VALUE
val
最適化された recv[str]。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_opt_aref_with;
Opes
CALL_INFO,ci,CALL_CACHE,cc
Returns
VALUE
val
最適化された recv.length()。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_opt_length;
Opes
CALL_INFO,ci,CALL_CACHE,cc
Returns
VALUE
val
最適化された recv.size()。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_opt_size;
Opes
CALL_INFO,ci,CALL_CACHE,cc
Returns
VALUE
val
最適化された recv.empty?()。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_opt_empty_p;
Opes
CALL_INFO,ci,CALL_CACHE,cc
Returns
VALUE
val
最適化された recv.succ()。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_opt_succ;
Opes
CALL_INFO,ci,CALL_CACHE,cc
Returns
VALUE
val
最適化された recv.!()。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_opt_not;
Opes
VALUE,recv
Returns
VALUE
val
最適化された正規表現マッチ。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_opt_regexpmatch1;
Opes
CALL_INFO,ci,CALL_CACHE,cc
Returns
VALUE
val
最適化された正規表現マッチ 2
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_opt_regexpmatch2;
Opes
rb_insn_func_t,funcptr
Returns
ネイティブコンパイルしたメソッドを起動。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_opt_call_c_function;
Opes
Returns
VALUE
ret
BLT
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_bitblt;
Opes
Returns
VALUE
ret
人生、宇宙、すべての答え。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_answer;
Opes
lindex_t,idx
Returns
VALUE
val
level, idx で指定されたローカル変数の値をスタックに置く。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_getlocal_OP__WC__0;
Opes
lindex_t,idx
Returns
VALUE
val
level, idx で指定されたローカル変数の値をスタックに置く。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_getlocal_OP__WC__1;
Opes
lindex_t,idx
Returns
level, idx で指定されたローカル変数の値を val にする。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_setlocal_OP__WC__0;
Opes
lindex_t,idx
Returns
level, idx で指定されたローカル変数の値を val にする。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_setlocal_OP__WC__1;
Opes
Returns
VALUE
val
オブジェクト val をスタックにプッシュする。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_putobject_OP_INT2FIX_O_0_C_;
Opes
Returns
VALUE
val
オブジェクト val をスタックにプッシュする。
vm_trace(ec, GET_CFP(), GET_PC());
goto start_of_putobject_OP_INT2FIX_O_1_C_;