diff options
Diffstat (limited to 'insns.def')
-rw-r--r-- | insns.def | 38 |
1 files changed, 38 insertions, 0 deletions
@@ -188,6 +188,22 @@ getinstancevariable /** @c variable + @e get class local instance variable id of obj. + @j obj のクラスローカルインスタンス変数 id を得る。 + */ +DEFINE_INSN +getinstancevariable2 +(ID id) +() +(VALUE val) +{ + /* need to cache composed id */ + id = rb_compose_ivar2(id, eval_get_cvar_base(th, GET_ISEQ())); + val = rb_ivar_get(GET_SELF(), id); +} + +/** + @c variable @e set instance variable id of obj as val. @j obj のインスタンス変数を val にする。 */ @@ -202,6 +218,22 @@ setinstancevariable /** @c variable + @e set class local instance variable id of obj as val. + @j obj のクラスローカルインスタンス変数を val にする。 + */ +DEFINE_INSN +setinstancevariable2 +(ID id) +(VALUE val) +() +{ + /* need to cache composed id */ + id = rb_compose_ivar2(id, eval_get_cvar_base(th, GET_ISEQ())); + rb_ivar_set(GET_SELF(), id, val); +} + +/** + @c variable @e get class variable id of klass as val. @j klass のクラス変数 id を得る。 */ @@ -901,6 +933,12 @@ defined expr_type = "instance-variable"; } break; + case DEFINED_IVAR2: + klass = get_cref(GET_ISEQ(), GET_LFP())->nd_clss; + if (rb_ivar_defined(GET_SELF(), rb_compose_ivar2(SYM2ID(obj), klass))) { + expr_type = "class local instance-variable"; + } + break; case DEFINED_GVAR: if (rb_gvar_defined((struct global_entry *)(obj & ~1))) { expr_type = "global-variable"; |