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

ruby-changes:40540

From: ko1 <ko1@a...>
Date: Tue, 17 Nov 2015 22:18:41 +0900 (JST)
Subject: [ruby-changes:40540] ko1:r52619 (trunk): revert r52614, r52615, r52617 because they cause serious errors

ko1	2015-11-17 22:18:19 +0900 (Tue, 17 Nov 2015)

  New Revision: 52619

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

  Log:
    revert r52614, r52615, r52617 because they cause serious errors

  Modified files:
    trunk/ChangeLog
    trunk/method.h
    trunk/test/ruby/test_module.rb
    trunk/vm_method.c
Index: method.h
===================================================================
--- method.h	(revision 52618)
+++ method.h	(revision 52619)
@@ -65,8 +65,6 @@ typedef struct rb_callable_method_entry_ https://github.com/ruby/ruby/blob/trunk/method.h#L65
 
 #define METHOD_ENTRY_VISI(me)  (rb_method_visibility_t)(((me)->flags & (IMEMO_FL_USER0 | IMEMO_FL_USER1)) >> (IMEMO_FL_USHIFT+0))
 #define METHOD_ENTRY_BASIC(me) (int)                   (((me)->flags & (IMEMO_FL_USER2                 )) >> (IMEMO_FL_USHIFT+2))
-#define METHOD_ENTRY_COMPLEMENTED(me)     ((me)->flags & IMEMO_FL_USER3)
-#define METHOD_ENTRY_COMPLEMENTED_SET(me) ((me)->flags = (me)->flags | IMEMO_FL_USER3)
 
 static inline void
 METHOD_ENTRY_VISI_SET(rb_method_entry_t *me, rb_method_visibility_t visi)
@@ -145,9 +143,8 @@ typedef struct rb_method_refined_struct https://github.com/ruby/ruby/blob/trunk/method.h#L143
 } rb_method_refined_t;
 
 typedef struct rb_method_definition_struct {
-    rb_method_type_t type :  8; /* method type */
-    int alias_count       : 28;
-    int complemented_count: 28;
+    rb_method_type_t type; /* method type */
+    int alias_count;
 
     union {
 	rb_method_iseq_t iseq;
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 52618)
+++ ChangeLog	(revision 52619)
@@ -2,35 +2,11 @@ Tue Nov 17 19:50:06 2015  NAKAMURA Usaku https://github.com/ruby/ruby/blob/trunk/ChangeLog#L2
 
 	* win32/win32.c (fstat): declare for mingw.
 
-Tue Nov 17 19:32:42 2015  Koichi Sasada  <ko1@a...>
-
-	* method.h (METHOD_ENTRY_COMPLEMENTED(_SET)): introduced to recognize
-	  complemented method entries or not. There are some cases that callabe
-	  method entries do not have defined_class.
-
-	* vm_method.c (rb_method_entry_complement_defined_class):
-	  use METHOD_ENTRY_COMPLEMENTED_SET().
-
 Tue Nov 17 19:02:59 2015  NAKAMURA Usaku  <usa@r...>
 
 	* configure.in (BASERUBY): use Kernel#print instead of Kernel#p because
 	  the baseruby may output CRLF as end of line.
 
-Tue Nov 17 18:36:52 2015  Koichi Sasada  <ko1@a...>
-
-	* method.h: introduce rb_method_definition_t::complemented_count.
-
-	* vm_method.c (method_definition_addref_complement): introduced.
-
-	  def->alias_count is used to decide warn or do not warn at method
-	  redefinition. Complemented method entries should not prevent
-	  redefiniton warnings.
-
-	* vm_method.c (rb_method_definition_release): release def iff
-	  alias_count == 0 && complemented_count == 0.
-
-	* test/ruby/test_module.rb: add a test.
-
 Tue Nov 17 15:34:34 2015  Martin Duerst  <duerst@i...>
 	* NEWS: Added update from Unicode 7.0.0 to 8.0.0 [ci skip]
 
Index: vm_method.c
===================================================================
--- vm_method.c	(revision 52618)
+++ vm_method.c	(revision 52619)
@@ -135,24 +135,19 @@ rb_add_method_cfunc(VALUE klass, ID mid, https://github.com/ruby/ruby/blob/trunk/vm_method.c#L135
 }
 
 static void
-rb_method_definition_release(rb_method_definition_t *def, int complemented)
+rb_method_definition_release(rb_method_definition_t *def)
 {
     if (def != NULL) {
-	const int alias_count = def->alias_count;
-	const int complemented_count = def->complemented_count;
-	VM_ASSERT(alias_count >= 0);
-	VM_ASSERT(complemented_count >= 0);
+	const int count = def->alias_count;
+	VM_ASSERT(count >= 0);
 
-	if (alias_count + complemented_count == 0) {
-	    if (METHOD_DEBUG) fprintf(stderr, "-%p-%s:%d,%d (remove)\n", def, rb_id2name(def->original_id), alias_count, complemented_count);
+	if (count == 0) {
+	    if (METHOD_DEBUG) fprintf(stderr, "-%p-%s:%d\n", def, rb_id2name(def->original_id), count);
 	    xfree(def);
 	}
 	else {
-	    if (complemented) def->complemented_count--;
-	    else if (def->alias_count > 0) def->alias_count--;
-
-	    if (METHOD_DEBUG) fprintf(stderr, "-%p-%s:%d->%d,%d->%d (dec)\n", def, rb_id2name(def->original_id),
-				      alias_count, def->alias_count, complemented_count, def->complemented_count);
+	    if (METHOD_DEBUG) fprintf(stderr, "-%p-%s:%d->%d\n", def, rb_id2name(def->original_id), count, count-1);
+	    def->alias_count--;
 	}
     }
 }
@@ -160,7 +155,7 @@ rb_method_definition_release(rb_method_d https://github.com/ruby/ruby/blob/trunk/vm_method.c#L155
 void
 rb_free_method_entry(const rb_method_entry_t *me)
 {
-    rb_method_definition_release(me->def, METHOD_ENTRY_COMPLEMENTED(me));
+    rb_method_definition_release(me->def);
 }
 
 static inline rb_method_entry_t *search_method(VALUE klass, ID id, VALUE *defined_class_ptr);
@@ -347,14 +342,6 @@ method_definition_addref(rb_method_defin https://github.com/ruby/ruby/blob/trunk/vm_method.c#L342
     return def;
 }
 
-static rb_method_definition_t *
-method_definition_addref_complement(rb_method_definition_t *def)
-{
-    def->complemented_count++;
-    if (METHOD_DEBUG) fprintf(stderr, "+%p-%s:%d\n", def, rb_id2name(def->original_id), def->alias_count);
-    return def;
-}
-
 static rb_method_entry_t *
 rb_method_entry_alloc(ID called_id, VALUE owner, VALUE defined_class, const rb_method_definition_t *def)
 {
@@ -398,12 +385,8 @@ const rb_callable_method_entry_t * https://github.com/ruby/ruby/blob/trunk/vm_method.c#L385
 rb_method_entry_complement_defined_class(const rb_method_entry_t *src_me, VALUE defined_class)
 {
     rb_method_entry_t *me = rb_method_entry_alloc(src_me->called_id, src_me->owner, defined_class,
-						  method_definition_addref_complement(src_me->def));
+						  method_definition_addref(src_me->def));
     METHOD_ENTRY_FLAGS_COPY(me, src_me);
-    METHOD_ENTRY_COMPLEMENTED_SET(me);
-
-    VM_ASSERT(RB_TYPE_P(me->owner, T_MODULE));
-
     return (rb_callable_method_entry_t *)me;
 }
 
Index: test/ruby/test_module.rb
===================================================================
--- test/ruby/test_module.rb	(revision 52618)
+++ test/ruby/test_module.rb	(revision 52619)
@@ -1280,20 +1280,6 @@ class TestModule < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/test/ruby/test_module.rb#L1280
         undef foo
       end
     end
-
-    stderr = EnvUtil.verbose_warning do
-      Module.new do
-        def foo; end
-        mod = self
-        c = Class.new do
-          include mod
-        end
-        c.new.foo
-        def foo; end
-      end
-    end
-    assert_match(/: warning: method redefined; discarding old foo/, stderr)
-    assert_match(/: warning: previous definition of foo/, stderr)
   end
 
   def test_protected_singleton_method

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

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