[#84867] [Ruby trunk Bug#14357] thread_safe tests suite segfaults — v.ondruch@...

Issue #14357 has been reported by vo.x (Vit Ondruch).

11 messages 2018/01/15

[#84980] [Ruby trunk Feature#13618][Assigned] [PATCH] auto fiber schedule for rb_wait_for_single_fd and rb_waitpid — hsbt@...

Issue #13618 has been updated by hsbt (Hiroshi SHIBATA).

10 messages 2018/01/23
[#85012] Re: [Ruby trunk Feature#13618][Assigned] [PATCH] auto fiber schedule for rb_wait_for_single_fd and rb_waitpid — Eric Wong <normalperson@...> 2018/01/23

hsbt@ruby-lang.org wrote:

[ruby-core:84893] [Ruby trunk Bug#14364] Regexp last match variable in procs

From: duncan.macgregor@...
Date: 2018-01-16 17:23:10 UTC
List: ruby-core #84893
Issue #14364 has been reported by aardvark179 (Duncan MacGregor).

----------------------------------------
Bug #14364: Regexp last match variable in procs
https://bugs.ruby-lang.org/issues/14364

* Author: aardvark179 (Duncan MacGregor)
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
* ruby -v: 2.5.0p0 (2017-12-25 revision 61468) [x86_64-linux]
* Backport: 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN
----------------------------------------
While working on TruffleRuby's regexp variables implementation I found the following behaviour when comparing our behaviour with MRI 2.3.5 and 2.5.0.

Some core methods such as `String#scan` take an optional block argument, and if this is a literal block then each time it is yielded to the `$~` variable will have been set. However, if the block is a proc that was not defined in the caller's scope then `$~` does not appear to get set or is inaccessible.

The following test script demonstrates the problem.

~~~ ruby
class ScanChecker
  def block
    Proc.new do
      puts "$~ is #{$~}"
    end
  end
end

puts 'Checking with literal block.'

'hello'.scan(/l/) do
  puts "$~ is #{$~}"
end    

puts 'Checking with a Proc from same scope'

my_proc = Proc.new do
  puts "$~ is #{$~}"
end    

'hello'.scan(/l/, &my_proc)

puts 'Checking with a Proc.'

checker = ScanChecker.new
'hello'.scan(/l/, &checker.block)
~~~

I would have expected the `$~` to be set in all cases, but I'm not sure if that is the intended behaviour.




-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>

In This Thread

Prev Next