sorbet-runtime 0.6.13621 → 0.6.13629
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 +4 -4
- data/lib/types/private/methods/signature.rb +40 -7
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 8e3cf79d8e393326c2dabc56a8d2bcc8065850fa7dcdd2a8cd3be348415ae606
|
|
4
|
+
data.tar.gz: a03250782d9b3658d1deebfe8f57c45aaf244a2bf7747eb471467e3cb608e4d2
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b0d3f2382f34feff42d420bbcd61ab049bf513878cbb9e775d0de0397ddb5ac2f6d9f19c52ad9a94c386018d13718e7911e139009facc426814635170dc38319
|
|
7
|
+
data.tar.gz: 26c433f90715400ad97aff7f231d9051f269d9bce5ff6e51561a9ecce432ab7c8c64aa353d0d244462fbbefdd6d23fa357549839122854cf39b2d9edf49a0d2d
|
|
@@ -7,9 +7,22 @@
|
|
|
7
7
|
class T::Private::Methods::Signature
|
|
8
8
|
attr_reader :method, :method_name, :arg_types, :kwarg_types, :block_type,
|
|
9
9
|
:rest_type, :keyrest_type, :bind, :effective_return_type,
|
|
10
|
-
:return_type, :
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
:return_type, :req_arg_count, :req_kwarg_names, :parameters, :on_failure
|
|
11
|
+
|
|
12
|
+
# @flags packs, from the low bits up: mode (3 bits), check_level (2 bits),
|
|
13
|
+
# override_allow_incompatible (2 bits), and defined_raw (1 bit).
|
|
14
|
+
FLAG_MODES = T::Private::Methods::Modes::MODES
|
|
15
|
+
FLAG_CHECK_LEVELS = T::Private::RuntimeLevels::LEVELS
|
|
16
|
+
FLAG_ALLOW_INCOMPATIBLE = [false, true, :visibility].freeze
|
|
17
|
+
MODE_MASK = 0b111
|
|
18
|
+
CHECK_LEVEL_SHIFT = 3
|
|
19
|
+
CHECK_LEVEL_MASK = 0b11
|
|
20
|
+
ALLOW_INCOMPATIBLE_SHIFT = 5
|
|
21
|
+
ALLOW_INCOMPATIBLE_MASK = 0b11
|
|
22
|
+
DEFINED_RAW_BIT = 1 << 7
|
|
23
|
+
private_constant :FLAG_MODES, :FLAG_CHECK_LEVELS, :FLAG_ALLOW_INCOMPATIBLE, :MODE_MASK,
|
|
24
|
+
:CHECK_LEVEL_SHIFT, :CHECK_LEVEL_MASK, :ALLOW_INCOMPATIBLE_SHIFT,
|
|
25
|
+
:ALLOW_INCOMPATIBLE_MASK, :DEFINED_RAW_BIT
|
|
13
26
|
|
|
14
27
|
# T.unsafe: `UnboundMethod#parameters` lies and says `T::Array[[Symbol, Symbol]]`.
|
|
15
28
|
# Sorbet can't lub tuple types, meaning that `T.any([Symbol], [Symbol,
|
|
@@ -59,12 +72,12 @@ class T::Private::Methods::Signature
|
|
|
59
72
|
@return_type
|
|
60
73
|
end
|
|
61
74
|
@bind = NilClass.===(bind) ? bind : T::Utils.coerce(bind)
|
|
62
|
-
@mode = mode
|
|
63
|
-
@check_level = check_level
|
|
64
75
|
@parameters = parameters
|
|
65
76
|
@on_failure = on_failure
|
|
66
|
-
@
|
|
67
|
-
|
|
77
|
+
@flags = flag_index(FLAG_MODES, mode, 'mode') |
|
|
78
|
+
(flag_index(FLAG_CHECK_LEVELS, check_level, 'check_level') << CHECK_LEVEL_SHIFT) |
|
|
79
|
+
(flag_index(FLAG_ALLOW_INCOMPATIBLE, override_allow_incompatible, 'override_allow_incompatible') << ALLOW_INCOMPATIBLE_SHIFT) |
|
|
80
|
+
(defined_raw ? DEFINED_RAW_BIT : 0)
|
|
68
81
|
|
|
69
82
|
# Use T.untyped in lieu of T.nilable to try to avoid unnecessary allocations.
|
|
70
83
|
arg_types = nil
|
|
@@ -187,6 +200,22 @@ class T::Private::Methods::Signature
|
|
|
187
200
|
parameter_name(:keyrest)
|
|
188
201
|
end
|
|
189
202
|
|
|
203
|
+
def mode
|
|
204
|
+
FLAG_MODES.fetch(@flags & MODE_MASK)
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
def check_level
|
|
208
|
+
FLAG_CHECK_LEVELS.fetch((@flags >> CHECK_LEVEL_SHIFT) & CHECK_LEVEL_MASK)
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
def override_allow_incompatible
|
|
212
|
+
FLAG_ALLOW_INCOMPATIBLE.fetch((@flags >> ALLOW_INCOMPATIBLE_SHIFT) & ALLOW_INCOMPATIBLE_MASK)
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
def defined_raw
|
|
216
|
+
@flags.anybits?(DEFINED_RAW_BIT)
|
|
217
|
+
end
|
|
218
|
+
|
|
190
219
|
def arg_count
|
|
191
220
|
@arg_types.length
|
|
192
221
|
end
|
|
@@ -291,6 +320,10 @@ class T::Private::Methods::Signature
|
|
|
291
320
|
@parameters.assoc(kind)&.[](1)
|
|
292
321
|
end
|
|
293
322
|
|
|
323
|
+
private def flag_index(values, value, field)
|
|
324
|
+
values.index(value) || raise(ArgumentError.new("Invalid #{field} for `#{@method_name}`: #{value.inspect}"))
|
|
325
|
+
end
|
|
326
|
+
|
|
294
327
|
EMPTY_LIST = [].freeze
|
|
295
328
|
EMPTY_HASH = {}.freeze
|
|
296
329
|
end
|