[#67346] Future of test suites for Ruby — Charles Oliver Nutter <headius@...>

I'll try to be brief so we can discuss all this. tl;dr: RubySpec is

19 messages 2015/01/05

[ruby-core:67593] [ruby-trunk - Bug #10741] const_defined? triggers autoload where it did not before

From: headius@...
Date: 2015-01-14 21:15:15 UTC
List: ruby-core #67593
Issue #10741 has been updated by Charles Nutter.


To be more specific, this assertion fails on MRI:

>assert_equal("#{File.dirname(__FILE__)}/autoloaded.rb", Object.autoload?("Autoloaded"))

Because the previous const_defined? call has already triggered the autoload.

----------------------------------------
Bug #10741: const_defined? triggers autoload where it did not before
https://bugs.ruby-lang.org/issues/10741#change-51013

* Author: Charles Nutter
* Status: Open
* Priority: Normal
* Assignee: 
* ruby -v: 2.0.0
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN
----------------------------------------
This should not cause b.rb to load, but it does in 2.2:

~/projects/jruby $ cat a.rb
module Foo
  autoload :Bar, 'b.rb'
end

p Foo.const_defined?('Bar')

~/projects/jruby $ cat b.rb
puts "in b"
module Foo
  Bar = 1
end

~/projects/jruby $ rvm ruby-2.0 do ruby -I. a.rb
true

~/projects/jruby $ rvm ruby-2.1 do ruby -I. a.rb
in b
true

~/projects/jruby $ rvm ruby-2.2 do ruby -I. a.rb
in b
true

This is likely caused by the :: support in const_get/const_defined not doing autoload-free traversal.



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

In This Thread

Prev Next