sorbet-runtime 0.5.10754 → 0.5.10761

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dc0224a19fc63681cdbed701daa40eb3b016bac0501b8a44b4a2e870b5b509de
4
- data.tar.gz: f42356ede5a9c0eaff0ee1368c8e0a53dfd67f6b7e5bebe3cb5ad3102a4235f9
3
+ metadata.gz: 02d76dec776e380eb4d869a9026a957c62c23bdf337f6b9b5d64e4cda2f65631
4
+ data.tar.gz: 687cf5d4b5f5eddd55570f480e7a798349d48d1eea5b8a00fa1d630af60a7d9a
5
5
  SHA512:
6
- metadata.gz: b1be1d05220309651fcc3ae369ff0398325616d8876597b5cfb9bf229bc678eab276bccf7898d6bef8512b1dbeca2d08fbb4ee245e08e61387bcfec4b42c93bf
7
- data.tar.gz: e3b262f59f6c380febd7103d2c881f4fc606135038ee00b348bd313faf60217b8eac8e357bcbb97753ce7c63ae4550eeab53e5b424bed2dbc609d76b432387c7
6
+ metadata.gz: eb43f6f94999b2fac97438701e7d7ca57b49bb443db7677d45e66738be65d45fe947973bb7a9d4f204db63efab60b7d873998c0685755473277c95f25eabace5
7
+ data.tar.gz: 4b1c2efb53beb2d4d1fabe43ff8242d2bdf24b6b5d192db643f7caee193ab99da34c8d8ad70dc61b6444b80743f7f5cd75ac66832a253f89fb3a4755d2dffc21
@@ -43,7 +43,6 @@ require_relative 'types/types/self_type'
43
43
  require_relative 'types/types/simple'
44
44
  require_relative 'types/types/t_enum'
45
45
  require_relative 'types/types/type_parameter'
46
- require_relative 'types/types/typed_array'
47
46
  require_relative 'types/types/typed_enumerator'
48
47
  require_relative 'types/types/typed_enumerator_chain'
49
48
  require_relative 'types/types/typed_enumerator_lazy'
@@ -83,6 +82,9 @@ require_relative 'types/private/retry'
83
82
  require_relative 'types/utils'
84
83
  require_relative 'types/boolean'
85
84
 
85
+ # Depends on types/utils
86
+ require_relative 'types/types/typed_array'
87
+
86
88
  # Props dependencies
87
89
  require_relative 'types/private/abstract/data'
88
90
  require_relative 'types/private/mixins/mixins'
data/lib/types/_types.rb CHANGED
@@ -279,9 +279,9 @@ module T
279
279
  module Array
280
280
  def self.[](type)
281
281
  if type.is_a?(T::Types::Untyped)
282
- T::Types::TypedArray::Untyped.new
282
+ T::Types::TypedArray::Untyped::Private::INSTANCE
283
283
  else
284
- T::Types::TypedArray.new(type)
284
+ T::Types::TypedArray::Private::Pool.type_for_module(type)
285
285
  end
286
286
  end
287
287
  end
@@ -79,7 +79,7 @@ module T::Private::Methods
79
79
  raise BuilderError.new("You can't call .void after calling .returns.")
80
80
  end
81
81
 
82
- decl.returns = T::Private::Types::Void.new
82
+ decl.returns = T::Private::Types::Void::Private::INSTANCE
83
83
 
84
84
  self
85
85
  end
@@ -3,32 +3,38 @@
3
3
 
4
4
  # A marking class for when methods return void.
5
5
  # Should never appear in types directly.
6
- class T::Private::Types::Void < T::Types::Base
7
- ERROR_MESSAGE = "Validation is being done on an `Void`. Please report this bug at https://github.com/sorbet/sorbet/issues"
6
+ module T::Private::Types
7
+ class Void < T::Types::Base
8
+ ERROR_MESSAGE = "Validation is being done on an `Void`. Please report this bug at https://github.com/sorbet/sorbet/issues"
8
9
 
9
- # The actual return value of `.void` methods.
10
- #
11
- # Uses `module VOID` because this gives it a readable name when someone
12
- # examines it in Pry or with `#inspect` like:
13
- #
14
- # T::Private::Types::Void::VOID
15
- #
16
- module VOID
17
- freeze
18
- end
10
+ # The actual return value of `.void` methods.
11
+ #
12
+ # Uses `module VOID` because this gives it a readable name when someone
13
+ # examines it in Pry or with `#inspect` like:
14
+ #
15
+ # T::Private::Types::Void::VOID
16
+ #
17
+ module VOID
18
+ freeze
19
+ end
19
20
 
20
- # overrides Base
21
- def name
22
- "<VOID>"
23
- end
21
+ # overrides Base
22
+ def name
23
+ "<VOID>"
24
+ end
24
25
 
25
- # overrides Base
26
- def valid?(obj)
27
- raise ERROR_MESSAGE
28
- end
26
+ # overrides Base
27
+ def valid?(obj)
28
+ raise ERROR_MESSAGE
29
+ end
30
+
31
+ # overrides Base
32
+ private def subtype_of_single?(other)
33
+ raise ERROR_MESSAGE
34
+ end
29
35
 
30
- # overrides Base
31
- private def subtype_of_single?(other)
32
- raise ERROR_MESSAGE
36
+ module Private
37
+ INSTANCE = Void.new.freeze
38
+ end
33
39
  end
34
40
  end
@@ -60,6 +60,13 @@ module T::Types
60
60
 
61
61
  module Private
62
62
  module Pool
63
+ CACHE_FROZEN_OBJECTS = begin
64
+ ObjectSpace::WeakMap.new[1] = 1
65
+ true # Ruby 2.7 and newer
66
+ rescue ArgumentError # Ruby 2.6 and older
67
+ false
68
+ end
69
+
63
70
  @cache = ObjectSpace::WeakMap.new
64
71
 
65
72
  def self.type_for_module(mod)
@@ -83,12 +90,14 @@ module T::Types
83
90
  end
84
91
 
85
92
  # Unfortunately, we still need to check if the module is frozen,
86
- # since WeakMap adds a finalizer to the key that is added
93
+ # since on 2.6 and older WeakMap adds a finalizer to the key that is added
87
94
  # to the map, so that it can clear the map entry when the key is
88
95
  # garbage collected.
89
96
  # For a frozen object, though, adding a finalizer is not a valid
90
97
  # operation, so this still raises if `mod` is frozen.
91
- @cache[mod] = type unless mod.frozen?
98
+ if CACHE_FROZEN_OBJECTS || (!mod.frozen? && !type.frozen?)
99
+ @cache[mod] = type
100
+ end
92
101
  type
93
102
  end
94
103
  end
@@ -26,6 +26,31 @@ module T::Types
26
26
  Array.new(*T.unsafe(args))
27
27
  end
28
28
 
29
+ module Private
30
+ module Pool
31
+ CACHE_FROZEN_OBJECTS = begin
32
+ ObjectSpace::WeakMap.new[1] = 1
33
+ true # Ruby 2.7 and newer
34
+ rescue ArgumentError # Ruby 2.6 and older
35
+ false
36
+ end
37
+
38
+ @cache = ObjectSpace::WeakMap.new
39
+
40
+ def self.type_for_module(mod)
41
+ cached = @cache[mod]
42
+ return cached if cached
43
+
44
+ type = TypedArray.new(mod)
45
+
46
+ if CACHE_FROZEN_OBJECTS || (!mod.frozen? && !type.frozen?)
47
+ @cache[mod] = type
48
+ end
49
+ type
50
+ end
51
+ end
52
+ end
53
+
29
54
  class Untyped < TypedArray
30
55
  def initialize
31
56
  super(T.untyped)
@@ -34,6 +59,10 @@ module T::Types
34
59
  def valid?(obj)
35
60
  obj.is_a?(Array)
36
61
  end
62
+
63
+ module Private
64
+ INSTANCE = Untyped.new.freeze
65
+ end
37
66
  end
38
67
  end
39
68
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sorbet-runtime
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.10754
4
+ version: 0.5.10761
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stripe
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-04-07 00:00:00.000000000 Z
11
+ date: 2023-04-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest