rbs 4.0.0.dev.4 → 4.1.0.pre.2
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/.clang-format +1 -0
- data/.github/dependabot.yml +16 -14
- data/.github/workflows/bundle-update.yml +63 -0
- data/.github/workflows/c-check.yml +21 -11
- data/.github/workflows/comments.yml +5 -3
- data/.github/workflows/dependabot.yml +2 -2
- data/.github/workflows/jruby.yml +67 -0
- data/.github/workflows/milestone.yml +83 -0
- data/.github/workflows/ruby.yml +63 -24
- data/.github/workflows/rust.yml +184 -0
- data/.github/workflows/truffleruby.yml +54 -0
- data/.github/workflows/typecheck.yml +5 -2
- data/.github/workflows/wasm.yml +53 -0
- data/.github/workflows/windows.yml +8 -2
- data/.gitignore +11 -0
- data/.rubocop.yml +1 -1
- data/CHANGELOG.md +357 -0
- data/README.md +4 -4
- data/Rakefile +365 -33
- data/Steepfile +8 -0
- data/config.yml +450 -24
- data/core/array.rbs +443 -363
- data/core/basic_object.rbs +9 -8
- data/core/binding.rbs +0 -2
- data/core/builtin.rbs +9 -8
- data/core/class.rbs +11 -8
- 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 +288 -196
- data/core/enumerator/arithmetic_sequence.rbs +70 -0
- data/core/enumerator/product.rbs +5 -5
- data/core/enumerator.rbs +91 -28
- 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 +260 -1151
- data/core/file_constants.rbs +463 -0
- data/core/file_stat.rbs +534 -0
- data/core/file_test.rbs +3 -3
- data/core/float.rbs +257 -92
- data/core/gc.rbs +425 -281
- data/core/hash.rbs +1151 -829
- data/core/integer.rbs +156 -195
- data/core/io/buffer.rbs +53 -42
- data/core/io/wait.rbs +13 -35
- data/core/io.rbs +216 -150
- data/core/kernel.rbs +239 -163
- 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 +302 -150
- data/core/nil_class.rbs +7 -6
- data/core/numeric.rbs +77 -63
- data/core/object.rbs +9 -11
- data/core/object_space/weak_key_map.rbs +7 -7
- 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 +181 -79
- data/core/rational.rbs +60 -89
- data/core/rbs/ops.rbs +154 -0
- data/core/rbs/unnamed/argf.rbs +63 -56
- 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 +78 -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 +493 -363
- data/core/signal.rbs +26 -16
- data/core/string.rbs +3234 -1285
- data/core/struct.rbs +43 -42
- data/core/symbol.rbs +41 -34
- data/core/thread.rbs +141 -73
- 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/CONTRIBUTING.md +2 -1
- 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 +634 -0
- data/docs/rbs_by_example.md +20 -20
- data/docs/rust.md +96 -0
- data/docs/sigs.md +3 -3
- data/docs/syntax.md +48 -18
- data/docs/type_fingerprint.md +21 -0
- data/docs/wasm_serialization.md +80 -0
- data/exe/rbs +1 -1
- data/ext/rbs_extension/ast_translation.c +1441 -671
- data/ext/rbs_extension/ast_translation.h +7 -0
- data/ext/rbs_extension/class_constants.c +18 -2
- data/ext/rbs_extension/class_constants.h +9 -0
- data/ext/rbs_extension/extconf.rb +6 -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 +183 -39
- data/include/rbs/ast.h +597 -297
- data/include/rbs/defines.h +40 -0
- data/include/rbs/lexer.h +31 -11
- data/include/rbs/location.h +25 -44
- data/include/rbs/parser.h +6 -6
- data/include/rbs/serialize.h +39 -0
- 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/annotate/rdoc_annotator.rb +27 -31
- 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 +335 -3
- data/lib/rbs/ast/ruby/comment_block.rb +30 -4
- data/lib/rbs/ast/ruby/declarations.rb +209 -4
- data/lib/rbs/ast/ruby/helpers/constant_helper.rb +4 -0
- data/lib/rbs/ast/ruby/helpers/location_helper.rb +1 -1
- data/lib/rbs/ast/ruby/members.rb +571 -22
- data/lib/rbs/ast/type_param.rb +24 -4
- data/lib/rbs/buffer.rb +66 -24
- data/lib/rbs/cli/diff.rb +16 -15
- data/lib/rbs/cli/validate.rb +38 -106
- data/lib/rbs/cli.rb +55 -24
- data/lib/rbs/collection/config/lockfile_generator.rb +28 -3
- data/lib/rbs/collection/sources/git.rb +7 -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 +32 -6
- data/lib/rbs/definition_builder.rb +147 -25
- data/lib/rbs/diff.rb +7 -1
- data/lib/rbs/environment.rb +235 -75
- data/lib/rbs/environment_loader.rb +0 -6
- data/lib/rbs/errors.rb +27 -18
- data/lib/rbs/inline_parser.rb +377 -15
- 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/namespace.rb +47 -11
- 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 +10 -0
- data/lib/rbs/resolver/constant_resolver.rb +2 -2
- data/lib/rbs/resolver/type_name_resolver.rb +120 -44
- data/lib/rbs/rewriter.rb +70 -0
- data/lib/rbs/subtractor.rb +3 -1
- data/lib/rbs/test/type_check.rb +25 -3
- data/lib/rbs/type_name.rb +34 -14
- data/lib/rbs/types.rb +88 -78
- data/lib/rbs/unit_test/type_assertions.rb +44 -8
- data/lib/rbs/validator.rb +2 -2
- data/lib/rbs/version.rb +1 -1
- data/lib/rbs/wasm/deserializer.rb +213 -0
- data/lib/rbs/wasm/location.rb +61 -0
- data/lib/rbs/wasm/parser.rb +137 -0
- data/lib/rbs/wasm/runtime.rb +217 -0
- data/lib/rbs/wasm/serialization_schema.rb +110 -0
- data/lib/rbs.rb +13 -2
- data/lib/rdoc/discover.rb +1 -1
- data/lib/rdoc_plugin/parser.rb +1 -1
- data/rbs.gemspec +24 -6
- data/schema/typeParam.json +17 -1
- data/sig/annotate/rdoc_annotater.rbs +12 -9
- data/sig/ast/ruby/annotations.rbs +364 -4
- data/sig/ast/ruby/comment_block.rbs +8 -0
- data/sig/ast/ruby/declarations.rbs +102 -4
- data/sig/ast/ruby/members.rbs +128 -2
- data/sig/buffer.rbs +19 -1
- data/sig/cli/diff.rbs +5 -11
- data/sig/cli/validate.rbs +12 -8
- data/sig/cli.rbs +18 -18
- data/sig/collection/config/lockfile_generator.rbs +2 -0
- 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 +41 -2
- data/sig/locator.rbs +0 -2
- data/sig/manifest.yaml +0 -2
- data/sig/method_builder.rbs +3 -1
- data/sig/namespace.rbs +20 -0
- data/sig/parser.rbs +41 -13
- data/sig/prototype/helpers.rbs +2 -0
- data/sig/resolver/type_name_resolver.rbs +36 -10
- data/sig/rewriter.rbs +45 -0
- data/sig/source.rbs +3 -3
- data/sig/type_param.rbs +13 -8
- data/sig/typename.rbs +15 -0
- data/sig/types.rbs +6 -7
- data/sig/unit_test/spy.rbs +0 -8
- data/sig/unit_test/type_assertions.rbs +15 -0
- data/sig/wasm/deserializer.rbs +66 -0
- data/sig/wasm/serialization_schema.rbs +13 -0
- data/src/ast.c +443 -162
- data/src/lexer.c +1415 -1313
- data/src/lexer.re +4 -0
- data/src/lexstate.c +63 -37
- data/src/location.c +7 -47
- data/src/parser.c +1032 -521
- data/src/serialize.c +958 -0
- data/src/string.c +0 -48
- data/src/util/rbs_allocator.c +89 -74
- 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/abbrev/0/array.rbs +1 -1
- 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/csv/0/csv.rbs +5 -5
- 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 +111 -1
- data/stdlib/erb/0/erb.rbs +748 -347
- data/stdlib/etc/0/etc.rbs +73 -54
- data/stdlib/fileutils/0/fileutils.rbs +179 -160
- data/stdlib/forwardable/0/forwardable.rbs +13 -10
- data/stdlib/io-console/0/io-console.rbs +2 -2
- data/stdlib/json/0/json.rbs +223 -142
- 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 +482 -364
- 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 +26 -69
- 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 +3 -3
- 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 +1209 -95
- data/stdlib/strscan/0/string_scanner.rbs +101 -80
- 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 +4 -1
- data/stdlib/tsort/0/interfaces.rbs +8 -8
- data/stdlib/tsort/0/tsort.rbs +16 -15
- 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 +8 -8
- 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
- data/wasm/README.md +59 -0
- data/wasm/rbs_wasm.c +411 -0
- metadata +56 -8
- data/.vscode/extensions.json +0 -5
- data/.vscode/settings.json +0 -19
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# <!-- rdoc-file=enumerator.c -->
|
|
2
|
+
# Enumerator::ArithmeticSequence is a subclass of Enumerator, that is a
|
|
3
|
+
# representation of sequences of numbers with common difference. Instances of
|
|
4
|
+
# this class can be generated by the Range#step and Numeric#step methods.
|
|
5
|
+
#
|
|
6
|
+
# The class can be used for slicing Array (see Array#slice) or custom
|
|
7
|
+
# collections.
|
|
8
|
+
#
|
|
9
|
+
class Enumerator::ArithmeticSequence < Enumerator[Numeric]
|
|
10
|
+
# <!--
|
|
11
|
+
# rdoc-file=enumerator.c
|
|
12
|
+
# - aseq.begin -> num or nil
|
|
13
|
+
# -->
|
|
14
|
+
# Returns the number that defines the first element of this arithmetic sequence.
|
|
15
|
+
#
|
|
16
|
+
def begin: () -> Numeric?
|
|
17
|
+
|
|
18
|
+
# <!--
|
|
19
|
+
# rdoc-file=enumerator.c
|
|
20
|
+
# - aseq.end -> num or nil
|
|
21
|
+
# -->
|
|
22
|
+
# Returns the number that defines the end of this arithmetic sequence.
|
|
23
|
+
#
|
|
24
|
+
def end: () -> Numeric?
|
|
25
|
+
|
|
26
|
+
# <!--
|
|
27
|
+
# rdoc-file=enumerator.c
|
|
28
|
+
# - aseq.each {|i| block } -> aseq
|
|
29
|
+
# - aseq.each -> aseq
|
|
30
|
+
# -->
|
|
31
|
+
#
|
|
32
|
+
def each: () ?{ (Numeric) -> void } -> self
|
|
33
|
+
|
|
34
|
+
# <!--
|
|
35
|
+
# rdoc-file=enumerator.c
|
|
36
|
+
# - aseq.exclude_end? -> true or false
|
|
37
|
+
# -->
|
|
38
|
+
# Returns `true` if this arithmetic sequence excludes its end value.
|
|
39
|
+
#
|
|
40
|
+
def exclude_end?: () -> bool
|
|
41
|
+
|
|
42
|
+
# <!--
|
|
43
|
+
# rdoc-file=enumerator.c
|
|
44
|
+
# - aseq.last -> num or nil
|
|
45
|
+
# - aseq.last(n) -> an_array
|
|
46
|
+
# -->
|
|
47
|
+
# Returns the last number in this arithmetic sequence, or an array of the last
|
|
48
|
+
# `n` elements.
|
|
49
|
+
#
|
|
50
|
+
def last: () -> Numeric?
|
|
51
|
+
| (Integer n) -> Array[Numeric]
|
|
52
|
+
|
|
53
|
+
# <!--
|
|
54
|
+
# rdoc-file=enumerator.c
|
|
55
|
+
# - aseq.size -> num or nil
|
|
56
|
+
# -->
|
|
57
|
+
# Returns the number of elements in this arithmetic sequence if it is a finite
|
|
58
|
+
# sequence. Otherwise, returns `nil`.
|
|
59
|
+
#
|
|
60
|
+
def size: () -> (Integer | Float)
|
|
61
|
+
|
|
62
|
+
# <!--
|
|
63
|
+
# rdoc-file=enumerator.c
|
|
64
|
+
# - aseq.step -> num
|
|
65
|
+
# -->
|
|
66
|
+
# Returns the number that defines the common difference between two adjacent
|
|
67
|
+
# elements in this arithmetic sequence.
|
|
68
|
+
#
|
|
69
|
+
def step: () -> Numeric
|
|
70
|
+
end
|
data/core/enumerator/product.rbs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
%a{annotate:rdoc:skip}
|
|
2
|
-
class Enumerator[unchecked out
|
|
2
|
+
class Enumerator[unchecked out E, out R = void]
|
|
3
3
|
# <!-- rdoc-file=enumerator.c -->
|
|
4
4
|
# Enumerator::Product generates a Cartesian product of any number of enumerable
|
|
5
5
|
# objects. Iterating over the product of enumerable objects is roughly
|
|
@@ -30,7 +30,7 @@ class Enumerator[unchecked out Elem, out Return = void]
|
|
|
30
30
|
#
|
|
31
31
|
# This type of objects can be created by Enumerator.product.
|
|
32
32
|
#
|
|
33
|
-
class Product[unchecked out
|
|
33
|
+
class Product[unchecked out E] < Enumerator[Array[E], Product[E]]
|
|
34
34
|
# <!--
|
|
35
35
|
# rdoc-file=enumerator.c
|
|
36
36
|
# - Enumerator::Product.new(*enums) -> enum
|
|
@@ -42,7 +42,7 @@ class Enumerator[unchecked out Elem, out Return = void]
|
|
|
42
42
|
# e.to_a #=> [[1, 4], [1, 5], [2, 4], [2, 5], [3, 4], [3, 5]]
|
|
43
43
|
# e.size #=> 6
|
|
44
44
|
#
|
|
45
|
-
def initialize: (*_EachEntry[
|
|
45
|
+
def initialize: (*_EachEntry[E]) -> void
|
|
46
46
|
|
|
47
47
|
# <!--
|
|
48
48
|
# rdoc-file=enumerator.c
|
|
@@ -55,7 +55,7 @@ class Enumerator[unchecked out Elem, out Return = void]
|
|
|
55
55
|
#
|
|
56
56
|
# If no block is given, returns an enumerator. Otherwise, returns self.
|
|
57
57
|
#
|
|
58
|
-
def each: () { (Array[
|
|
58
|
+
def each: () { (Array[E]) -> void } -> self
|
|
59
59
|
|
|
60
60
|
# <!--
|
|
61
61
|
# rdoc-file=enumerator.c
|
|
@@ -87,6 +87,6 @@ class Enumerator[unchecked out Elem, out Return = void]
|
|
|
87
87
|
|
|
88
88
|
private
|
|
89
89
|
|
|
90
|
-
def initialize_copy: (Product[
|
|
90
|
+
def initialize_copy: (Product[E]) -> void
|
|
91
91
|
end
|
|
92
92
|
end
|
data/core/enumerator.rbs
CHANGED
|
@@ -125,19 +125,19 @@
|
|
|
125
125
|
# puts ext_each(o.to_enum) {|*x| puts x; [:b, *x] }
|
|
126
126
|
# # => [], [:b], [1], [:b, 1], [1, 2], [:b, 1, 2], 3
|
|
127
127
|
#
|
|
128
|
-
class Enumerator[unchecked out
|
|
129
|
-
include Enumerable[
|
|
128
|
+
class Enumerator[unchecked out E, out R = void] < Object
|
|
129
|
+
include Enumerable[E]
|
|
130
130
|
|
|
131
131
|
# A convenience interface for `each` with optional block
|
|
132
132
|
#
|
|
133
|
-
interface _Each[out
|
|
134
|
-
def each: () { (
|
|
135
|
-
| () -> Enumerator[
|
|
133
|
+
interface _Each[out T, out R]
|
|
134
|
+
def each: () { (T) -> void } -> R
|
|
135
|
+
| () -> Enumerator[T, R]
|
|
136
136
|
end
|
|
137
137
|
|
|
138
138
|
# <!--
|
|
139
139
|
# rdoc-file=enumerator.c
|
|
140
|
-
# - Enumerator.produce(initial = nil) { |prev| block } -> enumerator
|
|
140
|
+
# - Enumerator.produce(initial = nil, size: nil) { |prev| block } -> enumerator
|
|
141
141
|
# -->
|
|
142
142
|
# Creates an infinite enumerator from any block, just called over and over. The
|
|
143
143
|
# result of the previous iteration is passed to the next one. If `initial` is
|
|
@@ -169,6 +169,30 @@ class Enumerator[unchecked out Elem, out Return = void] < Object
|
|
|
169
169
|
# Enumerator.produce { scanner.scan(PATTERN) }.slice_after { scanner.eos? }.first
|
|
170
170
|
# # => ["7", "+", "38", "/", "6"]
|
|
171
171
|
#
|
|
172
|
+
# The optional `size` keyword argument specifies the size of the enumerator,
|
|
173
|
+
# which can be retrieved by Enumerator#size. It can be an integer,
|
|
174
|
+
# <code>Float::INFINITY</code>, a callable object (such as a lambda), or `nil`
|
|
175
|
+
# to indicate unknown size. When not specified, the size defaults to
|
|
176
|
+
# <code>Float::INFINITY</code>.
|
|
177
|
+
#
|
|
178
|
+
# # Infinite enumerator
|
|
179
|
+
# enum = Enumerator.produce(1, size: Float::INFINITY, &:succ)
|
|
180
|
+
# enum.size # => Float::INFINITY
|
|
181
|
+
#
|
|
182
|
+
# # Finite enumerator with known/computable size
|
|
183
|
+
# abs_dir = File.expand_path("./baz") # => "/foo/bar/baz"
|
|
184
|
+
# traverser = Enumerator.produce(abs_dir, size: -> { abs_dir.count("/") + 1 }) {
|
|
185
|
+
# raise StopIteration if it == "/"
|
|
186
|
+
# File.dirname(it)
|
|
187
|
+
# }
|
|
188
|
+
# traverser.size # => 4
|
|
189
|
+
#
|
|
190
|
+
# # Finite enumerator with unknown size
|
|
191
|
+
# calendar = Enumerator.produce(Date.today, size: nil) {
|
|
192
|
+
# it.monday? ? raise(StopIteration) : it + 1
|
|
193
|
+
# }
|
|
194
|
+
# calendar.size # => nil
|
|
195
|
+
#
|
|
172
196
|
def self.produce: [T] () { (T? prev) -> T } -> Enumerator[T, bot]
|
|
173
197
|
| [T] (T initial) { (T prev) -> T } -> Enumerator[T, bot]
|
|
174
198
|
|
|
@@ -187,7 +211,7 @@ class Enumerator[unchecked out Elem, out Return = void] < Object
|
|
|
187
211
|
# When a block is given, calls the block with each N-element array generated and
|
|
188
212
|
# returns `nil`.
|
|
189
213
|
#
|
|
190
|
-
def self.product: [
|
|
214
|
+
def self.product: [E] (*_EachEntry[E]) -> Product[E]
|
|
191
215
|
|
|
192
216
|
# <!--
|
|
193
217
|
# rdoc-file=enumerator.c
|
|
@@ -224,7 +248,7 @@ class Enumerator[unchecked out Elem, out Return = void] < Object
|
|
|
224
248
|
# enum.each(:y, :z).equal?(enum) #=> false
|
|
225
249
|
# enum.each(:y, :z) { |elm| elm } #=> :method_returned
|
|
226
250
|
#
|
|
227
|
-
def each: () { (
|
|
251
|
+
def each: () { (E arg0) -> untyped } -> R
|
|
228
252
|
| () -> self
|
|
229
253
|
|
|
230
254
|
# <!--
|
|
@@ -272,7 +296,7 @@ class Enumerator[unchecked out Elem, out Return = void] < Object
|
|
|
272
296
|
# e.next # (7)
|
|
273
297
|
# # (10)
|
|
274
298
|
#
|
|
275
|
-
def feed: (
|
|
299
|
+
def feed: (E arg0) -> NilClass
|
|
276
300
|
|
|
277
301
|
# <!--
|
|
278
302
|
# rdoc-file=enumerator.c
|
|
@@ -282,7 +306,7 @@ class Enumerator[unchecked out Elem, out Return = void] < Object
|
|
|
282
306
|
#
|
|
283
307
|
# Iteration is defined by the given block, in which a "yielder" object, given as
|
|
284
308
|
# block parameter, can be used to yield a value by calling the `yield` method
|
|
285
|
-
# (aliased as
|
|
309
|
+
# (aliased as <code><<</code>):
|
|
286
310
|
#
|
|
287
311
|
# fib = Enumerator.new do |y|
|
|
288
312
|
# a = b = 1
|
|
@@ -298,7 +322,7 @@ class Enumerator[unchecked out Elem, out Return = void] < Object
|
|
|
298
322
|
# lazy fashion (see Enumerator#size). It can either be a value or a callable
|
|
299
323
|
# object.
|
|
300
324
|
#
|
|
301
|
-
def initialize: (?Integer arg0) { (Enumerator::Yielder arg0) ->
|
|
325
|
+
def initialize: (?Integer arg0) { (Enumerator::Yielder arg0) -> R } -> void
|
|
302
326
|
|
|
303
327
|
# <!--
|
|
304
328
|
# rdoc-file=enumerator.c
|
|
@@ -326,7 +350,7 @@ class Enumerator[unchecked out Elem, out Return = void] < Object
|
|
|
326
350
|
#
|
|
327
351
|
# See class-level notes about external iterators.
|
|
328
352
|
#
|
|
329
|
-
def next: () ->
|
|
353
|
+
def next: () -> E
|
|
330
354
|
|
|
331
355
|
# <!--
|
|
332
356
|
# rdoc-file=enumerator.c
|
|
@@ -370,7 +394,7 @@ class Enumerator[unchecked out Elem, out Return = void] < Object
|
|
|
370
394
|
# # yield nil [nil] nil
|
|
371
395
|
# # yield [1, 2] [[1, 2]] [1, 2]
|
|
372
396
|
#
|
|
373
|
-
def next_values: () -> ::Array[
|
|
397
|
+
def next_values: () -> ::Array[E]
|
|
374
398
|
|
|
375
399
|
# <!--
|
|
376
400
|
# rdoc-file=enumerator.c
|
|
@@ -394,7 +418,7 @@ class Enumerator[unchecked out Elem, out Return = void] < Object
|
|
|
394
418
|
# p e.next #=> 3
|
|
395
419
|
# p e.peek #raises StopIteration
|
|
396
420
|
#
|
|
397
|
-
def peek: () ->
|
|
421
|
+
def peek: () -> E
|
|
398
422
|
|
|
399
423
|
# <!--
|
|
400
424
|
# rdoc-file=enumerator.c
|
|
@@ -424,7 +448,7 @@ class Enumerator[unchecked out Elem, out Return = void] < Object
|
|
|
424
448
|
# e.next
|
|
425
449
|
# p e.peek_values # raises StopIteration
|
|
426
450
|
#
|
|
427
|
-
def peek_values: () -> ::Array[
|
|
451
|
+
def peek_values: () -> ::Array[E]
|
|
428
452
|
|
|
429
453
|
# <!--
|
|
430
454
|
# rdoc-file=enumerator.c
|
|
@@ -446,8 +470,39 @@ class Enumerator[unchecked out Elem, out Return = void] < Object
|
|
|
446
470
|
# loop.size # => Float::INFINITY
|
|
447
471
|
# (1..100).drop_while.size # => nil
|
|
448
472
|
#
|
|
473
|
+
# Note that enumerator size might be inaccurate, and should be rather treated as
|
|
474
|
+
# a hint. For example, there is no check that the size provided to ::new is
|
|
475
|
+
# accurate:
|
|
476
|
+
#
|
|
477
|
+
# e = Enumerator.new(5) { |y| 2.times { y << it} }
|
|
478
|
+
# e.size # => 5
|
|
479
|
+
# e.to_a.size # => 2
|
|
480
|
+
#
|
|
481
|
+
# Another example is an enumerator created by ::produce without a `size`
|
|
482
|
+
# argument. Such enumerators return `Infinity` for size, but this is inaccurate
|
|
483
|
+
# if the passed block raises StopIteration:
|
|
484
|
+
#
|
|
485
|
+
# e = Enumerator.produce(1) { it + 1 }
|
|
486
|
+
# e.size # => Infinity
|
|
487
|
+
#
|
|
488
|
+
# e = Enumerator.produce(1) { it > 3 ? raise(StopIteration) : it + 1 }
|
|
489
|
+
# e.size # => Infinity
|
|
490
|
+
# e.to_a.size # => 4
|
|
491
|
+
#
|
|
449
492
|
def size: () -> (Integer | Float)?
|
|
450
493
|
|
|
494
|
+
# <!--
|
|
495
|
+
# rdoc-file=enumerator.c
|
|
496
|
+
# - e + enum -> enumerator
|
|
497
|
+
# -->
|
|
498
|
+
# Returns an enumerator object generated from this enumerator and a given
|
|
499
|
+
# enumerable.
|
|
500
|
+
#
|
|
501
|
+
# e = (1..3).each + [4, 5]
|
|
502
|
+
# e.to_a #=> [1, 2, 3, 4, 5]
|
|
503
|
+
#
|
|
504
|
+
def +: [Elem2] (::_Each[Elem2]) -> ::Enumerator::Chain[E | Elem2]
|
|
505
|
+
|
|
451
506
|
# <!--
|
|
452
507
|
# rdoc-file=enumerator.c
|
|
453
508
|
# - e.with_index(offset = 0) {|(*args), idx| ... }
|
|
@@ -460,8 +515,8 @@ class Enumerator[unchecked out Elem, out Return = void] < Object
|
|
|
460
515
|
# `offset`
|
|
461
516
|
# : the starting index to use
|
|
462
517
|
#
|
|
463
|
-
def with_index: (?Integer offset) { (
|
|
464
|
-
| (?Integer offset) -> ::Enumerator[[
|
|
518
|
+
def with_index: (?Integer offset) { (E arg0, Integer arg1) -> untyped } -> R
|
|
519
|
+
| (?Integer offset) -> ::Enumerator[[ E, Integer ], R]
|
|
465
520
|
|
|
466
521
|
# <!-- rdoc-file=enumerator.c -->
|
|
467
522
|
# Iterates the given block for each element with an arbitrary object, `obj`, and
|
|
@@ -486,17 +541,17 @@ class Enumerator[unchecked out Elem, out Return = void] < Object
|
|
|
486
541
|
# # => foo: 1
|
|
487
542
|
# # => foo: 2
|
|
488
543
|
#
|
|
489
|
-
def with_object: [U] (U obj) { (
|
|
490
|
-
| [U] (U obj) -> ::Enumerator[[
|
|
544
|
+
def with_object: [U] (U obj) { (E, U obj) -> untyped } -> U
|
|
545
|
+
| [U] (U obj) -> ::Enumerator[[ E, U ], U]
|
|
491
546
|
end
|
|
492
547
|
|
|
493
548
|
# <!-- rdoc-file=enumerator.c -->
|
|
494
549
|
# Generator
|
|
495
550
|
#
|
|
496
|
-
class Enumerator::Generator[out
|
|
497
|
-
include Enumerable[
|
|
551
|
+
class Enumerator::Generator[out E] < Object
|
|
552
|
+
include Enumerable[E]
|
|
498
553
|
|
|
499
|
-
def each: () { (
|
|
554
|
+
def each: () { (E) -> void } -> void
|
|
500
555
|
end
|
|
501
556
|
|
|
502
557
|
# <!-- rdoc-file=enumerator.c -->
|
|
@@ -565,7 +620,7 @@ end
|
|
|
565
620
|
# # This returns an array of items like a normal enumerator does.
|
|
566
621
|
# all_checked = active_items.select(&:checked)
|
|
567
622
|
#
|
|
568
|
-
class Enumerator::Lazy[out
|
|
623
|
+
class Enumerator::Lazy[out E, out R = void] < Enumerator[E, R]
|
|
569
624
|
# <!-- rdoc-file=enumerator.c -->
|
|
570
625
|
# Expands `lazy` enumerator to an array. See Enumerable#to_a.
|
|
571
626
|
#
|
|
@@ -577,7 +632,15 @@ class Enumerator::Lazy[out Elem, out Return = void] < Enumerator[Elem, Return]
|
|
|
577
632
|
# -->
|
|
578
633
|
# Like Enumerable#compact, but chains operation to be lazy-evaluated.
|
|
579
634
|
#
|
|
580
|
-
def compact: () -> Enumerator::Lazy[
|
|
635
|
+
def compact: () -> Enumerator::Lazy[E, R]
|
|
636
|
+
|
|
637
|
+
# <!--
|
|
638
|
+
# rdoc-file=enumerator.c
|
|
639
|
+
# - lzy.eager -> enum
|
|
640
|
+
# -->
|
|
641
|
+
# Returns a non-lazy Enumerator converted from the lazy enumerator.
|
|
642
|
+
#
|
|
643
|
+
def eager: () -> ::Enumerator[E, R]
|
|
581
644
|
end
|
|
582
645
|
|
|
583
646
|
# <!-- rdoc-file=enumerator.c -->
|
|
@@ -612,7 +675,7 @@ end
|
|
|
612
675
|
#
|
|
613
676
|
# This type of objects can be created by Enumerable#chain and Enumerator#+.
|
|
614
677
|
#
|
|
615
|
-
class Enumerator::Chain[out
|
|
678
|
+
class Enumerator::Chain[out E] < Enumerator[E, void]
|
|
616
679
|
# <!--
|
|
617
680
|
# rdoc-file=enumerator.c
|
|
618
681
|
# - Enumerator::Chain.new(*enums) -> enum
|
|
@@ -624,7 +687,7 @@ class Enumerator::Chain[out Elem] < Enumerator[Elem, void]
|
|
|
624
687
|
# e.to_a #=> [1, 2, 3, 4, 5]
|
|
625
688
|
# e.size #=> 5
|
|
626
689
|
#
|
|
627
|
-
def initialize: (*_Each[
|
|
690
|
+
def initialize: (*_Each[E] enums) -> void
|
|
628
691
|
|
|
629
692
|
# <!--
|
|
630
693
|
# rdoc-file=enumerator.c
|
|
@@ -637,6 +700,6 @@ class Enumerator::Chain[out Elem] < Enumerator[Elem, void]
|
|
|
637
700
|
#
|
|
638
701
|
# If no block is given, returns an enumerator.
|
|
639
702
|
#
|
|
640
|
-
def each: () { (
|
|
641
|
-
| () -> Enumerator[
|
|
703
|
+
def each: () { (E) -> void } -> self
|
|
704
|
+
| () -> Enumerator[E, self]
|
|
642
705
|
end
|
data/core/errno.rbs
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
#
|
|
10
10
|
# When the Ruby interpreter interacts with the operating system and receives
|
|
11
11
|
# such an error code (e.g., `2`), it maps the code to a particular Ruby
|
|
12
|
-
# exception class (e.g.,
|
|
12
|
+
# exception class (e.g., <code>Errno::ENOENT</code>):
|
|
13
13
|
#
|
|
14
14
|
# File.open('nosuch.txt')
|
|
15
15
|
# # => No such file or directory @ rb_sysopen - nosuch.txt (Errno::ENOENT)
|
|
@@ -25,7 +25,8 @@
|
|
|
25
25
|
# Errno::ENOENT.superclass # => SystemCallError
|
|
26
26
|
# Errno::ENOENT::Errno # => 2
|
|
27
27
|
#
|
|
28
|
-
# The names of nested classes are returned by method
|
|
28
|
+
# The names of nested classes are returned by method
|
|
29
|
+
# <code>Errno.constants</code>:
|
|
29
30
|
#
|
|
30
31
|
# Errno.constants.size # => 158
|
|
31
32
|
# Errno.constants.sort.take(5) # => [:E2BIG, :EACCES, :EADDRINUSE, :EADDRNOTAVAIL, :EADV]
|
|
@@ -38,6 +39,14 @@
|
|
|
38
39
|
# Errno::ENOENT::Errno # => 2
|
|
39
40
|
# Errno::ENOTCAPABLE::Errno # => 0
|
|
40
41
|
#
|
|
42
|
+
# Each class in Errno can be created with optional messages:
|
|
43
|
+
#
|
|
44
|
+
# Errno::EPIPE.new # => #<Errno::EPIPE: Broken pipe>
|
|
45
|
+
# Errno::EPIPE.new("foo") # => #<Errno::EPIPE: Broken pipe - foo>
|
|
46
|
+
# Errno::EPIPE.new("foo", "here") # => #<Errno::EPIPE: Broken pipe @ here - foo>
|
|
47
|
+
#
|
|
48
|
+
# See SystemCallError.new.
|
|
49
|
+
#
|
|
41
50
|
module Errno
|
|
42
51
|
class NOERROR < SystemCallError
|
|
43
52
|
Errno: 0
|
data/core/errors.rbs
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
#
|
|
7
7
|
# [1, 2, 3].first(4, 5)
|
|
8
8
|
#
|
|
9
|
-
#
|
|
9
|
+
# <em>raises the exception:</em>
|
|
10
10
|
#
|
|
11
11
|
# ArgumentError: wrong number of arguments (given 2, expected 1)
|
|
12
12
|
#
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
#
|
|
15
15
|
# [1, 2, 3].first(-4)
|
|
16
16
|
#
|
|
17
|
-
#
|
|
17
|
+
# <em>raises the exception:</em>
|
|
18
18
|
#
|
|
19
19
|
# ArgumentError: negative array size
|
|
20
20
|
#
|
|
@@ -66,7 +66,7 @@ end
|
|
|
66
66
|
#
|
|
67
67
|
# [1, 2, 3].freeze << 4
|
|
68
68
|
#
|
|
69
|
-
#
|
|
69
|
+
# <em>raises the exception:</em>
|
|
70
70
|
#
|
|
71
71
|
# FrozenError: can't modify frozen Array
|
|
72
72
|
#
|
|
@@ -115,11 +115,11 @@ end
|
|
|
115
115
|
# puts "Note: You will typically use Signal.trap instead."
|
|
116
116
|
# end
|
|
117
117
|
#
|
|
118
|
-
#
|
|
118
|
+
# <em>produces:</em>
|
|
119
119
|
#
|
|
120
120
|
# Press ctrl-C when you get bored
|
|
121
121
|
#
|
|
122
|
-
#
|
|
122
|
+
# <em>then waits until it is interrupted with Control-C and then prints:</em>
|
|
123
123
|
#
|
|
124
124
|
# Note: You will typically use Signal.trap instead.
|
|
125
125
|
#
|
|
@@ -184,7 +184,7 @@ end
|
|
|
184
184
|
#
|
|
185
185
|
# require 'this/file/does/not/exist'
|
|
186
186
|
#
|
|
187
|
-
#
|
|
187
|
+
# <em>raises the exception:</em>
|
|
188
188
|
#
|
|
189
189
|
# LoadError: no such file to load -- this/file/does/not/exist
|
|
190
190
|
#
|
|
@@ -209,7 +209,7 @@ end
|
|
|
209
209
|
# end
|
|
210
210
|
# call_block
|
|
211
211
|
#
|
|
212
|
-
#
|
|
212
|
+
# <em>raises the exception:</em>
|
|
213
213
|
#
|
|
214
214
|
# LocalJumpError: no block given (yield)
|
|
215
215
|
#
|
|
@@ -220,7 +220,7 @@ end
|
|
|
220
220
|
# end
|
|
221
221
|
# get_me_a_return.call
|
|
222
222
|
#
|
|
223
|
-
#
|
|
223
|
+
# <em>raises the exception:</em>
|
|
224
224
|
#
|
|
225
225
|
# LocalJumpError: unexpected return
|
|
226
226
|
#
|
|
@@ -248,7 +248,7 @@ end
|
|
|
248
248
|
#
|
|
249
249
|
# puts foo
|
|
250
250
|
#
|
|
251
|
-
#
|
|
251
|
+
# <em>raises the exception:</em>
|
|
252
252
|
#
|
|
253
253
|
# NameError: undefined local variable or method `foo' for main:Object
|
|
254
254
|
#
|
|
@@ -256,7 +256,7 @@ end
|
|
|
256
256
|
#
|
|
257
257
|
# Integer.const_set :answer, 42
|
|
258
258
|
#
|
|
259
|
-
#
|
|
259
|
+
# <em>raises the exception:</em>
|
|
260
260
|
#
|
|
261
261
|
# NameError: wrong constant name answer
|
|
262
262
|
#
|
|
@@ -302,9 +302,15 @@ class NameError[T] < StandardError
|
|
|
302
302
|
def receiver: () -> T?
|
|
303
303
|
end
|
|
304
304
|
|
|
305
|
+
# <!-- rdoc-file=error.c -->
|
|
306
|
+
# Raised when matching pattern not found.
|
|
307
|
+
#
|
|
305
308
|
class NoMatchingPatternError < StandardError
|
|
306
309
|
end
|
|
307
310
|
|
|
311
|
+
# <!-- rdoc-file=error.c -->
|
|
312
|
+
# Raised when matching key not found.
|
|
313
|
+
#
|
|
308
314
|
class NoMatchingPatternKeyError[M, K] < NoMatchingPatternError
|
|
309
315
|
# <!--
|
|
310
316
|
# rdoc-file=error.c
|
|
@@ -344,7 +350,7 @@ end
|
|
|
344
350
|
#
|
|
345
351
|
# "hello".to_ary
|
|
346
352
|
#
|
|
347
|
-
#
|
|
353
|
+
# <em>raises the exception:</em>
|
|
348
354
|
#
|
|
349
355
|
# NoMethodError: undefined method `to_ary' for an instance of String
|
|
350
356
|
#
|
|
@@ -354,11 +360,13 @@ class NoMethodError[T] < NameError[T]
|
|
|
354
360
|
# - NoMethodError.new(msg=nil, name=nil, args=nil, private=false, receiver: nil) -> no_method_error
|
|
355
361
|
# -->
|
|
356
362
|
# Construct a NoMethodError exception for a method of the given name called with
|
|
357
|
-
# the given arguments. The name may be accessed using the
|
|
358
|
-
# resulting object, and the arguments using the
|
|
363
|
+
# the given arguments. The name may be accessed using the <code>#name</code>
|
|
364
|
+
# method on the resulting object, and the arguments using the <code>#args</code>
|
|
365
|
+
# method.
|
|
359
366
|
#
|
|
360
367
|
# If *private* argument were passed, it designates method was attempted to call
|
|
361
|
-
# in private context, and can be accessed with
|
|
368
|
+
# in private context, and can be accessed with <code>#private_call?</code>
|
|
369
|
+
# method.
|
|
362
370
|
#
|
|
363
371
|
# *receiver* argument stores an object whose method was called.
|
|
364
372
|
#
|
|
@@ -387,8 +395,8 @@ end
|
|
|
387
395
|
# exception if the underlying operating system or Ruby runtime does not support
|
|
388
396
|
# them.
|
|
389
397
|
#
|
|
390
|
-
# Note that if `fork` raises a `NotImplementedError`, then
|
|
391
|
-
# returns `false`.
|
|
398
|
+
# Note that if `fork` raises a `NotImplementedError`, then
|
|
399
|
+
# <code>respond_to?(:fork)</code> returns `false`.
|
|
392
400
|
#
|
|
393
401
|
class NotImplementedError < ScriptError
|
|
394
402
|
end
|
|
@@ -398,7 +406,7 @@ end
|
|
|
398
406
|
#
|
|
399
407
|
# [1, 2, 3].drop(1 << 100)
|
|
400
408
|
#
|
|
401
|
-
#
|
|
409
|
+
# <em>raises the exception:</em>
|
|
402
410
|
#
|
|
403
411
|
# RangeError: bignum too big to convert into `long'
|
|
404
412
|
#
|
|
@@ -410,7 +418,7 @@ end
|
|
|
410
418
|
#
|
|
411
419
|
# Regexp.new("?")
|
|
412
420
|
#
|
|
413
|
-
#
|
|
421
|
+
# <em>raises the exception:</em>
|
|
414
422
|
#
|
|
415
423
|
# RegexpError: target of repeat operator is not specified: /?/
|
|
416
424
|
#
|
|
@@ -423,7 +431,7 @@ end
|
|
|
423
431
|
#
|
|
424
432
|
# raise "ouch"
|
|
425
433
|
#
|
|
426
|
-
#
|
|
434
|
+
# <em>raises the exception:</em>
|
|
427
435
|
#
|
|
428
436
|
# RuntimeError: ouch
|
|
429
437
|
#
|
|
@@ -455,7 +463,7 @@ end
|
|
|
455
463
|
# puts "received Exception #{e}"
|
|
456
464
|
# end
|
|
457
465
|
#
|
|
458
|
-
#
|
|
466
|
+
# <em>produces:</em>
|
|
459
467
|
#
|
|
460
468
|
# received Exception SIGHUP
|
|
461
469
|
#
|
|
@@ -496,7 +504,7 @@ end
|
|
|
496
504
|
#
|
|
497
505
|
# require 'does/not/exist' rescue "Hi"
|
|
498
506
|
#
|
|
499
|
-
#
|
|
507
|
+
# <em>raises the exception:</em>
|
|
500
508
|
#
|
|
501
509
|
# LoadError: no such file to load -- does/not/exist
|
|
502
510
|
#
|
|
@@ -514,7 +522,7 @@ end
|
|
|
514
522
|
# end
|
|
515
523
|
# puts "Done!"
|
|
516
524
|
#
|
|
517
|
-
#
|
|
525
|
+
# <em>produces:</em>
|
|
518
526
|
#
|
|
519
527
|
# Hello
|
|
520
528
|
# Done!
|
|
@@ -554,7 +562,7 @@ end
|
|
|
554
562
|
#
|
|
555
563
|
# eval("1+1=2")
|
|
556
564
|
#
|
|
557
|
-
#
|
|
565
|
+
# <em>raises the exception:</em>
|
|
558
566
|
#
|
|
559
567
|
# SyntaxError: (eval):1: syntax error, unexpected '=', expecting $end
|
|
560
568
|
#
|
|
@@ -581,20 +589,41 @@ end
|
|
|
581
589
|
#
|
|
582
590
|
# File.open("does/not/exist")
|
|
583
591
|
#
|
|
584
|
-
#
|
|
592
|
+
# <em>raises the exception:</em>
|
|
585
593
|
#
|
|
586
594
|
# Errno::ENOENT: No such file or directory - does/not/exist
|
|
587
595
|
#
|
|
588
596
|
class SystemCallError < StandardError
|
|
589
597
|
# <!--
|
|
590
598
|
# rdoc-file=error.c
|
|
591
|
-
# - SystemCallError.new(msg, errno) -> system_call_error_subclass
|
|
599
|
+
# - SystemCallError.new(msg, errno = nil, func = nil) -> system_call_error_subclass
|
|
592
600
|
# -->
|
|
593
601
|
# If *errno* corresponds to a known system error code, constructs the
|
|
594
602
|
# appropriate Errno class for that error, otherwise constructs a generic
|
|
595
603
|
# SystemCallError object. The error number is subsequently available via the
|
|
596
604
|
# #errno method.
|
|
597
605
|
#
|
|
606
|
+
# If only numeric object is given, it is treated as an Integer *errno*, and
|
|
607
|
+
# *msg* is omitted, otherwise the first argument *msg* is used as the additional
|
|
608
|
+
# error message.
|
|
609
|
+
#
|
|
610
|
+
# SystemCallError.new(Errno::EPIPE::Errno)
|
|
611
|
+
# #=> #<Errno::EPIPE: Broken pipe>
|
|
612
|
+
#
|
|
613
|
+
# SystemCallError.new("foo")
|
|
614
|
+
# #=> #<SystemCallError: unknown error - foo>
|
|
615
|
+
#
|
|
616
|
+
# SystemCallError.new("foo", Errno::EPIPE::Errno)
|
|
617
|
+
# #=> #<Errno::EPIPE: Broken pipe - foo>
|
|
618
|
+
#
|
|
619
|
+
# If *func* is not `nil`, it is appended to the message with "<code> @ </code>".
|
|
620
|
+
#
|
|
621
|
+
# SystemCallError.new("foo", Errno::EPIPE::Errno, "here")
|
|
622
|
+
# #=> #<Errno::EPIPE: Broken pipe @ here - foo>
|
|
623
|
+
#
|
|
624
|
+
# A subclass of SystemCallError can also be instantiated via the `new` method of
|
|
625
|
+
# the subclass. See Errno.
|
|
626
|
+
#
|
|
598
627
|
def initialize: (string msg, Integer errno) -> void
|
|
599
628
|
|
|
600
629
|
# <!--
|
|
@@ -658,7 +687,7 @@ end
|
|
|
658
687
|
# end
|
|
659
688
|
# me_myself_and_i
|
|
660
689
|
#
|
|
661
|
-
#
|
|
690
|
+
# <em>raises the exception:</em>
|
|
662
691
|
#
|
|
663
692
|
# SystemStackError: stack level too deep
|
|
664
693
|
#
|
|
@@ -685,7 +714,7 @@ end
|
|
|
685
714
|
#
|
|
686
715
|
# [1, 2, 3].first("two")
|
|
687
716
|
#
|
|
688
|
-
#
|
|
717
|
+
# <em>raises the exception:</em>
|
|
689
718
|
#
|
|
690
719
|
# TypeError: no implicit conversion of String into Integer
|
|
691
720
|
#
|
|
@@ -698,7 +727,7 @@ end
|
|
|
698
727
|
#
|
|
699
728
|
# throw "foo", "bar"
|
|
700
729
|
#
|
|
701
|
-
#
|
|
730
|
+
# <em>raises the exception:</em>
|
|
702
731
|
#
|
|
703
732
|
# UncaughtThrowError: uncaught throw "foo"
|
|
704
733
|
#
|
|
@@ -714,7 +743,7 @@ class UncaughtThrowError < ArgumentError
|
|
|
714
743
|
#
|
|
715
744
|
# throw "foo", "bar"
|
|
716
745
|
#
|
|
717
|
-
#
|
|
746
|
+
# <em>raises the exception:</em>
|
|
718
747
|
#
|
|
719
748
|
# UncaughtThrowError: uncaught throw "foo"
|
|
720
749
|
#
|