summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bootstraptest/test_ractor.rb21
-rw-r--r--ractor.rb9
2 files changed, 27 insertions, 3 deletions
diff --git a/bootstraptest/test_ractor.rb b/bootstraptest/test_ractor.rb
index ab20082711..4b6afc2c53 100644
--- a/bootstraptest/test_ractor.rb
+++ b/bootstraptest/test_ractor.rb
@@ -17,6 +17,27 @@ assert_equal "must be called with a block", %q{
end
}
+# Ractor#inspect
+assert_equal "#<Ractor:#1 running>", %q{
+ Ractor.current.inspect
+}
+
+assert_match /^#<Ractor:#([^ ]*?) bootstraptest.tmp.rb:[0-9]+ blocking>$/, %q{
+ r = Ractor.new { Ractor.recv }
+ r.inspect
+}
+
+assert_match /^#<Ractor:#([^ ]*?) bootstraptest.tmp.rb:[0-9]+ terminated>$/, %q{
+ r = Ractor.new { '' }
+ r.take
+ r.inspect
+}
+
+assert_match /^#<Ractor:#([^ ]*?) Test Ractor bootstraptest.tmp.rb:[0-9]+ blocking>$/, %q{
+ r = Ractor.new(name: 'Test Ractor') { Ractor.recv }
+ r.inspect
+}
+
# A return value of a Ractor block will be a message from the Ractor.
assert_equal 'ok', %q{
# join
diff --git a/ractor.rb b/ractor.rb
index 893a3f14c6..4188f39161 100644
--- a/ractor.rb
+++ b/ractor.rb
@@ -12,7 +12,7 @@ class Ractor
# receive them.
#
# The result of the block is sent via the outgoing channel
- # and other
+ # and other
#
# r = Ractor.new do
# Ractor.recv # recv via r's mailbox => 1
@@ -29,7 +29,7 @@ class Ractor
#
# other options:
# name: Ractor's name
- #
+ #
def self.new *args, name: nil, &block
b = block # TODO: builtin bug
raise ArgumentError, "must be called with a block" unless block
@@ -132,7 +132,10 @@ class Ractor
loc = __builtin_cexpr! %q{ RACTOR_PTR(self)->loc }
name = __builtin_cexpr! %q{ RACTOR_PTR(self)->name }
id = __builtin_cexpr! %q{ INT2FIX(RACTOR_PTR(self)->id) }
- "#<Ractor:##{id}#{name ? ' '+name : ''}#{loc ? " " + loc : ''}>"
+ status = __builtin_cexpr! %q{
+ rb_str_new2(ractor_status_str(RACTOR_PTR(self)->status_))
+ }
+ "#<Ractor:##{id}#{name ? ' '+name : ''}#{loc ? " " + loc : ''} #{status}>"
end
def name