sorbet-runtime 0.5.10754 → 0.5.10761

Sign up to get free protection for your applications and to get access to all the features.
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