rbs 3.7.0 → 3.8.0.pre.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (168) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/comments.yml +3 -3
  3. data/.github/workflows/ruby.yml +7 -7
  4. data/CHANGELOG.md +52 -0
  5. data/core/array.rbs +1743 -1580
  6. data/core/basic_object.rbs +38 -35
  7. data/core/comparable.rbs +1 -1
  8. data/core/complex.rbs +165 -93
  9. data/core/data.rbs +1 -1
  10. data/core/dir.rbs +1 -17
  11. data/core/encoding.rbs +12 -6
  12. data/core/enumerable.rbs +270 -266
  13. data/core/enumerator.rbs +0 -2
  14. data/core/env.rbs +1 -1
  15. data/core/errno.rbs +33 -16
  16. data/core/errors.rbs +2 -2
  17. data/core/exception.rbs +236 -170
  18. data/core/fiber.rbs +3 -2
  19. data/core/file.rbs +32 -74
  20. data/core/float.rbs +125 -72
  21. data/core/gc.rbs +138 -40
  22. data/core/hash.rbs +120 -141
  23. data/core/integer.rbs +79 -50
  24. data/core/io/buffer.rbs +49 -43
  25. data/core/io.rbs +97 -144
  26. data/core/kernel.rbs +290 -200
  27. data/core/match_data.rbs +76 -2
  28. data/core/math.rbs +0 -36
  29. data/core/module.rbs +28 -23
  30. data/core/nil_class.rbs +0 -3
  31. data/core/numeric.rbs +100 -103
  32. data/core/object.rbs +0 -4
  33. data/core/object_space/weak_key_map.rbs +3 -4
  34. data/core/object_space.rbs +3 -3
  35. data/core/proc.rbs +0 -2
  36. data/core/process.rbs +109 -57
  37. data/core/ractor.rbs +37 -4
  38. data/core/range.rbs +114 -87
  39. data/core/rational.rbs +0 -2
  40. data/core/rbs/unnamed/argf.rbs +234 -33
  41. data/core/rbs/unnamed/env_class.rbs +35 -53
  42. data/core/rbs/unnamed/random.rbs +1 -2
  43. data/core/regexp.rbs +4 -52
  44. data/core/ruby_vm.rbs +88 -9
  45. data/core/rubygems/config_file.rbs +3 -0
  46. data/core/rubygems/errors.rbs +0 -5
  47. data/core/rubygems/platform.rbs +0 -9
  48. data/core/rubygems/rubygems.rbs +0 -5
  49. data/core/rubygems/version.rbs +6 -6
  50. data/core/set.rbs +3 -15
  51. data/core/string.rbs +130 -136
  52. data/core/struct.rbs +6 -18
  53. data/core/symbol.rbs +14 -21
  54. data/core/thread.rbs +32 -35
  55. data/core/time.rbs +127 -50
  56. data/core/trace_point.rbs +16 -0
  57. data/core/true_class.rbs +0 -1
  58. data/core/warning.rbs +9 -2
  59. data/docs/architecture.md +1 -1
  60. data/docs/syntax.md +1 -1
  61. data/ext/rbs_extension/location.c +29 -19
  62. data/ext/rbs_extension/parser.c +267 -292
  63. data/ext/rbs_extension/parserstate.c +56 -22
  64. data/lib/rbs/annotate/annotations.rb +3 -3
  65. data/lib/rbs/annotate/rdoc_source.rb +2 -2
  66. data/lib/rbs/cli/diff.rb +3 -3
  67. data/lib/rbs/cli/validate.rb +1 -1
  68. data/lib/rbs/cli.rb +13 -13
  69. data/lib/rbs/collection/config.rb +3 -1
  70. data/lib/rbs/definition_builder/ancestor_builder.rb +3 -3
  71. data/lib/rbs/environment_loader.rb +1 -1
  72. data/lib/rbs/namespace.rb +1 -0
  73. data/lib/rbs/parser_aux.rb +2 -2
  74. data/lib/rbs/prototype/rb.rb +11 -8
  75. data/lib/rbs/prototype/rbi.rb +9 -5
  76. data/lib/rbs/prototype/runtime/value_object_generator.rb +7 -5
  77. data/lib/rbs/prototype/runtime.rb +4 -5
  78. data/lib/rbs/type_name.rb +14 -9
  79. data/lib/rbs/unit_test/type_assertions.rb +2 -2
  80. data/lib/rbs/validator.rb +3 -1
  81. data/lib/rbs/version.rb +1 -1
  82. data/lib/rdoc_plugin/parser.rb +2 -2
  83. data/rbs.gemspec +4 -0
  84. data/sig/ancestor_graph.rbs +4 -4
  85. data/sig/namespace.rbs +2 -3
  86. data/sig/resolver/constant_resolver.rbs +2 -2
  87. data/sig/resolver/context.rbs +1 -1
  88. data/sig/type_alias_regularity.rbs +5 -5
  89. data/sig/typename.rbs +8 -5
  90. data/sig/use_map.rbs +1 -1
  91. data/sig/validator.rbs +2 -2
  92. data/stdlib/base64/0/base64.rbs +0 -9
  93. data/stdlib/benchmark/0/benchmark.rbs +11 -2
  94. data/stdlib/bigdecimal/0/big_decimal.rbs +26 -182
  95. data/stdlib/cgi/0/core.rbs +47 -0
  96. data/stdlib/coverage/0/coverage.rbs +0 -3
  97. data/stdlib/csv/0/csv.rbs +18 -58
  98. data/stdlib/date/0/date.rbs +4 -19
  99. data/stdlib/did_you_mean/0/did_you_mean.rbs +0 -5
  100. data/stdlib/digest/0/digest.rbs +25 -2
  101. data/stdlib/erb/0/erb.rbs +0 -1
  102. data/stdlib/etc/0/etc.rbs +51 -34
  103. data/stdlib/fileutils/0/fileutils.rbs +3 -44
  104. data/stdlib/io-console/0/io-console.rbs +69 -15
  105. data/stdlib/ipaddr/0/ipaddr.rbs +8 -4
  106. data/stdlib/json/0/json.rbs +56 -71
  107. data/stdlib/logger/0/log_device.rbs +1 -1
  108. data/stdlib/logger/0/logger.rbs +3 -18
  109. data/stdlib/net-http/0/net-http.rbs +19 -77
  110. data/stdlib/nkf/0/nkf.rbs +30 -0
  111. data/stdlib/objspace/0/objspace.rbs +1 -2
  112. data/stdlib/observable/0/observable.rbs +1 -1
  113. data/stdlib/open-uri/0/open-uri.rbs +52 -0
  114. data/stdlib/open3/0/open3.rbs +0 -8
  115. data/stdlib/openssl/0/openssl.rbs +136 -69
  116. data/stdlib/optparse/0/optparse.rbs +58 -18
  117. data/stdlib/pathname/0/pathname.rbs +2 -8
  118. data/stdlib/pp/0/pp.rbs +3 -1
  119. data/stdlib/prettyprint/0/prettyprint.rbs +0 -4
  120. data/stdlib/pstore/0/pstore.rbs +0 -6
  121. data/stdlib/psych/0/psych.rbs +15 -4
  122. data/stdlib/pty/0/pty.rbs +46 -4
  123. data/stdlib/rdoc/0/code_object.rbs +0 -4
  124. data/stdlib/rdoc/0/markup.rbs +10 -12
  125. data/stdlib/rdoc/0/rdoc.rbs +1 -2
  126. data/stdlib/resolv/0/resolv.rbs +8 -3
  127. data/stdlib/ripper/0/ripper.rbs +0 -2
  128. data/stdlib/securerandom/0/securerandom.rbs +0 -2
  129. data/stdlib/shellwords/0/shellwords.rbs +11 -12
  130. data/stdlib/singleton/0/singleton.rbs +0 -1
  131. data/stdlib/socket/0/addrinfo.rbs +0 -1
  132. data/stdlib/socket/0/basic_socket.rbs +0 -5
  133. data/stdlib/socket/0/socket.rbs +49 -25
  134. data/stdlib/socket/0/tcp_server.rbs +0 -3
  135. data/stdlib/socket/0/tcp_socket.rbs +58 -3
  136. data/stdlib/socket/0/udp_socket.rbs +0 -1
  137. data/stdlib/socket/0/unix_server.rbs +0 -3
  138. data/stdlib/strscan/0/string_scanner.rbs +1265 -422
  139. data/stdlib/tempfile/0/tempfile.rbs +135 -28
  140. data/stdlib/time/0/time.rbs +48 -35
  141. data/stdlib/timeout/0/timeout.rbs +11 -8
  142. data/stdlib/tmpdir/0/tmpdir.rbs +8 -1
  143. data/stdlib/tsort/0/tsort.rbs +0 -4
  144. data/stdlib/uri/0/common.rbs +11 -30
  145. data/stdlib/uri/0/ftp.rbs +1 -1
  146. data/stdlib/uri/0/generic.rbs +22 -18
  147. data/stdlib/uri/0/http.rbs +2 -2
  148. data/stdlib/uri/0/rfc2396_parser.rbs +3 -0
  149. data/stdlib/zlib/0/buf_error.rbs +1 -70
  150. data/stdlib/zlib/0/data_error.rbs +1 -70
  151. data/stdlib/zlib/0/deflate.rbs +8 -72
  152. data/stdlib/zlib/0/error.rbs +1 -70
  153. data/stdlib/zlib/0/gzip_file/crc_error.rbs +2 -105
  154. data/stdlib/zlib/0/gzip_file/error.rbs +2 -105
  155. data/stdlib/zlib/0/gzip_file/length_error.rbs +2 -105
  156. data/stdlib/zlib/0/gzip_file/no_footer.rbs +2 -105
  157. data/stdlib/zlib/0/gzip_file.rbs +1 -71
  158. data/stdlib/zlib/0/gzip_reader.rbs +3 -74
  159. data/stdlib/zlib/0/gzip_writer.rbs +1 -70
  160. data/stdlib/zlib/0/inflate.rbs +4 -71
  161. data/stdlib/zlib/0/mem_error.rbs +1 -70
  162. data/stdlib/zlib/0/need_dict.rbs +1 -70
  163. data/stdlib/zlib/0/stream_end.rbs +1 -70
  164. data/stdlib/zlib/0/stream_error.rbs +1 -70
  165. data/stdlib/zlib/0/version_error.rbs +1 -70
  166. data/stdlib/zlib/0/zlib.rbs +0 -2
  167. data/stdlib/zlib/0/zstream.rbs +4 -72
  168. metadata +4 -6
data/core/integer.rbs CHANGED
@@ -5,12 +5,10 @@
5
5
  #
6
6
  # * An [integer literal](rdoc-ref:syntax/literals.rdoc@Integer+Literals).
7
7
  #
8
- #
9
8
  # You can convert certain objects to Integers with:
10
9
  #
11
10
  # * Method #Integer.
12
11
  #
13
- #
14
12
  # An attempt to add a singleton method to an instance of this class causes an
15
13
  # exception to be raised.
16
14
  #
@@ -18,8 +16,9 @@
18
16
  #
19
17
  # First, what's elsewhere. Class Integer:
20
18
  #
21
- # * Inherits from [class Numeric](rdoc-ref:Numeric@What-27s+Here).
22
- #
19
+ # * Inherits from [class Numeric](rdoc-ref:Numeric@What-27s+Here) and [class
20
+ # Object](rdoc-ref:Object@What-27s+Here).
21
+ # * Includes [module Comparable](rdoc-ref:Comparable@What-27s+Here).
23
22
  #
24
23
  # Here, class Integer provides methods for:
25
24
  #
@@ -28,14 +27,12 @@
28
27
  # * [Converting](rdoc-ref:Integer@Converting)
29
28
  # * [Other](rdoc-ref:Integer@Other)
30
29
  #
31
- #
32
30
  # ### Querying
33
31
  #
34
32
  # * #allbits?: Returns whether all bits in `self` are set.
35
33
  # * #anybits?: Returns whether any bits in `self` are set.
36
34
  # * #nobits?: Returns whether no bits in `self` are set.
37
35
  #
38
- #
39
36
  # ### Comparing
40
37
  #
41
38
  # * #<: Returns whether `self` is less than the given value.
@@ -48,7 +45,6 @@
48
45
  # * #>: Returns whether `self` is greater than the given value.
49
46
  # * #>=: Returns whether `self` is greater than or equal to the given value.
50
47
  #
51
- #
52
48
  # ### Converting
53
49
  #
54
50
  # * ::sqrt: Returns the integer square root of the given value.
@@ -64,6 +60,7 @@
64
60
  # * #>>: Returns the value of `self` after a rightward bit-shift.
65
61
  # * #[]: Returns a slice of bits from `self`.
66
62
  # * #^: Returns the bitwise EXCLUSIVE OR of `self` and the given value.
63
+ # * #|: Returns the bitwise OR of `self` and the given value.
67
64
  # * #ceil: Returns the smallest number greater than or equal to `self`.
68
65
  # * #chr: Returns a 1-character string containing the character represented by
69
66
  # the value of `self`.
@@ -85,8 +82,6 @@
85
82
  # * #to_s (aliased as #inspect): Returns a string containing the place-value
86
83
  # representation of `self` in the given radix.
87
84
  # * #truncate: Returns `self` truncated to the given precision.
88
- # * #|: Returns the bitwise OR of `self` and the given value.
89
- #
90
85
  #
91
86
  # ### Other
92
87
  #
@@ -362,7 +357,6 @@ class Integer < Numeric
362
357
  # * 1, if `self` is greater then `other`.
363
358
  # * `nil`, if `self` and `other` are incomparable.
364
359
  #
365
- #
366
360
  # Examples:
367
361
  #
368
362
  # 1 <=> 2 # => -1
@@ -620,22 +614,40 @@ class Integer < Numeric
620
614
  # rdoc-file=numeric.c
621
615
  # - ceil(ndigits = 0) -> integer
622
616
  # -->
623
- # Returns the smallest number greater than or equal to `self` with a precision
624
- # of `ndigits` decimal digits.
625
- #
626
- # When the precision is negative, the returned value is an integer with at least
627
- # `ndigits.abs` trailing zeros:
628
- #
629
- # 555.ceil(-1) # => 560
630
- # 555.ceil(-2) # => 600
631
- # -555.ceil(-2) # => -500
632
- # 555.ceil(-3) # => 1000
633
- #
634
- # Returns `self` when `ndigits` is zero or positive.
635
- #
636
- # 555.ceil # => 555
637
- # 555.ceil(50) # => 555
638
- #
617
+ # Returns an integer that is a "ceiling" value for `self`,
618
+ # as specified by the given `ndigits`,
619
+ # which must be an
620
+ # [integer-convertible
621
+ # object](rdoc-ref:implicit_conversion.rdoc@Integer-Convertible+Objects).
622
+ # * When `self` is zero, returns zero (regardless of the value of `ndigits`):
623
+ # 0.ceil(2) # => 0
624
+ # 0.ceil(-2) # => 0
625
+ #
626
+ # * When `self` is non-zero and `ndigits` is non-negative, returns `self`:
627
+ # 555.ceil # => 555
628
+ # 555.ceil(50) # => 555
629
+ #
630
+ # * When `self` is non-zero and `ndigits` is negative,
631
+ # returns a value based on a computed granularity:
632
+ # * The granularity is `10 ** ndigits.abs`.
633
+ # * The returned value is the smallest multiple of the granularity
634
+ # that is greater than or equal to `self`.
635
+ # Examples with positive `self`:
636
+ # ndigits|Granularity|1234.ceil(ndigits)
637
+ # -------|-----------|------------------
638
+ # -1| 10| 1240
639
+ # -2| 100| 1300
640
+ # -3| 1000| 2000
641
+ # -4| 10000| 10000
642
+ # -5| 100000| 100000
643
+ # Examples with negative `self`:
644
+ # ndigits|Granularity|-1234.ceil(ndigits)
645
+ # -------|-----------|-------------------
646
+ # -1| 10| -1230
647
+ # -2| 100| -1200
648
+ # -3| 1000| -1000
649
+ # -4| 10000| 0
650
+ # -5| 100000| 0
639
651
  # Related: Integer#floor.
640
652
  #
641
653
  def ceil: () -> Integer
@@ -728,14 +740,14 @@ class Integer < Numeric
728
740
  # Performs integer division; returns the integer result of dividing `self` by
729
741
  # `numeric`:
730
742
  #
731
- # 4.div(3) # => 1
732
- # 4.div(-3) # => -2
733
- # -4.div(3) # => -2
734
- # -4.div(-3) # => 1
735
- # 4.div(3.0) # => 1
736
- # 4.div(Rational(3, 1)) # => 1
743
+ # 4.div(3) # => 1
744
+ # 4.div(-3) # => -2
745
+ # -4.div(3) # => -2
746
+ # -4.div(-3) # => 1
747
+ # 4.div(3.0) # => 1
748
+ # 4.div(Rational(3, 1)) # => 1
737
749
  #
738
- # Raises an exception if +numeric+ does not have method +div+.
750
+ # Raises an exception if `numeric` does not have method `div`.
739
751
  #
740
752
  def div: (Numeric) -> Integer
741
753
 
@@ -823,22 +835,40 @@ class Integer < Numeric
823
835
  # rdoc-file=numeric.c
824
836
  # - floor(ndigits = 0) -> integer
825
837
  # -->
826
- # Returns the largest number less than or equal to `self` with a precision of
827
- # `ndigits` decimal digits.
828
- #
829
- # When `ndigits` is negative, the returned value has at least `ndigits.abs`
830
- # trailing zeros:
831
- #
832
- # 555.floor(-1) # => 550
833
- # 555.floor(-2) # => 500
834
- # -555.floor(-2) # => -600
835
- # 555.floor(-3) # => 0
836
- #
837
- # Returns `self` when `ndigits` is zero or positive.
838
- #
839
- # 555.floor # => 555
840
- # 555.floor(50) # => 555
841
- #
838
+ # Returns an integer that is a "floor" value for `self`,
839
+ # as specified by the given `ndigits`,
840
+ # which must be an
841
+ # [integer-convertible
842
+ # object](rdoc-ref:implicit_conversion.rdoc@Integer-Convertible+Objects).
843
+ # * When `self` is zero, returns zero (regardless of the value of `ndigits`):
844
+ # 0.floor(2) # => 0
845
+ # 0.floor(-2) # => 0
846
+ #
847
+ # * When `self` is non-zero and `ndigits` is non-negative, returns `self`:
848
+ # 555.floor # => 555
849
+ # 555.floor(50) # => 555
850
+ #
851
+ # * When `self` is non-zero and `ndigits` is negative,
852
+ # returns a value based on a computed granularity:
853
+ # * The granularity is `10 ** ndigits.abs`.
854
+ # * The returned value is the largest multiple of the granularity
855
+ # that is less than or equal to `self`.
856
+ # Examples with positive `self`:
857
+ # ndigits|Granularity|1234.floor(ndigits)
858
+ # -------|-----------|-------------------
859
+ # -1| 10| 1230
860
+ # -2| 100| 1200
861
+ # -3| 1000| 1000
862
+ # -4| 10000| 0
863
+ # -5| 100000| 0
864
+ # Examples with negative `self`:
865
+ # ndigits|Granularity|-1234.floor(ndigits)
866
+ # -------|-----------|--------------------
867
+ # -1| 10| -1240
868
+ # -2| 100| -1300
869
+ # -3| 1000| -2000
870
+ # -4| 10000| -10000
871
+ # -5| 100000| -100000
842
872
  # Related: Integer#ceil.
843
873
  #
844
874
  def floor: (?int digits) -> Integer
@@ -1136,7 +1166,6 @@ class Integer < Numeric
1136
1166
  # 15.round(-1, half: :even) # => 20
1137
1167
  # (-25).round(-1, half: :even) # => -20
1138
1168
  #
1139
- #
1140
1169
  # Raises and exception if the value for `half` is invalid.
1141
1170
  #
1142
1171
  # Related: Integer#truncate.
data/core/io/buffer.rbs CHANGED
@@ -15,7 +15,6 @@ class IO
15
15
  # * Create a string of a fixed size with ::string, then #read into it, or
16
16
  # modify it using #set_value.
17
17
  #
18
- #
19
18
  # Interaction with string and file memory is performed by efficient low-level C
20
19
  # mechanisms like `memcpy`.
21
20
  #
@@ -42,30 +41,28 @@ class IO
42
41
  #
43
42
  # Buffer from string:
44
43
  #
45
- # string = 'buffer'
46
- # buffer = IO::Buffer.for(string)
47
- # # =>
48
- # # #<IO::Buffer 0x00007f3f02be9b18+4 SLICE>
49
- # # ...
50
- # buffer
51
- # # =>
52
- # # #<IO::Buffer 0x00007f3f02be9b18+4 SLICE>
53
- # # 0x00000000 64 61 74 61 buffer
44
+ # string = 'data'
45
+ # IO::Buffer.for(string) do |buffer|
46
+ # buffer
47
+ # # =>
48
+ # # #<IO::Buffer 0x00007f3f02be9b18+4 SLICE>
49
+ # # 0x00000000 64 61 74 61 data
54
50
  #
55
- # buffer.get_string(2) # read content starting from offset 2
56
- # # => "ta"
57
- # buffer.set_string('---', 1) # write content, starting from offset 1
58
- # # => 3
59
- # buffer
60
- # # =>
61
- # # #<IO::Buffer 0x00007f3f02be9b18+4 SLICE>
62
- # # 0x00000000 64 2d 2d 2d d---
63
- # string # original string changed, too
64
- # # => "d---"
51
+ # buffer.get_string(2) # read content starting from offset 2
52
+ # # => "ta"
53
+ # buffer.set_string('---', 1) # write content, starting from offset 1
54
+ # # => 3
55
+ # buffer
56
+ # # =>
57
+ # # #<IO::Buffer 0x00007f3f02be9b18+4 SLICE>
58
+ # # 0x00000000 64 2d 2d 2d d---
59
+ # string # original string changed, too
60
+ # # => "d---"
61
+ # end
65
62
  #
66
63
  # Buffer from file:
67
64
  #
68
- # File.write('test.txt', 'test buffer')
65
+ # File.write('test.txt', 'test data')
69
66
  # # => 9
70
67
  # buffer = IO::Buffer.map(File.open('test.txt'))
71
68
  # # =>
@@ -82,7 +79,7 @@ class IO
82
79
  # buffer.set_string('---', 1)
83
80
  # # => 3 -- bytes written
84
81
  # File.read('test.txt')
85
- # # => "t--- buffer"
82
+ # # => "t--- data"
86
83
  #
87
84
  # **The class is experimental and the interface is subject to change, this is
88
85
  # especially true of file mappings which may be removed entirely in the
@@ -199,29 +196,29 @@ class IO
199
196
  # -->
200
197
  # Fill buffer with `value`, starting with `offset` and going for `length` bytes.
201
198
  #
202
- # buffer = IO::Buffer.for('test')
199
+ # buffer = IO::Buffer.for('test').dup
203
200
  # # =>
204
- # # <IO::Buffer 0x00007fca40087c38+4 SLICE>
201
+ # # <IO::Buffer 0x00007fca40087c38+4 INTERNAL>
205
202
  # # 0x00000000 74 65 73 74 test
206
203
  #
207
204
  # buffer.clear
208
205
  # # =>
209
- # # <IO::Buffer 0x00007fca40087c38+4 SLICE>
206
+ # # <IO::Buffer 0x00007fca40087c38+4 INTERNAL>
210
207
  # # 0x00000000 00 00 00 00 ....
211
208
  #
212
209
  # buf.clear(1) # fill with 1
213
210
  # # =>
214
- # # <IO::Buffer 0x00007fca40087c38+4 SLICE>
211
+ # # <IO::Buffer 0x00007fca40087c38+4 INTERNAL>
215
212
  # # 0x00000000 01 01 01 01 ....
216
213
  #
217
214
  # buffer.clear(2, 1, 2) # fill with 2, starting from offset 1, for 2 bytes
218
215
  # # =>
219
- # # <IO::Buffer 0x00007fca40087c38+4 SLICE>
216
+ # # <IO::Buffer 0x00007fca40087c38+4 INTERNAL>
220
217
  # # 0x00000000 01 02 02 01 ....
221
218
  #
222
219
  # buffer.clear(2, 1) # fill with 2, starting from offset 1
223
220
  # # =>
224
- # # <IO::Buffer 0x00007fca40087c38+4 SLICE>
221
+ # # <IO::Buffer 0x00007fca40087c38+4 INTERNAL>
225
222
  # # 0x00000000 01 02 02 02 ....
226
223
  #
227
224
  def clear: (?Integer value, ?Integer offset, ?Integer length) -> self
@@ -231,7 +228,7 @@ class IO
231
228
  # - copy(source, [offset, [length, [source_offset]]]) -> size
232
229
  # -->
233
230
  # Efficiently copy from a source IO::Buffer into the buffer, at `offset` using
234
- # `memcpy`. For copying String instances, see #set_string.
231
+ # `memmove`. For copying String instances, see #set_string.
235
232
  #
236
233
  # buffer = IO::Buffer.new(32)
237
234
  # # =>
@@ -249,13 +246,14 @@ class IO
249
246
  #
250
247
  # #copy can be used to put buffer into strings associated with buffer:
251
248
  #
252
- # string= "buffer: "
253
- # # => "buffer: "
254
- # buffer = IO::Buffer.for(string)
255
- # buffer.copy(IO::Buffer.for("test"), 5)
249
+ # string = "data: "
250
+ # # => "data: "
251
+ # buffer = IO::Buffer.for(string) do |buffer|
252
+ # buffer.copy(IO::Buffer.for("test"), 5)
253
+ # end
256
254
  # # => 4
257
255
  # string
258
- # # => "buffer:test"
256
+ # # => "data:test"
259
257
  #
260
258
  # Attempt to copy into a read-only buffer will fail:
261
259
  #
@@ -279,6 +277,20 @@ class IO
279
277
  # buffer.copy(IO::Buffer.for('test'), 0)
280
278
  # # in `copy': Specified offset+length is bigger than the buffer size! (ArgumentError)
281
279
  #
280
+ # It is safe to copy between memory regions that overlaps each other. In such
281
+ # case, the data is copied as if the data was first copied from the source
282
+ # buffer to a temporary buffer, and then copied from the temporary buffer to the
283
+ # destination buffer.
284
+ #
285
+ # buffer = IO::Buffer.new(10)
286
+ # buffer.set_string("0123456789")
287
+ # buffer.copy(buffer, 3, 7)
288
+ # # => 7
289
+ # buffer
290
+ # # =>
291
+ # # #<IO::Buffer 0x000056494f8ce440+10 INTERNAL>
292
+ # # 0x00000000 30 31 32 30 31 32 33 34 35 36 0120123456
293
+ #
282
294
  def copy: (Buffer source, ?Integer offset, ?Integer length, ?Integer source_offset) -> Integer
283
295
 
284
296
  # <!--
@@ -313,7 +325,6 @@ class IO
313
325
  # * for a buffer created from scratch: free memory.
314
326
  # * for a buffer created from string: undo the association.
315
327
  #
316
- #
317
328
  # After the buffer is freed, no further operations can't be performed on it.
318
329
  #
319
330
  # You can resize a freed buffer to re-allocate it.
@@ -376,7 +387,6 @@ class IO
376
387
  # * `:f64`: double, 8 bytes, little-endian
377
388
  # * `:F64`: double, 8 bytes, big-endian
378
389
  #
379
- #
380
390
  # A buffer type refers specifically to the type of binary buffer that is stored
381
391
  # in the buffer. For example, a `:u32` buffer type is a 32-bit unsigned integer
382
392
  # in little-endian format.
@@ -654,7 +664,7 @@ class IO
654
664
  # - set_string(string, [offset, [length, [source_offset]]]) -> size
655
665
  # -->
656
666
  # Efficiently copy from a source String into the buffer, at `offset` using
657
- # `memcpy`.
667
+ # `memmove`.
658
668
  #
659
669
  # buf = IO::Buffer.new(8)
660
670
  # # =>
@@ -739,7 +749,7 @@ class IO
739
749
  # bounds.
740
750
  #
741
751
  # string = 'test'
742
- # buffer = IO::Buffer.for(string)
752
+ # buffer = IO::Buffer.for(string).dup
743
753
  #
744
754
  # slice = buffer.slice
745
755
  # # =>
@@ -766,13 +776,9 @@ class IO
766
776
  # # it is also visible at position 1 of the original buffer
767
777
  # buffer
768
778
  # # =>
769
- # # #<IO::Buffer 0x00007fc3d31e2d80+4 SLICE>
779
+ # # #<IO::Buffer 0x00007fc3d31e2d80+4 INTERNAL>
770
780
  # # 0x00000000 74 6f 73 74 tost
771
781
  #
772
- # # ...and original string
773
- # string
774
- # # => tost
775
- #
776
782
  def slice: (Integer offset, Integer length) -> Buffer
777
783
 
778
784
  # <!--