[前][次][番号順一覧][スレッド一覧]

ruby-changes:13120

From: nobu <ko1@a...>
Date: Sun, 13 Sep 2009 00:28:14 +0900 (JST)
Subject: [ruby-changes:13120] Ruby:r24870 (trunk): * vm_method.c (rb_remove_method_id): no definition body is

nobu	2009-09-13 00:27:59 +0900 (Sun, 13 Sep 2009)

  New Revision: 24870

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=24870

  Log:
    * vm_method.c (rb_remove_method_id): no definition body is
      undefined.

  Modified files:
    trunk/ChangeLog
    trunk/vm_method.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 24869)
+++ ChangeLog	(revision 24870)
@@ -1,5 +1,8 @@
-Sun Sep 13 00:21:02 2009  Nobuyoshi Nakada  <nobu@r...>
+Sun Sep 13 00:27:57 2009  Nobuyoshi Nakada  <nobu@r...>
 
+	* vm_method.c (rb_remove_method_id): no definition body is
+	  undefined.
+
 	* vm_method.c (rb_add_method, rb_add_method_me): call method added
 	  hook after definition.  [ruby-core:25536]
 
Index: vm_method.c
===================================================================
--- vm_method.c	(revision 24869)
+++ vm_method.c	(revision 24870)
@@ -368,8 +368,8 @@
     return rb_get_method_entry(klass, id);
 }
 
-void
-rb_remove_method_id(VALUE klass, ID mid)
+static void
+remove_method_id(VALUE klass, ID mid)
 {
     st_data_t data;
     rb_method_entry_t *me = 0;
@@ -386,19 +386,13 @@
 	rb_warn("removing `%s' may cause serious problems", rb_id2name(mid));
     }
 
-    if (st_lookup(RCLASS_M_TBL(klass), mid, &data)) {
-	me = (rb_method_entry_t *)data;
-	if (!me || (me->def && me->def->type == VM_METHOD_TYPE_UNDEF)) {
-	    me = 0;
-	}
-	else {
-	    st_delete(RCLASS_M_TBL(klass), &mid, &data);
-	}
-    }
-    if (!me) {
+    if (!st_lookup(RCLASS_M_TBL(klass), mid, &data) ||
+	!(me = (rb_method_entry_t *)data) ||
+	(!me->def || me->def->type == VM_METHOD_TYPE_UNDEF)) {
 	rb_name_error(mid, "method `%s' not defined in %s",
 		      rb_id2name(mid), rb_class2name(klass));
     }
+    st_delete(RCLASS_M_TBL(klass), &mid, &data);
 
     rb_vm_check_redefinition_opt_method(me);
     rb_clear_cache_for_undef(klass, mid);
@@ -412,7 +406,11 @@
     }
 }
 
-#define remove_method(klass, mid) rb_remove_method_id(klass, mid)
+void
+rb_remove_method_id(VALUE klass, ID mid)
+{
+    remove_method(klass, mid);
+}
 
 void
 rb_remove_method(VALUE klass, const char *name)

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]