[#81492] [Ruby trunk Feature#13618] [PATCH] auto fiber schedule for rb_wait_for_single_fd and rb_waitpid — normalperson@...

Issue #13618 has been reported by normalperson (Eric Wong).

12 messages 2017/06/01

[ruby-core:81666] [Ruby trunk Bug#13656] Method#super_method returns incorrect result dependent on unrelated module

From: cody@...
Date: 2017-06-13 16:40:30 UTC
List: ruby-core #81666
Issue #13656 has been reported by ccutrer (Cody Cutrer).

----------------------------------------
Bug #13656: Method#super_method returns incorrect result dependent on unrelated module
https://bugs.ruby-lang.org/issues/13656

* Author: ccutrer (Cody Cutrer)
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
* ruby -v: ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-darwin16]
* Backport: 2.2: UNKNOWN, 2.3: UNKNOWN, 2.4: UNKNOWN
----------------------------------------
~~~
module Calculations
  def pluck
     puts "calculations"
  end
end

module Calculations2
  def pluck
    puts "calculations2"
    super
  end
end

class Relation
  include Calculations
end

Relation.prepend(Calculations2)

class CollectionProxy < Relation
  def pluck
    puts "collection_proxy"
    super
  end
end

module CollectionProxy2
  def unrelated
  end
end

# this is the critical line
CollectionProxy.prepend(CollectionProxy2)

ConcreteProxy = Class.new(CollectionProxy)

# these are the expected results
ConcreteProxy.new.method(:pluck).owner == CollectionProxy
ConcreteProxy.new.method(:pluck).super_method.owner == Calculations2
ConcreteProxy.new.method(:pluck).super_method.super_method.owner == Calculations
~~~

The critical line is the CollectionProxy2 module. If I don't prepend it into CollectionProxy (or if I include it instead of prepend it), the expected results pass. But when it *is* prepended, the owner for all super_methods will always be CollectionProxy, as if it can't find any more ancestors (if you actually call `ConcreteProxy.new.pluck` it does call the three methods, in the correct order). So this is an introspection only problem.



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>

In This Thread

Prev Next