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

ruby-changes:45789

From: naruse <ko1@a...>
Date: Sun, 12 Mar 2017 02:22:43 +0900 (JST)
Subject: [ruby-changes:45789] naruse:r57862 (ruby_2_4): merge revision(s) 57362: [Backport #13096]

naruse	2017-03-12 02:22:39 +0900 (Sun, 12 Mar 2017)

  New Revision: 57862

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

  Log:
    merge revision(s) 57362: [Backport #13096]
    
    vm_method.c: resolve refined method to undef
    
    * vm_method.c (rb_undef): resolve the method entry which refines a
      prepended method entry.  [ruby-core:78944] [Bug #13096]

  Modified directories:
    branches/ruby_2_4/
  Modified files:
    branches/ruby_2_4/test/ruby/test_refinement.rb
    branches/ruby_2_4/version.h
    branches/ruby_2_4/vm_method.c
Index: ruby_2_4/version.h
===================================================================
--- ruby_2_4/version.h	(revision 57861)
+++ ruby_2_4/version.h	(revision 57862)
@@ -1,6 +1,6 @@ https://github.com/ruby/ruby/blob/trunk/ruby_2_4/version.h#L1
 #define RUBY_VERSION "2.4.0"
 #define RUBY_RELEASE_DATE "2017-03-12"
-#define RUBY_PATCHLEVEL 27
+#define RUBY_PATCHLEVEL 28
 
 #define RUBY_RELEASE_YEAR 2017
 #define RUBY_RELEASE_MONTH 3
Index: ruby_2_4/vm_method.c
===================================================================
--- ruby_2_4/vm_method.c	(revision 57861)
+++ ruby_2_4/vm_method.c	(revision 57862)
@@ -1171,7 +1171,7 @@ rb_attr(VALUE klass, ID id, int read, in https://github.com/ruby/ruby/blob/trunk/ruby_2_4/vm_method.c#L1171
 void
 rb_undef(VALUE klass, ID id)
 {
-    rb_method_entry_t *me;
+    const rb_method_entry_t *me;
 
     if (NIL_P(klass)) {
 	rb_raise(rb_eTypeError, "no class to undef method");
@@ -1182,6 +1182,9 @@ rb_undef(VALUE klass, ID id) https://github.com/ruby/ruby/blob/trunk/ruby_2_4/vm_method.c#L1182
     }
 
     me = search_method(klass, id, 0);
+    if (me && me->def->type == VM_METHOD_TYPE_REFINED) {
+	me = rb_resolve_refined_method(Qnil, me);
+    }
 
     if (UNDEFINED_METHOD_ENTRY_P(me) ||
 	UNDEFINED_REFINED_METHOD_P(me->def)) {
Index: ruby_2_4/test/ruby/test_refinement.rb
===================================================================
--- ruby_2_4/test/ruby/test_refinement.rb	(revision 57861)
+++ ruby_2_4/test/ruby/test_refinement.rb	(revision 57862)
@@ -1474,6 +1474,25 @@ class TestRefinement < Test::Unit::TestC https://github.com/ruby/ruby/blob/trunk/ruby_2_4/test/ruby/test_refinement.rb#L1474
     INPUT
   end
 
+  def test_undef_prepended_method
+    bug13096 = '[ruby-core:78944] [Bug #13096]'
+    klass = EnvUtil.labeled_class("X") do
+      def foo; end
+    end
+    klass.prepend(Module.new)
+    ext = EnvUtil.labeled_module("Ext") do
+      refine klass do
+        def foo
+        end
+      end
+    end
+    assert_nothing_raised(NameError, bug13096) do
+      klass.class_eval do
+        undef :foo
+      end
+    end
+  end
+
   def test_call_refined_method_in_duplicate_module
     bug10885 = '[ruby-dev:48878]'
     assert_in_out_err([], <<-INPUT, [], [], bug10885)

Property changes on: ruby_2_4
___________________________________________________________________
Modified: svn:mergeinfo
   Merged /trunk:r57362


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

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