Issue #7107 has been updated by drbrain (Eric Hodel).


=begin
Additionally, when the module is given a name it still can't find the constant:


  module M
    C = 1
  
    def self.m
      C
    end
  end
  
  puts 'named module'
  M.m
  
  puts 'anonymous module'
  m = M.dup
  begin
    m.m
  rescue NameError
    p $!
  end
  
  puts 're-named module'
  N = m
  begin
    N.m
  rescue NameError
    p $!
  end

Ruby trunk:

  $ ruby20 -v t.rb 
  ruby 2.0.0dev (2012-09-06 trunk 36915) [x86_64-darwin12.1.0]
  named module
  anonymous module
  #<NameError: uninitialized constant Module::C>
  re-named module
  #<NameError: uninitialized constant Module::C>


=end

----------------------------------------
Bug #7107: Ruby can no longer find constants in methods in anonymous modules
https://bugs.ruby-lang.org/issues/7107#change-30113

Author: drbrain (Eric Hodel)
Status: Open
Priority: Normal
Assignee: 
Category: core
Target version: 2.0.0
ruby -v: ruby 2.0.0dev (2012-09-06 trunk 36915) [x86_64-darwin12.1.0]


=begin
With ruby 1.9 and newer C cannot be found if m is duplicated:

  module M
    C = 1
  
    def self.m
      C
    end
  end
  
  puts 'named module'
  M.m
  
  puts 'anonymous module'
  m = M.dup
  m.m

Ruby 1.8:


  $ ruby -v t.rb 
  ruby 1.8.7 (2012-02-08 patchlevel 358) [universal-darwin12.0]
  named module
  anonymous module

With Ruby 1.9:

  $ ruby19 -v t.rb 
  ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-darwin12.2.0]
  named module
  anonymous module
  t.rb:5:in `m': uninitialized constant Module::C (NameError)
  	from t.rb:14:in `<main>'

With trunk:

    $ ruby19 -v t.rb 
    ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-darwin12.2.0]
    named module
    anonymous module
    t.rb:5:in `m': uninitialized constant Module::C (NameError)
    	from t.rb:14:in `<main>'

(({m::C})) works in all three versions, though.
=end



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