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

81042 Коммитов

Автор SHA1 Сообщение Дата
Jemma Issroff 775ed27d6d [PRISM] Initialize keyword to silence warning 2023-11-13 17:48:55 -05:00
Maxime Chevalier-Boisvert c552a5f7b0
YJIT: shrink `Context` down to 15 bytes (#8911)
* WIP context refactoring

* Refactor to remove Context.temp_mapping
2023-11-13 17:14:24 -05:00
Yuta Saito e8ab3f7010 test: Check file name in test_thread_add_trace_func also
For better assert failure diagnostics.
2023-11-14 06:00:10 +09:00
Benoit Daloze bbfd735b88 [rubygems/rubygems] TruffleRuby uses a bash prelude in default launchers
https://github.com/rubygems/rubygems/commit/e119f4208a
2023-11-13 14:57:15 +00:00
TSUYUSATO Kitsune d5c3680a0c [ruby/prism] Add tests for error cases on #1791, #1807, and #1810
https://github.com/ruby/prism/commit/231e965124
2023-11-13 13:34:24 +00:00
tomoya ishida 90b49024c0 [ruby/reline] Fallback to 256color if COLORTERM != truecolor
(https://github.com/ruby/reline/pull/604)

* Fallback to 256color if COLORTERM != truecolor

* Add Reline::Face.force_truecolor to force truecolor without COLORTERM env

https://github.com/ruby/reline/commit/090e1e4df0
2023-11-13 12:42:31 +00:00
Nobuyoshi Nakada 8e64c87f64 [rubygems/rubygems] Make sure to `require "rubygems"` explicitly
This is also done in bundler/lib/bundler/rubygems_integration.rb, but
bundler/lib/bundler.rb loads this file before it.

https://github.com/rubygems/rubygems/commit/8840d8507b
2023-11-13 11:33:00 +00:00
Yuta Saito 50a5b76dec [wasm] allocate Asyncify setjmp buffer in heap
`rb_jmpbuf_t` type is considerably large due to inline-allocated
Asyncify buffer, and it leads to stack overflow even with small number
of C-method call frames. This commit allocates the Asyncify buffer used
by `rb_wasm_setjmp` in heap to mitigate the issue.

This patch introduces a new type `rb_vm_tag_jmpbuf_t` to abstract the
representation of a jump buffer, and init/deinit hook points to manage
lifetime of the buffer. These changes are effectively NFC for non-wasm
platforms.
2023-11-13 19:17:16 +09:00
Jean Boussier f1b95095d6 Revert "Wrap rb_objspace_reachable_objects_from_root with RB_VM_LOCK"
This reverts commit 76dc327eef.
2023-11-13 08:57:57 +01:00
Jean Boussier a1887f4dc2 Revert "Fix crash caused by concurrent ObjectSpace.dump_all calls"
This reverts commit 9a62fd3cba.
2023-11-13 08:57:57 +01:00
Jean Boussier 9ca41e9991 GVL Instrumentation: pass thread->self as part of event data
Context: https://github.com/ivoanjo/gvl-tracing/pull/4

Some hooks may want to collect data on a per thread basis.
Right now the only way to identify the concerned thread is to
use `rb_nativethread_self()` or similar, but even then because
of the thread cache or MaNy, two distinct Ruby threads may report
the same native thread id.

By passing `thread->self`, hooks can use it as a key to store
the metadata.

NB: Most hooks are executed outside the GVL, so such data collection
need to use a thread-safe data-structure, and shouldn't use the
reference in other ways from inside the hook.

They must also either pin that value or handle compaction.
2023-11-13 08:45:20 +01:00
Nobuyoshi Nakada 4376a17552
[DOC] Close a tag 2023-11-13 16:04:49 +09:00
Nobuyoshi Nakada 44a6a13cbe
[DOC] Fix Timezone Objects description
From the beginning when Timezone object support was introduced,
Timezone objects are allowed everywhere offset strings are allowed.
2023-11-13 15:59:03 +09:00
Sorah Fukumori 952de171c0 make-snapshot: update RUBY_PATCHLEVEL_STR regexp
the regexp to replace RUBY_PATCHLEVEL_STR for prerelease snapshots doesn't
match since GH-8578.

follow-up: https://github.com/ruby/ruby/pull/8578
follow-up: 68df43788d
2023-11-13 11:28:48 +09:00
Vít Ondruch 5bb7562872 [rubygems/rubygems] Explicitly define `@default_specifications_dir` for tests
Resetting `@default_specifications_dir` to `nil` means that the
`Gem.default_specifications_dir` needs to be invoked. However, given
that this method might be overridden by operating_system.rb and similar,
this might lead to various test failures. Providing the default value
makes the issues go away.

https://github.com/rubygems/rubygems/commit/59626cb650
2023-11-13 11:06:10 +09:00
Vít Ondruch 28f7a46f44 [rubygems/rubygems] Provide more insightful test error output
Original output:

~~~
Failure: test_realworld_upgraded_default_gem(TestGemRequire): <false> is not true.
/mnt/test/rubygems/test_require.rb:474:in `test_realworld_upgraded_default_gem'
     471:     File.write(path, code)
     472:
     473:     output = Gem::Util.popen({ "GEM_HOME" => @gemhome }, *ruby_with_rubygems_in_load_path, path).strip
  => 474:     assert $?.success?
     475:     refute_empty output
     476:     assert_equal "999.99.9", output.lines[0].chomp
     477:     # Make sure only files from the newer json gem are loaded, and no files from the default json gem
~~~

New output:

~~~
Failure: test_realworld_upgraded_default_gem(TestGemRequire)
/mnt/test/rubygems/test_require.rb:475:in `test_realworld_upgraded_default_gem'
     472:
     473:     output = Gem::Util.popen({ "GEM_HOME" => @gemhome }, *ruby_with_rubygems_in_load_path, path).strip
     474:     refute_empty output
  => 475:     assert_equal "999.99.9", output.lines[0].chomp
     476:     # Make sure only files from the newer json gem are loaded, and no files from the default json gem
     477:     assert_equal ["#{@gemhome}/gems/json-999.99.9/lib/json.rb"], output.lines.grep(%r{/gems/json-}).map(&:chomp)
     478:     assert $?.success?
<"999.99.9"> expected but was
<"/mnt/tmp/test_rubygems_20231110-36663-of405r/test_realworld_upgraded_default_gem.rb:3:in `<main>': undefined method `version' for nil:NilClass (NoMethodError)">

diff:
? 999                                                                             .99.9
? /mnt/tmp/test_rubygems_20231110-36663-of405r/test_realworld_upgraded_default_gem rb:3:in `<main>': undefined method `version' for nil:NilClass (NoMethodError)
? ??? ????
~~~

It is more valuable to check the command output then the error code. If
the command fails for some reason, the output probably contains some
detail, while checking the return code tells not much.

https://github.com/rubygems/rubygems/commit/b76062e852
2023-11-13 11:06:10 +09:00
David Rodríguez 5bdbe242b3 [rubygems/rubygems] Add a warning in an edge case of using `gemspec` DSL
If a Gemfile duplicates a development dependency also defined in a local
gemspec with a different requirement, the requirement in the local
gemspec will be silently ignored.

This surprised me.

I think we should either:

* Make sure both requirements are considered, like it happens for
  runtime dependencies (I added a spec to illustrate the current behavior
  here).

* Add a warning that the requirement in the gemspec will be ignored.

I think the former is slightly preferable, but it may cause some
bundle's that previously resolve to no longer resolver.

I went with the latter but the more I think about it, the more this
seems like it should behave like the former.

https://github.com/rubygems/rubygems/commit/ad6843972f
2023-11-13 11:06:10 +09:00
David Rodríguez e2d7e53c5c [rubygems/rubygems] This can be frozen now
https://github.com/rubygems/rubygems/commit/d06544add2
2023-11-13 11:06:10 +09:00
David Rodríguez 3757d9027c [rubygems/rubygems] Remove now unnecessary dups
https://github.com/rubygems/rubygems/commit/56ce2a6445
2023-11-13 11:06:10 +09:00
David Rodríguez e6c84d05d0 [rubygems/rubygems] Remove now unnecessary dup
https://github.com/rubygems/rubygems/commit/3c1a6a7dfa
2023-11-13 11:06:10 +09:00
David Rodríguez c7bf511cbf [rubygems/rubygems] Add a note about `required_rubygems_version` in Bundler
https://github.com/rubygems/rubygems/commit/9509d98b5c
2023-11-13 11:06:10 +09:00
David Rodríguez a4d80eee17 [rubygems/rubygems] Let RuboCop target Ruby 3.0
https://github.com/rubygems/rubygems/commit/70243b1d72
2023-11-13 11:06:10 +09:00
David Rodríguez 50482cd1e5 [rubygems/rubygems] Drop support for Ruby 2.6 and Ruby 2.7 in Bundler
https://github.com/rubygems/rubygems/commit/93619c97ff
2023-11-13 11:06:10 +09:00
David Rodríguez 54511303a4 [rubygems/rubygems] Drop support for Ruby 2.6 and Ruby 2.7 in RubyGems
https://github.com/rubygems/rubygems/commit/10c26a483d
2023-11-13 11:06:10 +09:00
David Rodríguez 435eb56f61 [rubygems/rubygems] Automatically lock extra ruby platforms
Since we started locking the specific platform in the lockfile, that has
created an annoying situation for users that don't develop on Linux.
They will create a lockfile on their machines, locking their local
platform, for example, darwin. But then that lockfile won't work
automatically when deploying to Heroku for example, because the lockfile
is frozen and the Linux platform is not included.

There's the chance though that resolving against two platforms (Linux +
the local platform) won't succeed while resolving for just the current
platform will. So, instead, we check other platform specific variants
available for the resolution we initially found, and lock those
platforms and specs too if they satisfy the resolution.

This is only done when generating new lockfiles from scratch, existing
lockfiles should keep working as before, and it's only done for "ruby
platforms", i.e., not Java or Windows which have their own complexities,
and so are excluded.

With this change, we expect that MacOS users can bundle locally and
deploy to Heroku without needing to do anything special.

https://github.com/rubygems/rubygems/commit/5f24f06bc5
2023-11-13 11:06:10 +09:00
David Rodriguez 59b361aaca [rubygems/rubygems] Refactor platform test helpers
https://github.com/rubygems/rubygems/commit/7ab4c203f9
2023-11-13 11:06:10 +09:00
David Rodríguez f273132bc0 [rubygems/rubygems] Extract builder to create a `LazySpecification` from full spec
https://github.com/rubygems/rubygems/commit/957d3d9a7f
2023-11-13 11:06:10 +09:00
David Rodríguez 58b0a67432 [rubygems/rubygems] Extract a new small platform helper
https://github.com/rubygems/rubygems/commit/8f7340df8e
2023-11-13 11:06:10 +09:00
David Rodríguez bd6aaa78c3 [rubygems/rubygems] Remove unused `SpecSet#merge`
https://github.com/rubygems/rubygems/commit/53e0490b55
2023-11-13 11:06:10 +09:00
David Rodríguez 196d1bf56e [rubygems/rubygems] Pass source to `LazySpecification` initializer
https://github.com/rubygems/rubygems/commit/05120e2fe8
2023-11-13 11:06:10 +09:00
David Rodríguez 636b70d2a6 [rubygems/rubygems] Allow setting metadata on LazySpecification
This is a step forward towards eventually including metadata in the
lockfile.

https://github.com/rubygems/rubygems/commit/56fc02b251
2023-11-13 11:06:10 +09:00
David Rodríguez ea7cde64fb [rubygems/rubygems] Set LazySpecification dependencies directly
https://github.com/rubygems/rubygems/commit/2462c8e04d
2023-11-13 11:06:10 +09:00
Vít Ondruch 43b8b88751 [rubygems/rubygems] Report possible error prior checking output of gem uninstall
Originally, the failed test case reported following error:

~~~
Failure: test_gem_exec_gem_uninstall(TestGemCommandsExecCommand):
  <""> was expected to include
  <"Successfully uninstalled a-2\n">.
/mnt/test/rubygems/test_gem_commands_exec_command.rb:742:in `block in test_gem_exec_gem_uninstall'
     739:
     740:       # assert_empty @ui.error
     741:       refute_includes @ui.output, "running gem exec with"
  => 742:       assert_includes @ui.output, "Successfully uninstalled a-2\n"
     743:
     744:       invoke "--verbose", "gem", "uninstall", "b"
     745:       assert_includes @ui.output, "Successfully uninstalled b-2\n"
/mnt/lib/rubygems/user_interaction.rb:46:in `use_ui'
/mnt/lib/rubygems/user_interaction.rb:69:in `use_ui'
/mnt/test/rubygems/test_gem_commands_exec_command.rb:726:in `test_gem_exec_gem_uninstall'
~~~

This does not tell much. Empty string is more often good sign, but not
in this case. However, checking error output first helps with
understanding possible issue:

~~~
Failure: test_gem_exec_gem_uninstall(TestGemCommandsExecCommand):
  <"ERROR:  While executing gem ... (Gem::FilePermissionError)\n" +
  "    You don't have write permissions for the /builddir/bin directory.\n" +
  "\t/mnt/lib/rubygems/uninstaller.rb:213:in `remove_executables'\n" +

... snip ...

/mnt/test/rubygems/test_gem_commands_exec_command.rb:740:in `block in test_gem_exec_gem_uninstall'
     737:         nil
     738:       end
     739:
  => 740:       assert_empty @ui.error
     741:       refute_includes @ui.output, "running gem exec with"
     742:       assert_includes @ui.output, "Successfully uninstalled a-2\n"
     743:
/mnt/lib/rubygems/user_interaction.rb:46:in `use_ui'
/mnt/lib/rubygems/user_interaction.rb:69:in `use_ui'
/mnt/test/rubygems/test_gem_commands_exec_command.rb:726:in `test_gem_exec_gem_uninstall'
~~~

BTW this issue is caused by operating_system.rb overriding
`Gem.operating_system_defaults` method and explicitly adding `--bindir`
option.

https://github.com/rubygems/rubygems/commit/d98e36bbe7
2023-11-13 11:06:10 +09:00
KJ Tsanaktsidis 9a62fd3cba Fix crash caused by concurrent ObjectSpace.dump_all calls
Since the callback defined in the objspace module might give up the GVL,
we need to make sure the right cr->mfd value is set back after the GVL
is re-obtained.
2023-11-12 17:50:37 +01:00
KJ Tsanaktsidis 76dc327eef Wrap rb_objspace_reachable_objects_from_root with RB_VM_LOCK
rb_objspace_reachable_objects_from has it too, so I figure it's most
likely required for _from_root as well.
2023-11-12 17:50:37 +01:00
Nobuyoshi Nakada 60e19a0b5f
Just check if iteration level is non-zero
The level in ivar is no longer needed to check if iterating, only used
for increment/decrement.
2023-11-12 13:51:16 +09:00
Nobuyoshi Nakada 9ab64b1d70
Refactor hash iteration level
- Make it unsigned like as in-flags bits
- Make it long since it should be fixable
- Reduce it to in-flags bits after decrement
2023-11-12 13:51:15 +09:00
Kevin Newton 94f82a65f7 [ruby/prism] Add the ability to convert nodes to dot
https://github.com/ruby/prism/commit/3e4b4fb947
2023-11-12 02:53:33 +00:00
TSUYUSATO Kitsune 2fb1d37439 [ruby/prism] Reject invalid rational literals like `1e1r` on lexing
Fix https://github.com/ruby/prism/pull/1586

https://github.com/ruby/prism/commit/b3bde866f2
2023-11-12 02:34:02 +00:00
Marco Roth e6916f1305 [ruby/prism] Implement JavaScript visitors
https://github.com/ruby/prism/commit/ea00a1b3c6
2023-11-11 22:01:06 +00:00
TSUYUSATO Kitsune cd91e8e73a [ruby/prism] Introduce non-associativility to `in` and `=>`
Fix https://github.com/ruby/prism/pull/1596
Fix https://github.com/ruby/prism/pull/1771
Close https://github.com/ruby/prism/pull/1773

https://github.com/ruby/prism/commit/a3413e5605
2023-11-11 20:37:28 +00:00
Nobuyoshi Nakada 64f03460ba
[DOC] Update comment for `DECIMAL_SIZE_OF_BITS` 2023-11-11 19:26:13 +09:00
Nobuyoshi Nakada 9eac9d7178
[Bug #19969] Compact st_table after deleted if possible 2023-11-11 18:49:19 +09:00
Nobuyoshi Nakada 2a442121d1
Stabilize outer variable list
Sort outer variables by names to make dumped binary data stable.
2023-11-11 16:58:14 +09:00
Nobuyoshi Nakada 1fe2bc4b22
RCLASS_EXT is never NULL now 2023-11-11 15:57:44 +09:00
Alan Wu 277a3ecbf5 [DOC] RubyVM::YJIT doc improvements
* Weaken notice about API stability. A few public APIs in here now.
* Prune out APIs from the docs that are private in nature
* Enable markdown mode and ensure `--` options are quoted so they are
  rendered as two dashes in the HTML.
2023-11-10 19:08:13 -05:00
Alan Wu cdaca574ce [DOC] NEWS.md update about code GC
See <https://github.com/ruby/ruby/pull/8865> and
50402db5a7
2023-11-10 19:08:05 -05:00
Alan Wu f5fa90fe0b YJIT: Fix `clippy::useless_vec` in a test 2023-11-10 16:55:56 -05:00
Alan Wu 8dfbfa15f6 YJIT: Take cargo --fix for unnecessary calls to into() 2023-11-10 16:55:56 -05:00
Alan Wu 408d5886cf YJIT: Auto fix for clippy::unnecessary_cast 2023-11-10 16:55:56 -05:00