From: eregontp@... Date: 2021-05-05T01:07:53+00:00 Subject: [ruby-core:103722] [Ruby master Bug#15928] Constant declaration does not conform to JIS 3017:2013 Issue #15928 has been updated by Eregon (Benoit Daloze). jeremyevans0 (Jeremy Evans) wrote in #note-4: > Like many specs, the added spec describes the actual behavior of CRuby at the time it was added, without regard for whether the behavior was intentional or not. If users depend on it and filed a bug, it becomes de facto expected behavior. > So the fact that the spec exists is not a reason not to fix the bug. Indeed. > My pull request removes the spec. No, the spec should be kept for older versions/other implementations, and we should have a spec for the new behavior. ---------------------------------------- Bug #15928: Constant declaration does not conform to JIS 3017:2013 https://bugs.ruby-lang.org/issues/15928#change-91816 * Author: yugui (Yuki Sonoda) * Status: Open * Priority: Normal * ruby -v: ruby 2.7.0dev (2019-06-16T14:01:46Z master d4929f5185) [x86_64-darwin18] * Backport: 2.4: UNKNOWN, 2.5: UNKNOWN, 2.6: UNKNOWN ---------------------------------------- The order of evaluation in constant declaration does not conform to JIS 3017:2013 11.4.2.2.3. # Problem Suppose that we are evaluating the following program. ``` expr::C = lhs ``` The standard seems to be requiring the following evaluation order: 1. expr * raise a TypeError if the value is not a kind of Module 2. lhs 3. rb_const_set(expr, :C, lhs) However, the actual implementation evaluates in the following order 1. lhs 2. expr 3. rb_const_set(expr, :C, lhs) * raise a TypeError if the expr is not a kind of Module # How to reproduce The next program does not raise "recv" but raises "value" ``` raise("recv")::C = raise("value") ``` The next program does not raise a TypeError but raises a RuntimeError ``` A = 1 A::C = raise("value") ``` # Question * Is this interpretation of the standard correct? * If it is, Should we change the current behavior? * If we shouldn't, does it mean an issue in the standard? c.f. * https://twitter.com/n0kada/status/1140234416175763456 -- https://bugs.ruby-lang.org/ Unsubscribe: