ruby-core@ruby-lang.org archive (unofficial mirror)
 help / color / mirror / Atom feed
From: "k0kubun (Takashi Kokubun) via ruby-core" <ruby-core@ml.ruby-lang.org>
To: ruby-core@ml.ruby-lang.org
Cc: "k0kubun (Takashi Kokubun)" <noreply@ruby-lang.org>
Subject: [ruby-core:120349] [Ruby master Bug#20970] `it /1/i` raises undefined method 'it' for main (NoMethodError) even if binding.local_variables includes `it`
Date: Fri, 20 Dec 2024 23:15:18 +0000 (UTC)	[thread overview]
Message-ID: <redmine.journal-111127.20241220231517.10330@ruby-lang.org> (raw)
In-Reply-To: <redmine.issue-20970.20241219085942.10330@ruby-lang.org>

Issue #20970 has been updated by k0kubun (Takashi Kokubun).


> changed with #20969 

I think you meant #20965 (https://github.com/ruby/ruby/pull/12398).

> Before the change (on 3.4.0dev (2024-12-15T13:36:38Z master 366fd9642f)) it was an error both with Prism and parse.y
> I feel commit:46fec0f62a1803d44edb8b06e39ac0f358e56670 makes a semantic change maybe too close to the release date. Do we really want this right now?

It's too close to the release date to discuss and change how `it /1/i` in the ticket description's code is parsed. Since Matz said "the current master's behavior is good" before https://github.com/ruby/ruby/pull/12398, for the 3.4.0 release, `it /1/i` should be parsed like before the PR. As @zverok said, both parsers used to raise `NoMethodError`. Prism is good; it didn't change the behavior on the PR. `parse.y` now parses `it` in `it /1/i` as a local variable (`(it / 1) / i`), but `parse.y` should raise a `NoMethodError` (`it( /1/i )`).

The same applies to `[1].each { p it; [5].each { p it } }`. Prism didn't change the behavior, but `parse.y` should be changed back to print `1` and `5`.

@nobu said he's looking into the `[1].each { p it; [5].each { p it } }` issue last night, so I'd like to wait for his `parse.y` fix for now, hoping that the `it /1/i` case is fixed as well. We could revert https://github.com/ruby/ruby/pull/12398 as a last resort, but it'd be nice to not return the weird `nil` in #20955. 

----------------------------------------
Bug #20970: `it /1/i` raises undefined method 'it' for main (NoMethodError) even if binding.local_variables includes `it`
https://bugs.ruby-lang.org/issues/20970#change-111127

* Author: tompng (tomoya ishida)
* Status: Open
* ruby -v: ruby 3.4.0dev (2024-12-19T07:16:12Z master 335bba0fde) +PRISM [x86_64-linux]
* Backport: 3.1: DONTNEED, 3.2: DONTNEED, 3.3: DONTNEED
----------------------------------------
`it` parameter became a local variable with #20965, but it does not behave like local variable with `--parser=prism`

~~~ruby
i=2
42.tap do
  p it # 42
  p local_variables # [:it, :i]
  p it /1/i # should be 21, got NoMethodError
end
~~~


It prints `42`, `[:it, :i], `21` with `--parser=parse.y`




-- 
https://bugs.ruby-lang.org/
 ______________________________________________
 ruby-core mailing list -- ruby-core@ml.ruby-lang.org
 To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
 ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/

  parent reply	other threads:[~2024-12-20 23:15 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-12-19  8:59 [ruby-core:120325] " tompng (tomoya ishida) via ruby-core
2024-12-19 10:57 ` [ruby-core:120327] " zverok (Victor Shepelev) via ruby-core
2024-12-19 17:17 ` [ruby-core:120330] " alanwu (Alan Wu) via ruby-core
2024-12-20  5:28 ` [ruby-core:120340] " tompng (tomoya ishida) via ruby-core
2024-12-20 18:16 ` [ruby-core:120348] " alanwu (Alan Wu) via ruby-core
2024-12-20 23:15 ` k0kubun (Takashi Kokubun) via ruby-core [this message]
2024-12-21 18:47 ` [ruby-core:120356] " kddnewton (Kevin Newton) via ruby-core
2024-12-21 22:01 ` [ruby-core:120358] " k0kubun (Takashi Kokubun) via ruby-core
2024-12-23  4:51 ` [ruby-core:120370] " k0kubun (Takashi Kokubun) via ruby-core
2024-12-24 12:52 ` [ruby-core:120393] " Eregon (Benoit Daloze) via ruby-core
2024-12-24 17:32 ` [ruby-core:120398] " k0kubun (Takashi Kokubun) via ruby-core

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=redmine.journal-111127.20241220231517.10330@ruby-lang.org \
    --to=ruby-core@ml.ruby-lang.org \
    --cc=noreply@ruby-lang.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).