sorbet-runtime 0.5.6389 → 0.5.6391

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: 0e3d0d5bfc5dcb1ca384ecbf66158041b7c083efd63b35de6bc2e17c0eeae517
4
- data.tar.gz: 47dd020b8985f5cd5338d4287a3e26f89542428a85bd9bef6f818310dc308c46
3
+ metadata.gz: 5a81243179b6a7b33dc911b45394c4d509a3ca58f5400e9fef69745629504b94
4
+ data.tar.gz: 4106d81a66aeed8dc5bf06ab6266140dd3f7dc5cd00803b4b2532acb8da1114e
5
5
  SHA512:
6
- metadata.gz: e8d88ddb272c2823fdd9d9f3e90d9cad2d488cd7a782a919097be4e9fdf2debf0d267c20db241bb67eb074425d9195afc87f8d130913a3addccd6877c881d242
7
- data.tar.gz: cafe196e1d9d6097392c2b0d9dc19514b59e572a388ff51b0982f965018a400bce734e777b929193c3f3ff2ea9cdf038ef63b30c8fbfc3a8796e54b1ba8ad828
6
+ metadata.gz: d7ce14e14087c651d5de7ebb98cb0752e0a5f42c65fedef67c0088be0bf097f33126985c9eb0ebf52b9b24f3f8db73b88fd18a9c6ad6a4ebc4df338ff3eff7bb
7
+ data.tar.gz: 4ef0b7e7f4f5fab289e8f40ac9c91e91c2e856ecc6bb9352bc6864fcb3e4a81c6b1a01b2c7f917eb9e43916e0fc27ff836bd40a9af813310777e9a359633f44f
@@ -73,6 +73,27 @@ module T::Configuration
73
73
  @include_value_in_type_errors = true
74
74
  end
75
75
 
76
+ # Whether to use VM-defined prop serialization/deserialization routines.
77
+ #
78
+ # The default is to use runtime codegen inside sorbet-runtime itself.
79
+ #
80
+ # @return [T::Boolean]
81
+ def self.use_vm_prop_serde?
82
+ @use_vm_prop_serde || false
83
+ end
84
+
85
+ # Enable using VM-defined prop serialization/deserialization routines.
86
+ #
87
+ # This method is likely to break things outside of Stripe's systems.
88
+ def self.enable_vm_prop_serde
89
+ @use_vm_prop_serde = true
90
+ end
91
+
92
+ # Disable using VM-defined prop serialization/deserialization routines.
93
+ def self.disable_vm_prop_serde
94
+ @use_vm_prop_serde = false
95
+ end
96
+
76
97
  # Configure the default checked level for a sig with no explicit `.checked`
77
98
  # builder. When unset, the default checked level is `:always`.
78
99
  #
@@ -48,6 +48,11 @@ module T::Props
48
48
  @lazily_defined_methods ||= {}
49
49
  end
50
50
 
51
+ sig {returns(T::Hash[Symbol, T.untyped]).checked(:never)}
52
+ private def lazily_defined_vm_methods
53
+ @lazily_defined_vm_methods ||= {}
54
+ end
55
+
51
56
  sig {params(name: Symbol).void}
52
57
  private def eval_lazily_defined_method!(name)
53
58
  if !HasLazilySpecializedMethods.lazy_evaluation_enabled?
@@ -61,6 +66,18 @@ module T::Props
61
66
  cls.send(:private, name)
62
67
  end
63
68
 
69
+ sig {params(name: Symbol).void}
70
+ private def eval_lazily_defined_vm_method!(name)
71
+ if !HasLazilySpecializedMethods.lazy_evaluation_enabled?
72
+ raise SourceEvaluationDisabled.new
73
+ end
74
+
75
+ lazily_defined_vm_methods.fetch(name).call
76
+
77
+ cls = decorated_class
78
+ cls.send(:private, name)
79
+ end
80
+
64
81
  sig {params(name: Symbol, blk: T.proc.returns(String)).void}
65
82
  private def enqueue_lazy_method_definition!(name, &blk)
66
83
  lazily_defined_methods[name] = blk
@@ -76,6 +93,21 @@ module T::Props
76
93
  cls.send(:private, name)
77
94
  end
78
95
 
96
+ sig {params(name: Symbol, blk: T.untyped).void}
97
+ private def enqueue_lazy_vm_method_definition!(name, &blk)
98
+ lazily_defined_vm_methods[name] = blk
99
+
100
+ cls = decorated_class
101
+ cls.send(:define_method, name) do |*args|
102
+ self.class.decorator.send(:eval_lazily_defined_vm_method!, name)
103
+ send(name, *args)
104
+ end
105
+ if cls.respond_to?(:ruby2_keywords, true)
106
+ cls.send(:ruby2_keywords, name)
107
+ end
108
+ cls.send(:private, name)
109
+ end
110
+
79
111
  sig {void}
80
112
  def eagerly_define_lazy_methods!
81
113
  return if lazily_defined_methods.empty?
@@ -87,6 +119,17 @@ module T::Props
87
119
  lazily_defined_methods.each_key {|name| cls.send(:private, name)}
88
120
  lazily_defined_methods.clear
89
121
  end
122
+
123
+ sig {void}
124
+ def eagerly_define_lazy_vm_methods!
125
+ return if lazily_defined_vm_methods.empty?
126
+
127
+ lazily_defined_vm_methods.values.map(&:call)
128
+
129
+ cls = decorated_class
130
+ lazily_defined_vm_methods.each_key {|name| cls.send(:private, name)}
131
+ lazily_defined_vm_methods.clear
132
+ end
90
133
  end
91
134
  end
92
135
  end
@@ -214,8 +214,13 @@ module T::Props::Serializable::DecoratorMethods
214
214
  rules[:serialized_form] = rules.fetch(:name, prop.to_s)
215
215
  res = super
216
216
  prop_by_serialized_forms[rules[:serialized_form]] = prop
217
- enqueue_lazy_method_definition!(:__t_props_generated_serialize) {generate_serialize_source}
218
- enqueue_lazy_method_definition!(:__t_props_generated_deserialize) {generate_deserialize_source}
217
+ if T::Configuration.use_vm_prop_serde?
218
+ enqueue_lazy_vm_method_definition!(:__t_props_generated_serialize) {generate_serialize2}
219
+ enqueue_lazy_vm_method_definition!(:__t_props_generated_deserialize) {generate_deserialize2}
220
+ else
221
+ enqueue_lazy_method_definition!(:__t_props_generated_serialize) {generate_serialize_source}
222
+ enqueue_lazy_method_definition!(:__t_props_generated_deserialize) {generate_deserialize_source}
223
+ end
219
224
  res
220
225
  end
221
226
 
@@ -230,6 +235,18 @@ module T::Props::Serializable::DecoratorMethods
230
235
  )
231
236
  end
232
237
 
238
+ private def generate_serialize2
239
+ T::Props::Private::SerializerGenerator.generate2(decorated_class, props)
240
+ end
241
+
242
+ private def generate_deserialize2
243
+ T::Props::Private::DeserializerGenerator.generate2(
244
+ decorated_class,
245
+ props,
246
+ props_with_defaults || {},
247
+ )
248
+ end
249
+
233
250
  def message_with_generated_source_context(error, generated_method, generate_source_method)
234
251
  line_label = error.backtrace.find {|l| l.end_with?("in `#{generated_method}'")}
235
252
  return unless line_label
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.6389
4
+ version: 0.5.6391
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stripe
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-04-25 00:00:00.000000000 Z
11
+ date: 2021-04-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest