From: eregontp@... Date: 2021-08-07T18:01:05+00:00 Subject: [ruby-core:104827] [Ruby master Bug#15790] Strange interaction between autoload and $LOADED_FEATURES Issue #15790 has been updated by Eregon (Benoit Daloze). Thanks, it's fine to modify these specs. Their description should still match the tested behavior though, for "does not remove the constant from Module#constants if the loaded file does not define it, but leaves it as 'undefined'" since the new behavior is the constant is no longer undefined but actually removes the constant. So we should duplicate that spec, adapt the description and use version guards. > Do we consider these specs to be desired behavior or just implementation details? Doesn't seem the best place to discuss this but in short, it is important to have those tests to ensure Ruby implementations are compatible in this regard. These specs with the version guards are *extremely* helpful for alternative Ruby implementations to pick that change and understand what changed. ---------------------------------------- Bug #15790: Strange interaction between autoload and $LOADED_FEATURES https://bugs.ruby-lang.org/issues/15790#change-93169 * Author: fxn (Xavier Noria) * Status: Open * Priority: Normal * ruby -v: ruby 2.6.1p33 (2019-01-30 revision 66950) [x86_64-darwin18] * Backport: 2.4: UNKNOWN, 2.5: UNKNOWN, 2.6: UNKNOWN ---------------------------------------- If an autoload fails and we remove its associated file from `$LOADED_FEATURES`, the autoload is back: ``` $ cat x.rb Y = 1 # should be X, emulates a typo $ cat test.rb def au Object.autoload?(:X).inspect end x_rb = File.realpath("x.rb") autoload :X, x_rb puts "before failed autoload autoload path is #{au}" X rescue nil puts "after failed autoload autoload path is #{au}" $LOADED_FEATURES.delete(x_rb) puts "after $LOADED_FEATURES deletion autoload path is #{au}" ``` The output is ``` $ ruby -v test.rb ruby 2.6.1p33 (2019-01-30 revision 66950) [x86_64-darwin18] before failed autoload autoload path is "/Users/fxn/tmp/x.rb" after failed autoload autoload path is nil after $LOADED_FEATURES deletion autoload path is "/Users/fxn/tmp/x.rb" ``` See? Last line would be expected to print a `nil` autoload path. -- https://bugs.ruby-lang.org/ Unsubscribe: