summaryrefslogtreecommitdiff
path: root/insns.def
diff options
context:
space:
mode:
authorko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-07-01 03:05:58 +0000
committerko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-07-01 03:05:58 +0000
commiteb33f91cb7a763331e210bc10fbdefa037366496 (patch)
tree8cce6055a148d92f34a5a9a5a8bdfe9831c2580a /insns.def
parent5c8ab4d9c2931c0e0f1ee58e516c91f1e9a47486 (diff)
* 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
Diffstat (limited to 'insns.def')
-rw-r--r--insns.def99
1 files changed, 36 insertions, 63 deletions
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;
}
/**
@@ -714,57 +738,6 @@ adjuststack
/**
@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?
@j defined? を行う。
*/