summaryrefslogtreecommitdiff
path: root/vm.c
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 /vm.c
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 'vm.c')
-rw-r--r--vm.c52
1 files changed, 51 insertions, 1 deletions
diff --git a/vm.c b/vm.c
index 680375b08a..cfa6d7556a 100644
--- a/vm.c
+++ b/vm.c
@@ -24,6 +24,7 @@
VALUE rb_cRubyVM;
VALUE rb_cThread;
VALUE rb_cEnv;
+VALUE rb_mRubyVMFrozenCore;
VALUE ruby_vm_global_state_version = 1;
rb_thread_t *ruby_current_thread = 0;
@@ -1628,6 +1629,46 @@ rb_thread_alloc(VALUE klass)
return self;
}
+static VALUE
+m_core_set_method_alias(VALUE self, VALUE cbase, VALUE sym1, VALUE sym2)
+{
+ rb_alias(cbase, SYM2ID(sym1), SYM2ID(sym2));
+ return Qnil;
+}
+
+static VALUE
+m_core_set_variable_alias(VALUE self, VALUE sym1, VALUE sym2)
+{
+ rb_alias_variable(SYM2ID(sym1), SYM2ID(sym2));
+ return Qnil;
+}
+
+static VALUE
+m_core_undef_method(VALUE self, VALUE cbase, VALUE sym)
+{
+ rb_undef(cbase, SYM2ID(sym));
+ INC_VM_STATE_VERSION();
+ return Qnil;
+}
+
+static VALUE
+m_core_define_method(VALUE self, VALUE cbase, VALUE sym, VALUE iseqval)
+{
+ rb_iseq_t *iseq;
+ GetISeqPtr(iseqval, iseq);
+ vm_define_method(GET_THREAD(), cbase, SYM2ID(sym), iseq, 0, vm_cref());
+ return Qnil;
+}
+
+static VALUE
+m_core_define_singleton_method(VALUE self, VALUE cbase, VALUE sym, VALUE iseqval)
+{
+ rb_iseq_t *iseq;
+ GetISeqPtr(iseqval, iseq);
+ vm_define_method(GET_THREAD(), cbase, SYM2ID(sym), iseq, 1, vm_cref());
+ return Qnil;
+}
+
VALUE insns_name_array(void);
extern VALUE *rb_gc_stack_start;
extern size_t rb_gc_stack_maxsize;
@@ -1677,7 +1718,16 @@ Init_VM(void)
rb_cRubyVM = rb_define_class("RubyVM", rb_cObject);
rb_undef_alloc_func(rb_cRubyVM);
- /* Env */
+ /* ::VM::FrozenCore */
+ rb_mRubyVMFrozenCore = rb_define_module_under(rb_cRubyVM, "FrozenCore");
+ rb_define_singleton_method(rb_mRubyVMFrozenCore, "core_set_method_alias", m_core_set_method_alias, 3);
+ rb_define_singleton_method(rb_mRubyVMFrozenCore, "core_set_variable_alias", m_core_set_variable_alias, 2);
+ rb_define_singleton_method(rb_mRubyVMFrozenCore, "core_undef_method", m_core_undef_method, 2);
+ rb_define_singleton_method(rb_mRubyVMFrozenCore, "core_define_method", m_core_define_method, 3);
+ rb_define_singleton_method(rb_mRubyVMFrozenCore, "core_define_singleton_method", m_core_define_singleton_method, 3);
+ rb_obj_freeze(rb_mRubyVMFrozenCore);
+
+ /* ::VM::Env */
rb_cEnv = rb_define_class_under(rb_cRubyVM, "Env", rb_cObject);
rb_undef_alloc_func(rb_cEnv);