Skip to content

Commit 3c93c2b

Browse files
authored
Make strscan Ractor safe (#17)
* Make strscan Ractor safe * Add test-unit in the development dependencies
1 parent 2c90471 commit 3c93c2b

File tree

4 files changed

+34
-0
lines changed

4 files changed

+34
-0
lines changed

Rakefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ Rake::ExtensionTask.new("strscan")
88

99
desc "Run test"
1010
task :test do
11+
ENV["RUBYOPT"] = "-Ilib"
1112
ruby("run-test.rb")
1213
end
1314

ext/strscan/strscan.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1568,6 +1568,10 @@ strscan_fixed_anchor_p(VALUE self)
15681568
void
15691569
Init_strscan(void)
15701570
{
1571+
#ifdef HAVE_RB_EXT_RACTOR_SAFE
1572+
rb_ext_ractor_safe(true);
1573+
#endif
1574+
15711575
#undef rb_intern
15721576
ID id_scanerr = rb_intern("ScanError");
15731577
VALUE tmp;

strscan.gemspec

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,5 @@ Gem::Specification.new do |s|
1717

1818
s.add_development_dependency "rake-compiler"
1919
s.add_development_dependency "benchmark-driver"
20+
s.add_development_dependency "test-unit"
2021
end

test/strscan/test_ractor.rb

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# frozen_string_literal: true
2+
require 'test/unit'
3+
4+
class TestStringScannerRactor < Test::Unit::TestCase
5+
def setup
6+
skip unless defined? Ractor
7+
end
8+
9+
def test_ractor
10+
assert_in_out_err([], <<-"end;", ["stra", " ", "strb", " ", "strc"], [])
11+
require "strscan"
12+
$VERBOSE = nil
13+
r = Ractor.new do
14+
s = StringScanner.new("stra strb strc", true)
15+
[
16+
s.scan(/\\w+/),
17+
s.scan(/\\s+/),
18+
s.scan(/\\w+/),
19+
s.scan(/\\s+/),
20+
s.scan(/\\w+/),
21+
s.scan(/\\w+/),
22+
s.scan(/\\w+/)
23+
]
24+
end
25+
puts r.take.compact
26+
end;
27+
end
28+
end

0 commit comments

Comments
 (0)