Граф коммитов

65707 Коммитов

Автор SHA1 Сообщение Дата
Samuel Williams af1c587546 Improve timeout tests. 2021-03-30 18:38:42 +13:00
Samuel Williams 511acba4ae Update method name and add documentation. 2021-03-30 18:38:42 +13:00
Samuel Williams 09c865d541 Fix native implementation.
# Conflicts:
#	scheduler.c
2021-03-30 18:38:42 +13:00
Nobuyoshi Nakada 67f60ebb64 Fixed a compilation error 2021-03-30 18:38:42 +13:00
Samuel Williams c05dd7dc85 Prefer `rb_check_funcall`. 2021-03-30 18:38:42 +13:00
Samuel Williams 9b9bbaec11 Update lib/timeout.rb
Co-authored-by: Nobuyoshi Nakada <nobu@ruby-lang.org>
2021-03-30 18:38:42 +13:00
Samuel Williams 4c53dc970b Add hook for `Timeout.timeout`. 2021-03-30 18:38:42 +13:00
git 93753d7ee7 * 2021-03-30 [ci skip] 2021-03-30 14:28:04 +09:00
Aleksandar Ivanov d65d661151 [ruby/irb] Prevent the completion from crashing if rdoc is missing
There are cases where ruby is installed without rdoc and e.g.
lib/irb/cmd/help.rb also handles the LoadError

Here is how to replicate the issue:

```
$ docker run -it alpine:3.13.3 sh

/ # apk add ruby ruby-irb ruby-io-console

/ # irb

irb(main):001:0> Class[TAB][TAB]
```

And you end up with something like:

```
irb(main):001:0> ClassTraceback (most recent call last):
        34: from /usr/bin/irb:23:in `<main>'
        33: from /usr/bin/irb:23:in `load'
        32: from /usr/lib/ruby/gems/2.7.0/gems/irb-1.2.6/exe/irb:11:in `<top (required)>'
        31: from /usr/lib/ruby/2.7.0/irb.rb:400:in `start'
        30: from /usr/lib/ruby/2.7.0/irb.rb:471:in `run'
        29: from /usr/lib/ruby/2.7.0/irb.rb:471:in `catch'
        28: from /usr/lib/ruby/2.7.0/irb.rb:472:in `block in run'
        27: from /usr/lib/ruby/2.7.0/irb.rb:537:in `eval_input'
        26: from /usr/lib/ruby/2.7.0/irb/ruby-lex.rb:150:in `each_top_level_statement'
        25: from /usr/lib/ruby/2.7.0/irb/ruby-lex.rb:150:in `catch'
        24: from /usr/lib/ruby/2.7.0/irb/ruby-lex.rb:151:in `block in each_top_level_statement'
        23: from /usr/lib/ruby/2.7.0/irb/ruby-lex.rb:151:in `loop'
        22: from /usr/lib/ruby/2.7.0/irb/ruby-lex.rb:154:in `block (2 levels) in each_top_level_statement'
        21: from /usr/lib/ruby/2.7.0/irb/ruby-lex.rb:182:in `lex'
        20: from /usr/lib/ruby/2.7.0/irb.rb:518:in `block in eval_input'
        19: from /usr/lib/ruby/2.7.0/irb.rb:704:in `signal_status'
        18: from /usr/lib/ruby/2.7.0/irb.rb:519:in `block (2 levels) in eval_input'
        17: from /usr/lib/ruby/2.7.0/irb/input-method.rb:294:in `gets'
        16: from /usr/lib/ruby/2.7.0/forwardable.rb:235:in `readmultiline'
        15: from /usr/lib/ruby/2.7.0/forwardable.rb:235:in `readmultiline'
        14: from /usr/lib/ruby/2.7.0/reline.rb:175:in `readmultiline'
        13: from /usr/lib/ruby/2.7.0/reline.rb:238:in `inner_readline'
        12: from /usr/lib/ruby/2.7.0/reline.rb:238:in `loop'
        11: from /usr/lib/ruby/2.7.0/reline.rb:239:in `block in inner_readline'
        10: from /usr/lib/ruby/2.7.0/reline.rb:270:in `read_io'
         9: from /usr/lib/ruby/2.7.0/reline.rb:270:in `loop'
         8: from /usr/lib/ruby/2.7.0/reline.rb:311:in `block in read_io'
         7: from /usr/lib/ruby/2.7.0/reline.rb:240:in `block (2 levels) in inner_readline'
         6: from /usr/lib/ruby/2.7.0/reline.rb:240:in `each'
         5: from /usr/lib/ruby/2.7.0/reline.rb:241:in `block (3 levels) in inner_readline'
         4: from /usr/lib/ruby/2.7.0/reline/line_editor.rb:820:in `input_key'
         3: from /usr/lib/ruby/2.7.0/reline/line_editor.rb:608:in `complete'
         2: from /usr/lib/ruby/2.7.0/irb/completion.rb:269:in `block in <module:InputCompletor>'
         1: from /usr/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `require'
/usr/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `require': cannot load such file -- rdoc (LoadError)
```

https://github.com/ruby/irb/commit/a2d299c2ac
2021-03-30 14:27:51 +09:00
Jeremy Evans 62e66aedb0 Add more tests for defined? with method calls 2021-03-29 07:45:15 -07:00
Jeremy Evans 7b3c5ab8a5 Make defined? cache the results of method calls
Previously, defined? could result in many more method calls than
the code it was checking. `defined? a.b.c.d.e.f` generated 15 calls,
with `a` called 5 times, `b` called 4 times, etc..  This was due to
the fact that defined works in a recursive manner, but it previously
did not cache results.  So for `defined? a.b.c.d.e.f`, the logic was
similar to

```ruby
return nil unless defined? a
return nil unless defined? a.b
return nil unless defined? a.b.c
return nil unless defined? a.b.c.d
return nil unless defined? a.b.c.d.e
return nil unless defined? a.b.c.d.e.f
"method"
```

With this change, the logic is similar to the following, without
the creation of a local variable:

```ruby
return nil unless defined? a
_ = a
return nil unless defined? _.b
_ = _.b
return nil unless defined? _.c
_ = _.c
return nil unless defined? _.d
_ = _.d
return nil unless defined? _.e
_ = _.e
return nil unless defined? _.f
"method"
```

In addition to eliminating redundant method calls for defined
statements, this greatly simplifies the instruction sequences by
eliminating duplication.  Previously:

```
0000 putnil                                                           (   1)[Li]
0001 putself
0002 defined                                func, :a, false
0006 branchunless                           73
0008 putself
0009 opt_send_without_block                 <calldata!mid:a, argc:0, FCALL|VCALL|ARGS_SIMPLE>
0011 defined                                method, :b, false
0015 branchunless                           73
0017 putself
0018 opt_send_without_block                 <calldata!mid:a, argc:0, FCALL|VCALL|ARGS_SIMPLE>
0020 opt_send_without_block                 <calldata!mid:b, argc:0, ARGS_SIMPLE>
0022 defined                                method, :c, false
0026 branchunless                           73
0028 putself
0029 opt_send_without_block                 <calldata!mid:a, argc:0, FCALL|VCALL|ARGS_SIMPLE>
0031 opt_send_without_block                 <calldata!mid:b, argc:0, ARGS_SIMPLE>
0033 opt_send_without_block                 <calldata!mid:c, argc:0, ARGS_SIMPLE>
0035 defined                                method, :d, false
0039 branchunless                           73
0041 putself
0042 opt_send_without_block                 <calldata!mid:a, argc:0, FCALL|VCALL|ARGS_SIMPLE>
0044 opt_send_without_block                 <calldata!mid:b, argc:0, ARGS_SIMPLE>
0046 opt_send_without_block                 <calldata!mid:c, argc:0, ARGS_SIMPLE>
0048 opt_send_without_block                 <calldata!mid:d, argc:0, ARGS_SIMPLE>
0050 defined                                method, :e, false
0054 branchunless                           73
0056 putself
0057 opt_send_without_block                 <calldata!mid:a, argc:0, FCALL|VCALL|ARGS_SIMPLE>
0059 opt_send_without_block                 <calldata!mid:b, argc:0, ARGS_SIMPLE>
0061 opt_send_without_block                 <calldata!mid:c, argc:0, ARGS_SIMPLE>
0063 opt_send_without_block                 <calldata!mid:d, argc:0, ARGS_SIMPLE>
0065 opt_send_without_block                 <calldata!mid:e, argc:0, ARGS_SIMPLE>
0067 defined                                method, :f, true
0071 swap
0072 pop
0073 leave
```

After change:

```
0000 putnil                                                           (   1)[Li]
0001 putself
0002 dup
0003 defined                                func, :a, false
0007 branchunless                           52
0009 opt_send_without_block                 <calldata!mid:a, argc:0, FCALL|VCALL|ARGS_SIMPLE>
0011 dup
0012 defined                                method, :b, false
0016 branchunless                           52
0018 opt_send_without_block                 <calldata!mid:b, argc:0, ARGS_SIMPLE>
0020 dup
0021 defined                                method, :c, false
0025 branchunless                           52
0027 opt_send_without_block                 <calldata!mid:c, argc:0, ARGS_SIMPLE>
0029 dup
0030 defined                                method, :d, false
0034 branchunless                           52
0036 opt_send_without_block                 <calldata!mid:d, argc:0, ARGS_SIMPLE>
0038 dup
0039 defined                                method, :e, false
0043 branchunless                           52
0045 opt_send_without_block                 <calldata!mid:e, argc:0, ARGS_SIMPLE>
0047 defined                                method, :f, true
0051 swap
0052 pop
0053 leave
```

This fixes issues where for pathological small examples, Ruby would generate
huge instruction sequences.

Unfortunately, implementing this support is kind of a hack.  This adds another
parameter to compile_call for whether we should assume the receiver is already
present on the stack, and has defined? set that parameter for the specific
case where it is compiling a method call where the receiver is also a method
call.

defined_expr0 also takes an additional parameter for whether it should leave
the results of the method call on the stack.  If that argument is true, in
the case where the method isn't defined, we jump to the pop before the leave,
so the extra result is not left on the stack.  This requires space for an
additional label, so lfinish now needs to be able to hold 3 labels.

Fixes [Bug #17649]
Fixes [Bug #13708]
2021-03-29 07:45:15 -07:00
Nobuyoshi Nakada 190a57b168
[ruby/optparse] bump up to 0.1.1
https://github.com/ruby/optparse/commit/2fe984a603
2021-03-29 19:37:25 +09:00
Nobuyoshi Nakada e8317d90b0
[ruby/optparse] Fixed error message of unparsed non-option
Close https://github.com/ruby/optparse/issues/3

https://github.com/ruby/optparse/commit/94c5cf4032
2021-03-29 19:37:24 +09:00
Nobuyoshi Nakada 2bbae0e91a [ruby/optparse] Completion scripts themselves are not executable
https://github.com/ruby/optparse/commit/65d8aff935
2021-03-29 18:24:58 +09:00
Nobuyoshi Nakada e97f21afcd [ruby/optparse] Exclude unnecessary files from the package
https://github.com/ruby/optparse/commit/dfd9380231
2021-03-29 18:24:56 +09:00
BurdetteLamar 7846f3201a
[ruby/optparse] Change *opts to *params, to avoid confusion
https://github.com/ruby/optparse/commit/f5f5e202dd
2021-03-29 15:55:41 +09:00
Jeremy Evans eca8ffaa0b
[ruby/optparse] Add OptionParser#require_exact accessor
This allows you to disable allowing abbreviations of long options
and using short options for long options.

Implements Ruby Feature #11523

https://github.com/ruby/optparse/commit/dfefb2d2e2
2021-03-29 15:55:41 +09:00
Martin Rey d474b19b5b
[ruby/optparse] Use ZDOTDIR env var to locate .zshrc
https://github.com/ruby/optparse/commit/c4977674bf
2021-03-29 15:55:41 +09:00
Nobuyoshi Nakada d87b8ce647
sync_default_gems.rb: ignore COPYING file [ci skip] 2021-03-29 15:19:37 +09:00
Nobuyoshi Nakada f16b9e7f26
sync_default_gems.rb: IO#puts prints a newline between each argument [ci skip] 2021-03-29 15:14:21 +09:00
Nobuyoshi Nakada f46bbb2e99
[DOC] Improve an example of Array#count comparison [ci skip] 2021-03-29 11:35:38 +09:00
David CARLIER 875c85a8bd fiber context update for Mac OS.
it is more about memory accounting sake. At allocation time,
 we make clear we re possibly reusing regions marked as reusable.
Noted also calls might not necessarily succeed at first so we do
 only when necessary.
2021-03-29 09:32:40 +13:00
aycabta a1938ec308 [ruby/irb] Always add input method when calling Irb.new in tests
When passes input method as nil to Context.new through Irb.new,
ReidlineInputMethod.new is executed and the global internal state of Reline is
rewritten, therefore other tests are failed in the Ruby repository. This
commit changes to use TestInputMethod.

https://github.com/ruby/irb/commit/010dce9210
2021-03-29 05:10:08 +09:00
git 1cdecb4349 * 2021-03-29 [ci skip] 2021-03-29 03:18:08 +09:00
Kenichi Kamiya 813c3333a9 [Doc] Fix Array#count comparing strategy 2021-03-28 14:17:52 -04:00
Nobuyoshi Nakada 989e22f394
[ruby/io-console] bump up to 0.5.9
https://github.com/ruby/io-console/commit/302e86a28c
https://github.com/ruby/io-console/commit/0690862526
2021-03-28 23:42:38 +09:00
Nobuyoshi Nakada f7faac13c6
sync_default_gems.rb: remove un-committed files [ci skip]
As files non-existing in the repository cannot be checked out,
remove files to be ignored once, and re-check the status.
2021-03-28 23:39:27 +09:00
Nobuyoshi Nakada 36bad6f14f
sync_default_gems.rb: search the last merge more strictly [ci skip]
As tag-only match, `[#{repo}]`, may find unexpected commit, e.g.,
5bfca88f76 for io-console, match by
more exact URL pattern.
2021-03-28 22:58:43 +09:00
Nobuyoshi Nakada 49c1c2dce3
sync_default_gems.rb: escape filter command [ci skip] 2021-03-28 18:52:19 +09:00
Nobuyoshi Nakada 603d799520
sync_default_gems.rb: message when no commits [ci skip] 2021-03-28 14:10:04 +09:00
Kenichi Kamiya 522d4cd32f
Force recycle intermediate collection in Hash#transform_keys! [Bug #17735]
* Force recycle intermediate hash

* Force recycle intermediate array too

https://github.com/ruby/ruby/pull/4329#issuecomment-808840718
2021-03-28 14:09:52 +09:00
Kenichi Kamiya 9af57eeed6
[ruby/pathname] Fix segfault of Pathname#split
Fix segmentation fault of Pathname#split when File.split returns
non array value [Bug #17755]

https://github.com/ruby/pathname/commit/e29b49e3b1
https://github.com/ruby/pathname/commit/1db7479a74
2021-03-28 14:04:10 +09:00
Hiroshi SHIBATA 447e095413
[ruby/pathname] Support Ruby 3.0
Update test/pathname/test_pathname.rb

https://github.com/ruby/pathname/commit/29645187e0
https://github.com/ruby/pathname/commit/78584864de

Co-authored-by: Nobuyoshi Nakada <nobu@ruby-lang.org>
2021-03-28 14:03:42 +09:00
Nobuyoshi Nakada 38ea2306d2
sync_default_gems.rb: preserve Co-Authored-By: 2021-03-28 14:02:31 +09:00
Nobuyoshi Nakada fb6ebe55d9
Hide an intermediate array 2021-03-28 09:48:45 +09:00
Nobuyoshi Nakada 5e5fb72f99
Clear an intermediate hash [Bug #17735] 2021-03-28 09:42:26 +09:00
Kenichi Kamiya 31e0382723
Keep non evaluated keys in `Hash#transform_keys!` [Bug #17735] 2021-03-28 09:14:57 +09:00
S-H-GAMELINKS e398a0e53a Remove unneeded rb_ident_hash_new function declaration 2021-03-28 08:50:25 +09:00
git cc15ae3431 * 2021-03-28 [ci skip] 2021-03-28 08:48:06 +09:00
Kenichi Kamiya 0a544c0c35
Fix segmentation fault when `Module#name` returns non string value [Bug #17754]
* Add test for NoMethodError#to_s does not segfault

* Ensure no segfault even if Module#name is overridden
2021-03-28 08:47:42 +09:00
Benoit Daloze 95d9fe9538 Update to ruby/spec@fd6eddd 2021-03-27 13:02:41 +01:00
Benoit Daloze 44736a6b7a Update to ruby/mspec@d1adf59 2021-03-27 13:02:38 +01:00
Kenichi Kamiya 31ae931e16
[Doc] Update regex engine to Onigumo in doc/extension.* [ci skip]
regex.c has been removed in 8e65234086
2021-03-27 17:22:57 +09:00
S.H 89fa5b1348
Add rb_exc_exception function
`rb_exc_raise` and `rb_fatal` func have similar code(in `eval.c`).
I think that better cut out and replace these code like `rb_exc_exception`
function.
2021-03-27 16:39:01 +09:00
Kenichi Kamiya aceb8c0b4b
Fix Enumerable#tally with some arguments pattern [Feature #17744]
* Add test cases for Enumerable#tally with hash argument

* Add ruby/spec for Enumerable#tally with hash argument

* Fix Enumerable#tally does not update given frozen hash

* Add test cases for Enumerable#tally with hash convertible arguments

* Fix SEGV when Enumerable#tally takes non Hash convertible

* FIx cosmetic damage enum.c
2021-03-27 12:55:46 +09:00
git 785c77d782 * 2021-03-27 [ci skip] 2021-03-27 10:15:24 +09:00
Nobuyoshi Nakada 8a89dd2a6c
No codesign in tests 2021-03-27 10:15:01 +09:00
Nobuyoshi Nakada 9143d21b1b
Enumerable#tally with the resulting hash [Feature #17744] 2021-03-26 16:29:21 +09:00
Takashi Kokubun 6a352e275b [ruby/erb] Version 2.2.3
https://github.com/ruby/erb/commit/03bc4a8274
2021-03-26 12:37:37 +09:00
Kenichi Kamiya 3789d58c84 [ruby/erb] Clarify supported ruby versions in gemspec
https://github.com/ruby/erb/commit/b40db4114a
2021-03-26 12:35:52 +09:00