ruby-changes:7020
From: ko1 <ko1@a...>
Date: Tue, 12 Aug 2008 19:02:29 +0900 (JST)
Subject: [ruby-changes:7020] Ruby:r18538 (trunk): * vm.c, vm_insnhelper.c (vm_define_method): move
ko1 2008-08-12 18:59:06 +0900 (Tue, 12 Aug 2008) New Revision: 18538 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=18538 Log: * vm.c, vm_insnhelper.c (vm_define_method): move function place. Modified files: trunk/ChangeLog trunk/vm.c trunk/vm_insnhelper.c Index: ChangeLog =================================================================== --- ChangeLog (revision 18537) +++ ChangeLog (revision 18538) @@ -1,3 +1,8 @@ +Tue Aug 12 18:58:48 2008 Koichi Sasada <ko1@a...> + + * vm.c, vm_insnhelper.c (vm_define_method): move + function place. + Tue Aug 12 18:56:52 2008 Nobuyoshi Nakada <nobu@r...> * include/ruby/intern.h (rb_str_new2, rb_tainted_str_new2, Index: vm.c =================================================================== --- vm.c (revision 18537) +++ vm.c (revision 18538) @@ -1655,6 +1655,46 @@ return Qnil; } +static void +vm_define_method(rb_thread_t *th, VALUE obj, ID id, rb_iseq_t *miseq, + rb_num_t is_singleton, NODE *cref) +{ + NODE *newbody; + VALUE klass = cref->nd_clss; + int noex = cref->nd_visi; + + if (NIL_P(klass)) { + rb_raise(rb_eTypeError, "no class/module to add method"); + } + + if (is_singleton) { + if (FIXNUM_P(obj) || SYMBOL_P(obj)) { + rb_raise(rb_eTypeError, + "can't define singleton method \"%s\" for %s", + rb_id2name(id), rb_obj_classname(obj)); + } + + if (OBJ_FROZEN(obj)) { + rb_error_frozen("object"); + } + + klass = rb_singleton_class(obj); + noex = NOEX_PUBLIC; + } + + /* dup */ + COPY_CREF(miseq->cref_stack, cref); + miseq->klass = klass; + miseq->defined_method_id = id; + newbody = NEW_NODE(RUBY_VM_METHOD_NODE, 0, miseq->self, 0); + rb_add_method(klass, id, newbody, noex); + + if (!is_singleton && noex == NOEX_MODFUNC) { + rb_add_method(rb_singleton_class(klass), id, newbody, NOEX_PUBLIC); + } + INC_VM_STATE_VERSION(); +} + static VALUE m_core_define_method(VALUE self, VALUE cbase, VALUE sym, VALUE iseqval) { Index: vm_insnhelper.c =================================================================== --- vm_insnhelper.c (revision 18537) +++ vm_insnhelper.c (revision 18538) @@ -1061,46 +1061,6 @@ return klass; } -static inline void -vm_define_method(rb_thread_t *th, VALUE obj, ID id, rb_iseq_t *miseq, - rb_num_t is_singleton, NODE *cref) -{ - NODE *newbody; - VALUE klass = cref->nd_clss; - int noex = cref->nd_visi; - - if (NIL_P(klass)) { - rb_raise(rb_eTypeError, "no class/module to add method"); - } - - if (is_singleton) { - if (FIXNUM_P(obj) || SYMBOL_P(obj)) { - rb_raise(rb_eTypeError, - "can't define singleton method \"%s\" for %s", - rb_id2name(id), rb_obj_classname(obj)); - } - - if (OBJ_FROZEN(obj)) { - rb_error_frozen("object"); - } - - klass = rb_singleton_class(obj); - noex = NOEX_PUBLIC; - } - - /* dup */ - COPY_CREF(miseq->cref_stack, cref); - miseq->klass = klass; - miseq->defined_method_id = id; - newbody = NEW_NODE(RUBY_VM_METHOD_NODE, 0, miseq->self, 0); - rb_add_method(klass, id, newbody, noex); - - if (!is_singleton && noex == NOEX_MODFUNC) { - rb_add_method(rb_singleton_class(klass), id, newbody, NOEX_PUBLIC); - } - INC_VM_STATE_VERSION(); -} - static inline NODE * vm_method_search(VALUE id, VALUE klass, IC ic) { -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/