rbs 4.0.0.dev.4 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/dependabot.yml +14 -14
- data/.github/workflows/bundle-update.yml +60 -0
- data/.github/workflows/c-check.yml +18 -11
- data/.github/workflows/comments.yml +5 -3
- data/.github/workflows/dependabot.yml +2 -2
- data/.github/workflows/ruby.yml +27 -34
- data/.github/workflows/rust.yml +95 -0
- data/.github/workflows/typecheck.yml +2 -2
- data/.github/workflows/windows.yml +2 -2
- data/.rubocop.yml +1 -1
- data/CHANGELOG.md +323 -0
- data/README.md +1 -1
- data/Rakefile +43 -33
- data/Steepfile +1 -0
- data/config.yml +426 -24
- data/core/array.rbs +307 -227
- data/core/basic_object.rbs +9 -8
- data/core/binding.rbs +0 -2
- data/core/builtin.rbs +2 -2
- data/core/class.rbs +6 -5
- data/core/comparable.rbs +55 -34
- data/core/complex.rbs +104 -78
- data/core/dir.rbs +61 -49
- data/core/encoding.rbs +12 -15
- data/core/enumerable.rbs +179 -87
- data/core/enumerator/arithmetic_sequence.rbs +70 -0
- data/core/enumerator.rbs +65 -2
- data/core/errno.rbs +11 -2
- data/core/errors.rbs +58 -29
- data/core/exception.rbs +13 -13
- data/core/fiber.rbs +74 -54
- data/core/file.rbs +280 -177
- data/core/file_test.rbs +3 -3
- data/core/float.rbs +257 -92
- data/core/gc.rbs +425 -281
- data/core/hash.rbs +1045 -739
- data/core/integer.rbs +135 -137
- data/core/io/buffer.rbs +53 -42
- data/core/io/wait.rbs +13 -35
- data/core/io.rbs +192 -144
- data/core/kernel.rbs +216 -155
- data/core/marshal.rbs +4 -4
- data/core/match_data.rbs +15 -13
- data/core/math.rbs +107 -66
- data/core/method.rbs +69 -33
- data/core/module.rbs +244 -106
- data/core/nil_class.rbs +7 -6
- data/core/numeric.rbs +74 -63
- data/core/object.rbs +9 -11
- data/core/object_space.rbs +30 -23
- data/core/pathname.rbs +1322 -0
- data/core/proc.rbs +95 -58
- data/core/process.rbs +222 -202
- data/core/ractor.rbs +371 -515
- data/core/random.rbs +21 -3
- data/core/range.rbs +159 -57
- data/core/rational.rbs +60 -89
- data/core/rbs/unnamed/argf.rbs +60 -53
- data/core/rbs/unnamed/env_class.rbs +19 -14
- data/core/rbs/unnamed/main_class.rbs +123 -0
- data/core/rbs/unnamed/random.rbs +11 -118
- data/core/regexp.rbs +258 -214
- data/core/ruby.rbs +53 -0
- data/core/ruby_vm.rbs +38 -34
- data/core/rubygems/config_file.rbs +5 -5
- data/core/rubygems/errors.rbs +4 -71
- data/core/rubygems/requirement.rbs +5 -5
- data/core/rubygems/rubygems.rbs +16 -82
- data/core/rubygems/version.rbs +2 -3
- data/core/set.rbs +490 -360
- data/core/signal.rbs +26 -16
- data/core/string.rbs +3234 -1285
- data/core/struct.rbs +27 -26
- data/core/symbol.rbs +41 -34
- data/core/thread.rbs +135 -67
- data/core/time.rbs +81 -50
- data/core/trace_point.rbs +41 -35
- data/core/true_class.rbs +2 -2
- data/core/unbound_method.rbs +24 -16
- data/core/warning.rbs +7 -7
- data/docs/aliases.md +79 -0
- data/docs/collection.md +3 -3
- data/docs/config.md +171 -0
- data/docs/encoding.md +56 -0
- data/docs/gem.md +0 -1
- data/docs/inline.md +576 -0
- data/docs/sigs.md +3 -3
- data/docs/syntax.md +46 -16
- data/docs/type_fingerprint.md +21 -0
- data/exe/rbs +1 -1
- data/ext/rbs_extension/ast_translation.c +544 -116
- data/ext/rbs_extension/ast_translation.h +3 -0
- data/ext/rbs_extension/class_constants.c +16 -2
- data/ext/rbs_extension/class_constants.h +8 -0
- data/ext/rbs_extension/extconf.rb +5 -1
- data/ext/rbs_extension/legacy_location.c +33 -56
- data/ext/rbs_extension/legacy_location.h +37 -0
- data/ext/rbs_extension/main.c +44 -35
- data/include/rbs/ast.h +448 -173
- data/include/rbs/defines.h +27 -0
- data/include/rbs/lexer.h +30 -11
- data/include/rbs/location.h +25 -44
- data/include/rbs/parser.h +6 -6
- data/include/rbs/string.h +0 -2
- data/include/rbs/util/rbs_allocator.h +34 -13
- data/include/rbs/util/rbs_assert.h +12 -1
- data/include/rbs/util/rbs_constant_pool.h +0 -3
- data/include/rbs/util/rbs_encoding.h +2 -0
- data/include/rbs/util/rbs_unescape.h +2 -1
- data/include/rbs.h +8 -0
- data/lib/rbs/ast/annotation.rb +1 -1
- data/lib/rbs/ast/comment.rb +1 -1
- data/lib/rbs/ast/declarations.rb +10 -10
- data/lib/rbs/ast/members.rb +14 -14
- data/lib/rbs/ast/ruby/annotations.rb +293 -3
- data/lib/rbs/ast/ruby/comment_block.rb +24 -0
- data/lib/rbs/ast/ruby/declarations.rb +198 -3
- data/lib/rbs/ast/ruby/helpers/constant_helper.rb +4 -0
- data/lib/rbs/ast/ruby/members.rb +532 -22
- data/lib/rbs/ast/type_param.rb +24 -4
- data/lib/rbs/buffer.rb +20 -15
- data/lib/rbs/cli/diff.rb +16 -15
- data/lib/rbs/cli/validate.rb +38 -106
- data/lib/rbs/cli.rb +52 -19
- data/lib/rbs/collection/config/lockfile_generator.rb +14 -2
- data/lib/rbs/collection/sources/git.rb +1 -0
- data/lib/rbs/definition.rb +1 -1
- data/lib/rbs/definition_builder/ancestor_builder.rb +62 -9
- data/lib/rbs/definition_builder/method_builder.rb +20 -0
- data/lib/rbs/definition_builder.rb +147 -25
- data/lib/rbs/diff.rb +7 -1
- data/lib/rbs/environment.rb +227 -74
- data/lib/rbs/environment_loader.rb +0 -6
- data/lib/rbs/errors.rb +27 -18
- data/lib/rbs/inline_parser.rb +342 -6
- data/lib/rbs/location_aux.rb +1 -1
- data/lib/rbs/locator.rb +5 -1
- data/lib/rbs/method_type.rb +5 -3
- data/lib/rbs/parser_aux.rb +20 -7
- data/lib/rbs/prototype/helpers.rb +57 -0
- data/lib/rbs/prototype/rb.rb +3 -28
- data/lib/rbs/prototype/rbi.rb +3 -20
- data/lib/rbs/prototype/runtime.rb +8 -0
- data/lib/rbs/resolver/constant_resolver.rb +2 -2
- data/lib/rbs/resolver/type_name_resolver.rb +116 -38
- data/lib/rbs/subtractor.rb +3 -1
- data/lib/rbs/test/type_check.rb +19 -2
- data/lib/rbs/type_name.rb +1 -1
- data/lib/rbs/types.rb +88 -78
- data/lib/rbs/unit_test/type_assertions.rb +35 -8
- data/lib/rbs/validator.rb +2 -2
- data/lib/rbs/version.rb +1 -1
- data/lib/rbs.rb +1 -2
- data/lib/rdoc/discover.rb +1 -1
- data/lib/rdoc_plugin/parser.rb +1 -1
- data/rbs.gemspec +4 -3
- data/rust/.gitignore +1 -0
- data/rust/Cargo.lock +378 -0
- data/rust/Cargo.toml +7 -0
- data/rust/ruby-rbs/Cargo.toml +22 -0
- data/rust/ruby-rbs/build.rs +764 -0
- data/rust/ruby-rbs/examples/locations.rs +60 -0
- data/rust/ruby-rbs/src/lib.rs +1 -0
- data/rust/ruby-rbs/src/node/mod.rs +742 -0
- data/rust/ruby-rbs/tests/sanity.rs +47 -0
- data/rust/ruby-rbs/vendor/rbs/config.yml +1 -0
- data/rust/ruby-rbs-sys/Cargo.toml +23 -0
- data/rust/ruby-rbs-sys/build.rs +204 -0
- data/rust/ruby-rbs-sys/src/lib.rs +50 -0
- data/rust/ruby-rbs-sys/vendor/rbs/include +1 -0
- data/rust/ruby-rbs-sys/vendor/rbs/src +1 -0
- data/rust/ruby-rbs-sys/wrapper.h +1 -0
- data/schema/typeParam.json +17 -1
- data/sig/ast/ruby/annotations.rbs +315 -4
- data/sig/ast/ruby/comment_block.rbs +8 -0
- data/sig/ast/ruby/declarations.rbs +102 -4
- data/sig/ast/ruby/members.rbs +108 -2
- data/sig/cli/diff.rbs +5 -11
- data/sig/cli/validate.rbs +12 -8
- data/sig/cli.rbs +18 -18
- data/sig/definition.rbs +6 -1
- data/sig/definition_builder.rbs +2 -0
- data/sig/environment.rbs +70 -12
- data/sig/errors.rbs +13 -14
- data/sig/inline_parser.rbs +39 -2
- data/sig/locator.rbs +0 -2
- data/sig/manifest.yaml +0 -1
- data/sig/method_builder.rbs +3 -1
- data/sig/parser.rbs +31 -13
- data/sig/prototype/helpers.rbs +2 -0
- data/sig/resolver/type_name_resolver.rbs +35 -7
- data/sig/source.rbs +3 -3
- data/sig/type_param.rbs +13 -8
- data/sig/types.rbs +6 -7
- data/sig/unit_test/spy.rbs +0 -8
- data/sig/unit_test/type_assertions.rbs +11 -0
- data/src/ast.c +410 -153
- data/src/lexer.c +1392 -1313
- data/src/lexer.re +3 -0
- data/src/lexstate.c +58 -37
- data/src/location.c +8 -48
- data/src/parser.c +977 -516
- data/src/string.c +0 -48
- data/src/util/rbs_allocator.c +89 -71
- data/src/util/rbs_assert.c +1 -1
- data/src/util/rbs_buffer.c +2 -2
- data/src/util/rbs_constant_pool.c +10 -14
- data/src/util/rbs_encoding.c +4 -8
- data/src/util/rbs_unescape.c +56 -20
- data/stdlib/bigdecimal/0/big_decimal.rbs +116 -98
- data/stdlib/bigdecimal-math/0/big_math.rbs +169 -8
- data/stdlib/cgi/0/core.rbs +9 -393
- data/stdlib/cgi/0/manifest.yaml +1 -0
- data/stdlib/cgi-escape/0/escape.rbs +171 -0
- data/stdlib/coverage/0/coverage.rbs +7 -4
- data/stdlib/date/0/date.rbs +92 -79
- data/stdlib/date/0/date_time.rbs +25 -24
- data/stdlib/delegate/0/delegator.rbs +10 -7
- data/stdlib/did_you_mean/0/did_you_mean.rbs +17 -16
- data/stdlib/digest/0/digest.rbs +110 -0
- data/stdlib/erb/0/erb.rbs +748 -347
- data/stdlib/etc/0/etc.rbs +55 -50
- data/stdlib/fileutils/0/fileutils.rbs +158 -139
- data/stdlib/forwardable/0/forwardable.rbs +13 -10
- data/stdlib/io-console/0/io-console.rbs +2 -2
- data/stdlib/json/0/json.rbs +217 -136
- data/stdlib/monitor/0/monitor.rbs +3 -3
- data/stdlib/net-http/0/net-http.rbs +162 -134
- data/stdlib/objspace/0/objspace.rbs +17 -34
- data/stdlib/open-uri/0/open-uri.rbs +48 -8
- data/stdlib/open3/0/open3.rbs +469 -10
- data/stdlib/openssl/0/openssl.rbs +475 -357
- data/stdlib/optparse/0/optparse.rbs +26 -17
- data/stdlib/pathname/0/pathname.rbs +11 -1381
- data/stdlib/pp/0/pp.rbs +9 -8
- data/stdlib/prettyprint/0/prettyprint.rbs +7 -7
- data/stdlib/pstore/0/pstore.rbs +35 -30
- data/stdlib/psych/0/psych.rbs +65 -12
- data/stdlib/psych/0/store.rbs +2 -4
- data/stdlib/pty/0/pty.rbs +9 -6
- data/stdlib/random-formatter/0/random-formatter.rbs +277 -0
- data/stdlib/rdoc/0/code_object.rbs +2 -1
- data/stdlib/rdoc/0/parser.rbs +1 -1
- data/stdlib/rdoc/0/rdoc.rbs +1 -1
- data/stdlib/rdoc/0/store.rbs +1 -1
- data/stdlib/resolv/0/resolv.rbs +25 -68
- data/stdlib/ripper/0/ripper.rbs +22 -19
- data/stdlib/securerandom/0/manifest.yaml +2 -0
- data/stdlib/securerandom/0/securerandom.rbs +7 -20
- data/stdlib/shellwords/0/shellwords.rbs +2 -2
- data/stdlib/singleton/0/singleton.rbs +3 -0
- data/stdlib/socket/0/addrinfo.rbs +7 -7
- data/stdlib/socket/0/basic_socket.rbs +3 -3
- data/stdlib/socket/0/ip_socket.rbs +10 -8
- data/stdlib/socket/0/socket.rbs +23 -10
- data/stdlib/socket/0/tcp_server.rbs +1 -1
- data/stdlib/socket/0/tcp_socket.rbs +11 -3
- data/stdlib/socket/0/udp_socket.rbs +1 -1
- data/stdlib/socket/0/unix_server.rbs +1 -1
- data/stdlib/stringio/0/stringio.rbs +1177 -85
- data/stdlib/strscan/0/string_scanner.rbs +27 -25
- data/stdlib/tempfile/0/tempfile.rbs +25 -21
- data/stdlib/time/0/time.rbs +8 -6
- data/stdlib/timeout/0/timeout.rbs +63 -7
- data/stdlib/tsort/0/cyclic.rbs +3 -0
- data/stdlib/tsort/0/tsort.rbs +7 -6
- data/stdlib/uri/0/common.rbs +42 -20
- data/stdlib/uri/0/file.rbs +3 -3
- data/stdlib/uri/0/generic.rbs +26 -18
- data/stdlib/uri/0/http.rbs +2 -2
- data/stdlib/uri/0/ldap.rbs +2 -2
- data/stdlib/uri/0/mailto.rbs +3 -3
- data/stdlib/uri/0/rfc2396_parser.rbs +12 -12
- data/stdlib/zlib/0/deflate.rbs +4 -3
- data/stdlib/zlib/0/gzip_reader.rbs +6 -6
- data/stdlib/zlib/0/gzip_writer.rbs +14 -12
- data/stdlib/zlib/0/inflate.rbs +1 -1
- data/stdlib/zlib/0/need_dict.rbs +1 -1
- data/stdlib/zlib/0/zstream.rbs +1 -0
- metadata +50 -6
data/core/fiber.rbs
CHANGED
|
@@ -57,16 +57,16 @@
|
|
|
57
57
|
#
|
|
58
58
|
# ## Non-blocking Fibers
|
|
59
59
|
#
|
|
60
|
-
# The concept of
|
|
61
|
-
# fiber, when reaching
|
|
62
|
-
# `sleep`, or wait for another process or I/O) will yield control to
|
|
63
|
-
# fibers and allow the *scheduler* to handle blocking and waking up
|
|
64
|
-
# this fiber when it can proceed.
|
|
60
|
+
# The concept of <em>non-blocking fiber</em> was introduced in Ruby 3.0. A
|
|
61
|
+
# non-blocking fiber, when reaching an operation that would normally block the
|
|
62
|
+
# fiber (like `sleep`, or wait for another process or I/O) will yield control to
|
|
63
|
+
# other fibers and allow the *scheduler* to handle blocking and waking up
|
|
64
|
+
# (resuming) this fiber when it can proceed.
|
|
65
65
|
#
|
|
66
66
|
# For a Fiber to behave as non-blocking, it need to be created in Fiber.new with
|
|
67
|
-
#
|
|
68
|
-
# with Fiber.set_scheduler. If Fiber.scheduler is not set in the
|
|
69
|
-
# blocking and non-blocking fibers' behavior is identical.
|
|
67
|
+
# <code>blocking: false</code> (which is the default), and Fiber.scheduler
|
|
68
|
+
# should be set with Fiber.set_scheduler. If Fiber.scheduler is not set in the
|
|
69
|
+
# current thread, blocking and non-blocking fibers' behavior is identical.
|
|
70
70
|
#
|
|
71
71
|
# Ruby doesn't provide a scheduler class: it is expected to be implemented by
|
|
72
72
|
# the user and correspond to Fiber::Scheduler.
|
|
@@ -82,7 +82,8 @@ class Fiber < Object
|
|
|
82
82
|
# -->
|
|
83
83
|
# Returns the value of the fiber storage variable identified by `key`.
|
|
84
84
|
#
|
|
85
|
-
# The `key` must be a symbol, and the value is set by Fiber#[]= or
|
|
85
|
+
# The `key` must be a symbol, and the value is set by Fiber#[]= or
|
|
86
|
+
# Fiber#storage.
|
|
86
87
|
#
|
|
87
88
|
# See also Fiber::[]=.
|
|
88
89
|
#
|
|
@@ -101,12 +102,23 @@ class Fiber < Object
|
|
|
101
102
|
#
|
|
102
103
|
def self.[]=: [A] (Symbol, A) -> A
|
|
103
104
|
|
|
105
|
+
# <!--
|
|
106
|
+
# rdoc-file=cont.c
|
|
107
|
+
# - Fiber.blocking{|fiber| ...} -> result
|
|
108
|
+
# -->
|
|
109
|
+
# Forces the fiber to be blocking for the duration of the block. Returns the
|
|
110
|
+
# result of the block.
|
|
111
|
+
#
|
|
112
|
+
# See the "Non-blocking fibers" section in class docs for details.
|
|
113
|
+
#
|
|
114
|
+
def self.blocking: [T] () { (Fiber) -> T } -> T
|
|
115
|
+
|
|
104
116
|
# <!--
|
|
105
117
|
# rdoc-file=cont.c
|
|
106
118
|
# - Fiber.blocking? -> false or 1
|
|
107
119
|
# -->
|
|
108
120
|
# Returns `false` if the current fiber is non-blocking. Fiber is non-blocking if
|
|
109
|
-
# it was created via passing
|
|
121
|
+
# it was created via passing <code>blocking: false</code> to Fiber.new, or via
|
|
110
122
|
# Fiber.schedule.
|
|
111
123
|
#
|
|
112
124
|
# If the current Fiber is blocking, the method returns 1. Future developments
|
|
@@ -164,18 +176,18 @@ class Fiber < Object
|
|
|
164
176
|
# ...1 sec pause here...
|
|
165
177
|
# I slept well
|
|
166
178
|
#
|
|
167
|
-
# ...e.g. on the first blocking operation inside the Fiber
|
|
168
|
-
# control is yielded to the outside code (main
|
|
169
|
-
# execution*, the scheduler takes care of
|
|
170
|
-
# fibers.
|
|
179
|
+
# ...e.g. on the first blocking operation inside the Fiber
|
|
180
|
+
# (<code>sleep(1)</code>), the control is yielded to the outside code (main
|
|
181
|
+
# fiber), and *at the end of that execution*, the scheduler takes care of
|
|
182
|
+
# properly resuming all the blocked fibers.
|
|
171
183
|
#
|
|
172
184
|
# Note that the behavior described above is how the method is *expected* to
|
|
173
185
|
# behave, actual behavior is up to the current scheduler's implementation of
|
|
174
186
|
# Fiber::Scheduler#fiber method. Ruby doesn't enforce this method to behave in
|
|
175
187
|
# any particular way.
|
|
176
188
|
#
|
|
177
|
-
# If the scheduler is not set, the method raises
|
|
178
|
-
# available!)
|
|
189
|
+
# If the scheduler is not set, the method raises <code>RuntimeError (No
|
|
190
|
+
# scheduler is available!)</code>.
|
|
179
191
|
#
|
|
180
192
|
def self.schedule: () { () -> void } -> Fiber
|
|
181
193
|
|
|
@@ -196,11 +208,11 @@ class Fiber < Object
|
|
|
196
208
|
# - Fiber.set_scheduler(scheduler) -> scheduler
|
|
197
209
|
# -->
|
|
198
210
|
# Sets the Fiber scheduler for the current thread. If the scheduler is set,
|
|
199
|
-
# non-blocking fibers (created by Fiber.new with
|
|
200
|
-
# Fiber.schedule) call that scheduler's hook methods on potentially
|
|
201
|
-
# operations, and the current thread will call scheduler's `close`
|
|
202
|
-
# finalization (allowing the scheduler to properly manage all
|
|
203
|
-
# fibers).
|
|
211
|
+
# non-blocking fibers (created by Fiber.new with <code>blocking: false</code>,
|
|
212
|
+
# or by Fiber.schedule) call that scheduler's hook methods on potentially
|
|
213
|
+
# blocking operations, and the current thread will call scheduler's `close`
|
|
214
|
+
# method on finalization (allowing the scheduler to properly manage all
|
|
215
|
+
# non-finished fibers).
|
|
204
216
|
#
|
|
205
217
|
# `scheduler` can be an object of any class corresponding to Fiber::Scheduler.
|
|
206
218
|
# Its implementation is up to the user.
|
|
@@ -239,13 +251,13 @@ class Fiber < Object
|
|
|
239
251
|
# f.resume # prints: current: nil
|
|
240
252
|
# # ... and so on ...
|
|
241
253
|
#
|
|
242
|
-
# If
|
|
243
|
-
# Fiber.scheduler defined, the Fiber becomes non-blocking
|
|
244
|
-
# Fibers" section in class docs).
|
|
254
|
+
# If <code>blocking: false</code> is passed to <code>Fiber.new</code>, *and*
|
|
255
|
+
# current thread has a Fiber.scheduler defined, the Fiber becomes non-blocking
|
|
256
|
+
# (see "Non-blocking Fibers" section in class docs).
|
|
245
257
|
#
|
|
246
258
|
# If the `storage` is unspecified, the default is to inherit a copy of the
|
|
247
|
-
# storage from the current fiber. This is the same as specifying
|
|
248
|
-
# true
|
|
259
|
+
# storage from the current fiber. This is the same as specifying <code>storage:
|
|
260
|
+
# true</code>.
|
|
249
261
|
#
|
|
250
262
|
# Fiber[:x] = 1
|
|
251
263
|
# Fiber.new do
|
|
@@ -265,8 +277,8 @@ class Fiber < Object
|
|
|
265
277
|
# Otherwise, the given `storage` is used as the new fiber's storage, and it must
|
|
266
278
|
# be an instance of Hash.
|
|
267
279
|
#
|
|
268
|
-
# Explicitly using
|
|
269
|
-
# the future.
|
|
280
|
+
# Explicitly using <code>storage: true</code> is currently experimental and may
|
|
281
|
+
# change in the future.
|
|
270
282
|
#
|
|
271
283
|
def initialize: (?blocking: boolish, ?storage: true | Hash[interned, untyped] | nil) { (?) -> void } -> void
|
|
272
284
|
|
|
@@ -352,8 +364,8 @@ class Fiber < Object
|
|
|
352
364
|
# - fiber.blocking? -> true or false
|
|
353
365
|
# -->
|
|
354
366
|
# Returns `true` if `fiber` is blocking and `false` otherwise. Fiber is
|
|
355
|
-
# non-blocking if it was created via passing
|
|
356
|
-
# via Fiber.schedule.
|
|
367
|
+
# non-blocking if it was created via passing <code>blocking: false</code> to
|
|
368
|
+
# Fiber.new, or via Fiber.schedule.
|
|
357
369
|
#
|
|
358
370
|
# Note that, even if the method returns `false`, the fiber behaves differently
|
|
359
371
|
# only if Fiber.scheduler is set in the current thread.
|
|
@@ -377,9 +389,9 @@ class Fiber < Object
|
|
|
377
389
|
# the given fiber and no other fiber, returning `nil` to another fiber if that
|
|
378
390
|
# fiber was calling #resume or #transfer.
|
|
379
391
|
#
|
|
380
|
-
#
|
|
381
|
-
# called on the current fiber then it raises that exception at
|
|
382
|
-
# call site.
|
|
392
|
+
# <code>Fiber#kill</code> only interrupts another fiber when it is in
|
|
393
|
+
# Fiber.yield. If called on the current fiber then it raises that exception at
|
|
394
|
+
# the <code>Fiber#kill</code> call site.
|
|
383
395
|
#
|
|
384
396
|
# If the fiber has not been started, transition directly to the terminated
|
|
385
397
|
# state.
|
|
@@ -392,30 +404,38 @@ class Fiber < Object
|
|
|
392
404
|
|
|
393
405
|
# <!--
|
|
394
406
|
# rdoc-file=cont.c
|
|
395
|
-
# -
|
|
396
|
-
# -
|
|
397
|
-
# - fiber.raise(exception [, string [, array]]) -> obj
|
|
407
|
+
# - raise(exception, message = exception.to_s, backtrace = nil, cause: $!)
|
|
408
|
+
# - raise(message = nil, cause: $!)
|
|
398
409
|
# -->
|
|
399
|
-
# Raises an exception in the fiber at the point at which the last
|
|
400
|
-
# was called.
|
|
401
|
-
#
|
|
402
|
-
#
|
|
403
|
-
#
|
|
404
|
-
#
|
|
405
|
-
#
|
|
406
|
-
#
|
|
407
|
-
#
|
|
408
|
-
#
|
|
409
|
-
#
|
|
410
|
-
#
|
|
411
|
-
#
|
|
410
|
+
# Raises an exception in the fiber at the point at which the last
|
|
411
|
+
# <code>Fiber.yield</code> was called.
|
|
412
|
+
#
|
|
413
|
+
# f = Fiber.new {
|
|
414
|
+
# puts "Before the yield"
|
|
415
|
+
# Fiber.yield 1 # -- exception will be raised here
|
|
416
|
+
# puts "After the yield"
|
|
417
|
+
# }
|
|
418
|
+
#
|
|
419
|
+
# p f.resume
|
|
420
|
+
# f.raise "Gotcha"
|
|
421
|
+
#
|
|
422
|
+
# Output
|
|
423
|
+
#
|
|
424
|
+
# Before the first yield
|
|
425
|
+
# 1
|
|
426
|
+
# t.rb:8:in 'Fiber.yield': Gotcha (RuntimeError)
|
|
427
|
+
# from t.rb:8:in 'block in <main>'
|
|
428
|
+
#
|
|
429
|
+
# If the fiber has not been started or has already run to completion, raises
|
|
430
|
+
# `FiberError`. If the fiber is yielding, it is resumed. If it is transferring,
|
|
431
|
+
# it is transferred into. But if it is resuming, raises `FiberError`.
|
|
412
432
|
#
|
|
413
433
|
# Raises `FiberError` if called on a Fiber belonging to another `Thread`.
|
|
414
434
|
#
|
|
415
|
-
# See Kernel#raise for more information.
|
|
435
|
+
# See Kernel#raise for more information on arguments.
|
|
416
436
|
#
|
|
417
|
-
def raise: (?string msg) -> untyped
|
|
418
|
-
| (_Exception, ?string msg, ?Array[string] | Array[Thread::Backtrace::Location] | nil backtrace) -> untyped
|
|
437
|
+
def raise: (?string msg, ?cause: Exception?) -> untyped
|
|
438
|
+
| (_Exception, ?string msg, ?Array[string] | Array[Thread::Backtrace::Location] | nil backtrace, ?cause: Exception?) -> untyped
|
|
419
439
|
|
|
420
440
|
# <!--
|
|
421
441
|
# rdoc-file=cont.c
|
|
@@ -452,8 +472,8 @@ class Fiber < Object
|
|
|
452
472
|
# important fiber-storage state. You should mostly prefer to assign specific
|
|
453
473
|
# keys in the storage using Fiber::[]=.
|
|
454
474
|
#
|
|
455
|
-
# You can also use
|
|
456
|
-
# storage.
|
|
475
|
+
# You can also use <code>Fiber.new(storage: nil)</code> to create a fiber with
|
|
476
|
+
# an empty storage.
|
|
457
477
|
#
|
|
458
478
|
# Example:
|
|
459
479
|
#
|