1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

[ruby/date] Make Ractor-compatible

This commit is contained in:
Marc-Andre Lafortune 2020-12-19 22:29:16 -05:00 committed by Marc-André Lafortune
parent ee102de6d7
commit f2f00e24fa
Notes: git 2020-12-22 17:13:19 +09:00
2 changed files with 31 additions and 1 deletions

View file

@ -2977,7 +2977,7 @@ static const rb_data_type_t d_lite_type = {
"Date",
{d_lite_gc_mark, RUBY_TYPED_DEFAULT_FREE, d_lite_memsize,},
0, 0,
RUBY_TYPED_FREE_IMMEDIATELY|RUBY_TYPED_WB_PROTECTED,
RUBY_TYPED_FREE_IMMEDIATELY|RUBY_TYPED_WB_PROTECTED|RUBY_TYPED_FROZEN_SHAREABLE,
};
inline static VALUE
@ -9118,6 +9118,9 @@ d_lite_zero(VALUE x)
void
Init_date_core(void)
{
#ifdef HAVE_RB_EXT_RACTOR_SAFE
RB_EXT_RACTOR_SAFE(true);
#endif
id_cmp = rb_intern_const("<=>");
id_le_p = rb_intern_const("<=");
id_ge_p = rb_intern_const(">=");

View file

@ -0,0 +1,27 @@
# frozen_string_literal: true
require 'test/unit'
require 'date'
class TestDateParse < Test::Unit::TestCase
def code(klass = Date, share: false)
<<~RUBY.gsub('Date', klass.name)
share = #{share}
d = Date.parse('Aug 23:55')
Ractor.make_shareable(d) if share
d2, d3 = Ractor.new(d) { |d| [d, Date.parse(d.to_s)] }.take
if share
assert_same d, d2
else
assert_equal d, d2
end
assert_equal d, d3
RUBY
end
def test_date_ractor
assert_ractor(code , require: 'date')
assert_ractor(code( share: true), require: 'date')
assert_ractor(code(DateTime ), require: 'date')
assert_ractor(code(DateTime, share: true), require: 'date')
end
end