Actions
Bug #14469
closedprivate_constant and deprecate_constant are ignored by autoloading
Description
Consider the following code in file "zzz.rb":
class ZZZ
P = D = 1
private_constant :P
deprecate_constant :D
end
After loading the file, accesses to ZZZ::P
and ZZZ:D
cause an exception and a warning respectively.
$ ruby -r./zzz -e ZZZ::P
Traceback (most recent call last):
-e:1:in `<main>': private constant ZZZ::P referenced (NameError)
$ ruby -r./zzz -e ZZZ::D
-e:1: warning: constant ZZZ::D is deprecated
But autoloading the file nothing happens.
$ ruby -e 'class ZZZ;autoload :P,"./zzz.rb";end; ZZZ::P'
$ ruby -e 'class ZZZ;autoload :D,"./zzz.rb";end; ZZZ::D'
After requiring the file in ordinary way, they works.
$ ruby -e 'class ZZZ;autoload :P,"./zzz.rb";end; require "./zzz.rb"; ZZZ::P'
Traceback (most recent call last):
-e:1:in `<main>': private constant ZZZ::P referenced (NameError)
$ ruby -e 'class ZZZ;autoload :D,"./zzz.rb";end; require "./zzz.rb"; ZZZ::D'
-e:1: warning: constant ZZZ::D is deprecated
Updated by nobu (Nobuyoshi Nakada) over 6 years ago
- Status changed from Open to Closed
Applied in changeset trunk|r62392.
variable.c: flags at autoloading
- variable.c (const_tbl_update): flags by deprecate_constant /
private_constant set during autoloading should be preserved
after required. [ruby-core:85516] [Bug #14469]
Updated by naruse (Yui NARUSE) over 6 years ago
- Backport changed from 2.3: REQUIRED, 2.4: REQUIRED, 2.5: REQUIRED to 2.3: REQUIRED, 2.4: REQUIRED, 2.5: DONE
ruby_2_5 r62761 merged revision(s) 62394,62395.
Updated by nagachika (Tomoyuki Chikanaga) over 6 years ago
- Backport changed from 2.3: REQUIRED, 2.4: REQUIRED, 2.5: DONE to 2.3: REQUIRED, 2.4: DONE, 2.5: DONE
ruby_2_4 r62916 merged revision(s) 62394,62395.
Actions
Like0
Like0Like0Like0