Project

General

Profile

Actions

Bug #20856

closed

Incorrect and inconsistent multi-thread eval execution with Prism compiler

Added by hurricup (Alexandr Evstigneev) 19 days ago. Updated 13 days ago.

Status:
Closed
Assignee:
Target version:
-
ruby -v:
3.4.0-preview2
[ruby-core:119649]

Description

Consider example:

s = Thread.new {
  a = 5
  puts eval("a == b") 
  x = 6 
}
s.join
b = 11

As far as I see it, it should not work. Because at the moment of eval, b is unknown and not even declared (it can even be in condition).
But it may be available because file iseq already compiled and we know that there is b.

So, this works in ruby 3.3 in a script we running, wrapped into the method, or required by other file.

But in 3.4-preview2:

  • it works in file
  • it works in method
  • it fails if required from other file with:
#<Thread:0x00007725530d6a98 /home/hurricup/Projects/ruby-debugger/rdi30/test2.rb:1 run> terminated with exception (report_on_exception is true):
(eval at /home/hurricup/Projects/ruby-debugger/rdi30/test2.rb:3):1:in 'block in <top (required)>': undefined local variable or method 'b' for main (NameError)
	from /home/hurricup/Projects/ruby-debugger/rdi30/test2.rb:3:in 'Kernel#eval'
	from /home/hurricup/Projects/ruby-debugger/rdi30/test2.rb:3:in 'block in <top (required)>'
(eval at /home/hurricup/Projects/ruby-debugger/rdi30/test2.rb:3):1:in 'block in <top (required)>': undefined local variable or method 'b' for main (NameError)
	from /home/hurricup/Projects/ruby-debugger/rdi30/test2.rb:3:in 'Kernel#eval'
	from /home/hurricup/Projects/ruby-debugger/rdi30/test2.rb:3:in 'block in <top (required)>'

And this ^^ is correct behavior if you ask me :) but atm it is inconsistent between the ruby versions and even in the scope of 3.4-preview2

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0