Project

General

Profile

ActionsLike0

Bug #15928

closed

Constant declaration does not conform to JIS 3017:2013

Added by yugui (Yuki Sonoda) almost 6 years ago. Updated about 3 years ago.

Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
ruby 2.7.0dev (2019-06-16T14:01:46Z master d4929f5185) [x86_64-darwin18]
[ruby-core:93184]
Tags:

Description

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 = rhs

The standard seems to be requiring the following evaluation order:

  1. expr
  • raise a TypeError if the value is not a kind of Module
  1. rhs
  2. rb_const_set(expr, :C, rhs)

However, the actual implementation evaluates in the following order

  1. rhs
  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.


Related issues 1 (0 open1 closed)

Related to Ruby - Bug #4443: odd evaluation order in a multiple assignmentClosedko1 (Koichi Sasada)Actions
#9

Updated by Eregon (Benoit Daloze) almost 4 years ago

  • Related to Bug #4443: odd evaluation order in a multiple assignment added
#14

Updated by nobu (Nobuyoshi Nakada) almost 4 years ago

  • Description updated (diff)
#17

Updated by jeremyevans (Jeremy Evans) about 3 years ago

  • Status changed from Open to Closed
ActionsLike0

Also available in: Atom PDF