From eb33f91cb7a763331e210bc10fbdefa037366496 Mon Sep 17 00:00:00 2001 From: ko1 Date: Tue, 1 Jul 2008 03:05:58 +0000 Subject: * compile.c, insns.def, vm.c, vm_core.h: remove some insns (undef, alias, definemethod). Call RubyVM::FrozenCore's singleton method instead. Add "putiseq" and "putspecialobject" instructions. * id.c, id.h: add ids for above. * tool/parse.rb: "VM" no longer exists. Use RubyVM instead. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@17755 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- insns.def | 99 +++++++++++++++++++++++---------------------------------------- 1 file changed, 36 insertions(+), 63 deletions(-) (limited to 'insns.def') diff --git a/insns.def b/insns.def index 0a23525a01..b5c5fa4314 100644 --- a/insns.def +++ b/insns.def @@ -310,32 +310,56 @@ putself /** @c put - @e put cbase. - @j スタックに cbase をプッシュする。 + @e put some object. + i.e. Fixnum, true, false, nil, and so on. + @j オブジェクト val をスタックにプッシュする。 + i.e. Fixnum, true, false, nil, and so on. */ DEFINE_INSN -putcbase -() +putobject +(VALUE val) () (VALUE val) { - val = vm_get_cbase(GET_ISEQ(), GET_LFP(), GET_DFP()); + /* */ } /** @c put - @e put some object. - i.e. Fixnum, true, false, nil, and so on. - @j オブジェクト val をスタックにプッシュする。 - i.e. Fixnum, true, false, nil, and so on. + @e put special object. "value_type" is for expansion. + @j 特別なオブジェクト val をスタックにプッシュする。 + オブジェクトの種類は value_type による. */ DEFINE_INSN -putobject -(VALUE val) +putspecialobject +(rb_num_t value_type) () (VALUE val) { - /* */ + switch (value_type) { + case VM_SPECIAL_OBJECT_VMCORE: + val = rb_mRubyVMFrozenCore; + break; + case VM_SPECIAL_OBJECT_CBASE: + val = vm_get_cbase(GET_ISEQ(), GET_LFP(), GET_DFP()); + break; + default: + rb_bug("putspecialobject insn: unknown value_type"); + } +} + +/** + @c put + @e put iseq value. + @j put iseq value. + */ +DEFINE_INSN +putiseq +(ISEQ iseq) +() +(VALUE ret) +{ + ret = iseq->self; } /** @@ -712,57 +736,6 @@ adjuststack /* deal with setting */ /**********************************************************/ -/** - @c setting - @e define (singleton) method id as body - @j (特異)メソッド id を body として定義する。 - */ -DEFINE_INSN -definemethod -(ID id, ISEQ body, rb_num_t is_singleton) -(VALUE obj) -() -{ - NODE *cref = vm_get_cref(GET_ISEQ(), GET_LFP(), GET_DFP()); - vm_define_method(th, obj, id, body, is_singleton, cref); -} - -/** - @c setting - @e make alias (if v_p is Qtrue, make valias) - @j alias を作る。もし v_p が Qtrue なら、valias (global variable) を作る。 - */ -DEFINE_INSN -alias -(VALUE v_p) -(VALUE sym1, VALUE sym2) -() -{ - if (v_p == Qtrue) { - rb_alias_variable(SYM2ID(sym1), SYM2ID(sym2)); - } - else { - const VALUE klass = vm_get_cbase(GET_ISEQ(), GET_LFP(), GET_DFP()); - rb_alias(klass, SYM2ID(sym1), SYM2ID(sym2)); - } -} - -/** - @c setting - @e undef - @j undef を行う。 - */ -DEFINE_INSN -undef -() -(VALUE sym) -() -{ - const VALUE klass = vm_get_cbase(GET_ISEQ(), GET_LFP(), GET_DFP()); - rb_undef(klass, SYM2ID(sym)); - INC_VM_STATE_VERSION(); -} - /** @c setting @e defined? -- cgit v1.2.3