[rubygems/rubygems] Reduce array allocations when loading definition

The same array was being re-created in a loop (as well as the `generic_local_platform`), which is avoidable by hoisting it to a frozen array created once

https://github.com/rubygems/rubygems/commit/009a3c6d0d
This commit is contained in:
Samuel Giddins 2023-11-27 16:06:27 -06:00 коммит произвёл git
Родитель a607d62d8c
Коммит 0ed55bf097
2 изменённых файлов: 14 добавлений и 4 удалений

Просмотреть файл

@ -245,8 +245,9 @@ module Bundler
end
def filter_relevant(dependencies)
platforms_array = [generic_local_platform].freeze
dependencies.select do |d|
d.should_include? && !d.gem_platforms([generic_local_platform]).empty?
d.should_include? && !d.gem_platforms(platforms_array).empty?
end
end
@ -270,9 +271,15 @@ module Bundler
def dependencies_for(groups)
groups.map!(&:to_sym)
current_dependencies.reject do |d|
(d.groups & groups).empty?
deps = current_dependencies # always returns a new array
deps.select! do |d|
if RUBY_VERSION >= "3.1"
d.groups.intersect?(groups)
else
!(d.groups & groups).empty?
end
end
deps
end
# Resolve all the dependencies specified in Gemfile. It ensures that

Просмотреть файл

@ -48,10 +48,13 @@ module Bundler
@autorequire = Array(options["require"] || []) if options.key?("require")
end
RUBY_PLATFORM_ARRAY = [Gem::Platform::RUBY].freeze
private_constant :RUBY_PLATFORM_ARRAY
# Returns the platforms this dependency is valid for, in the same order as
# passed in the `valid_platforms` parameter
def gem_platforms(valid_platforms)
return [Gem::Platform::RUBY] if force_ruby_platform
return RUBY_PLATFORM_ARRAY if force_ruby_platform
return valid_platforms if @platforms.empty?
valid_platforms.select {|p| expanded_platforms.include?(GemHelpers.generic(p)) }