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

ruby-changes:2000

From: ko1@a...
Date: 23 Sep 2007 06:16:30 +0900
Subject: [ruby-changes:2000] nobu - Ruby:r13491 (trunk): * eval_method.ci (remove_method): check for undefined method.

nobu	2007-09-23 06:16:21 +0900 (Sun, 23 Sep 2007)

  New Revision: 13491

  Modified files:
    trunk/ChangeLog
    trunk/eval_method.ci
    trunk/version.h

  Log:
    * eval_method.ci (remove_method): check for undefined method.
      [ruby-dev:31816]


  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/version.h?r1=13491&r2=13490
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=13491&r2=13490
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/eval_method.ci?r1=13491&r2=13490

Index: eval_method.ci
===================================================================
--- eval_method.ci	(revision 13490)
+++ eval_method.ci	(revision 13491)
@@ -140,9 +140,11 @@
 
     {
 	/* check re-definition */
+	st_data_t data;
 	NODE *old_node;
 
-	if (st_lookup(RCLASS(klass)->m_tbl, mid, (st_data_t *)&old_node)) {
+	if (st_lookup(RCLASS(klass)->m_tbl, mid, &data)) {
+	    old_node = (NODE *)data;
 	    if (old_node) {
 		if (nd_type(old_node->nd_body->nd_body) == NODE_CFUNC) {
 		    rb_vm_check_redefinition_opt_method(old_node);
@@ -208,13 +210,13 @@
 static NODE *
 search_method(VALUE klass, ID id, VALUE *klassp)
 {
-    NODE *body;
+    st_data_t body;
 
     if (!klass) {
 	return 0;
     }
 
-    while (!st_lookup(RCLASS(klass)->m_tbl, id, (st_data_t *) & body)) {
+    while (!st_lookup(RCLASS(klass)->m_tbl, id, &body)) {
 	klass = RCLASS(klass)->super;
 	if (!klass)
 	    return 0;
@@ -224,7 +226,7 @@
 	*klassp = klass;
     }
 
-    return body;
+    return (NODE *)body;
 }
 
 /*
@@ -289,6 +291,7 @@
 static void
 remove_method(VALUE klass, ID mid)
 {
+    st_data_t data;
     NODE *body;
 
     if (klass == rb_cObject) {
@@ -302,8 +305,8 @@
     if (mid == object_id || mid == __send || mid == __send_bang || mid == init) {
 	rb_warn("removing `%s' may cause serious problem", rb_id2name(mid));
     }
-    if (!st_delete(RCLASS(klass)->m_tbl, &mid, (st_data_t *) & body) ||
-	!body->nd_body) {
+    if (!st_delete(RCLASS(klass)->m_tbl, &mid, &data) ||
+	!(body = (NODE *)data) || !body->nd_body) {
 	rb_name_error(mid, "method `%s' not defined in %s",
 		      rb_id2name(mid), rb_class2name(klass));
     }
@@ -556,6 +559,7 @@
 {
     NODE *orig_fbody, *node;
     VALUE singleton = 0;
+    st_data_t data;
 
     rb_frozen_class_p(klass);
     if (name == def)
@@ -578,7 +582,8 @@
 
     orig_fbody->nd_cnt++;
 
-    if (st_lookup(RCLASS(klass)->m_tbl, name, (st_data_t *) & node)) {
+    if (st_lookup(RCLASS(klass)->m_tbl, name, &data)) {
+	node = (NODE *)data;
 	if (node) {
 	    if (RTEST(ruby_verbose) && node->nd_cnt == 0 && node->nd_body) {
 		rb_warning("discarding old %s", rb_id2name(name));
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 13490)
+++ ChangeLog	(revision 13491)
@@ -1,3 +1,8 @@
+Sun Sep 23 06:16:04 2007  Nobuyoshi Nakada  <nobu@r...>
+
+	* eval_method.ci (remove_method): check for undefined method.
+	  [ruby-dev:31816]
+
 Sun Sep 23 05:42:35 2007  URABE Shyouhei  <shyouhei@r...>
 
 	* lib/rdoc/options.rb (Options::check_diagram): dot -V output
Index: version.h
===================================================================
--- version.h	(revision 13490)
+++ version.h	(revision 13491)
@@ -1,7 +1,7 @@
 #define RUBY_VERSION "1.9.0"
-#define RUBY_RELEASE_DATE "2007-09-22"
+#define RUBY_RELEASE_DATE "2007-09-23"
 #define RUBY_VERSION_CODE 190
-#define RUBY_RELEASE_CODE 20070922
+#define RUBY_RELEASE_CODE 20070923
 #define RUBY_PATCHLEVEL 0
 
 #define RUBY_VERSION_MAJOR 1
@@ -9,7 +9,7 @@
 #define RUBY_VERSION_TEENY 0
 #define RUBY_RELEASE_YEAR 2007
 #define RUBY_RELEASE_MONTH 9
-#define RUBY_RELEASE_DAY 22
+#define RUBY_RELEASE_DAY 23
 
 #ifdef RUBY_EXTERN
 RUBY_EXTERN const char ruby_version[];

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

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