typeprof 0.12.0 → 0.13.0

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: 239b17dbe8d61c729346c5dde966f6abff491951c88bc33c57c4c34cc99dc497
4
- data.tar.gz: 2696c83796a6af5c498cca59a3d98b7faccaf187fe60c0057ac3f052622009ff
3
+ metadata.gz: 501623610b473ab2fdd870686387a26ae787b8e3af6254a7a443967acb0b9f17
4
+ data.tar.gz: 0ace065239fb606719b1a716c7ce38e312c3b1b07f238d3f1a67e66eaf261567
5
5
  SHA512:
6
- metadata.gz: 23a7a3313dadd2d0c63a5d83a3afd112893134a049861e6a9e11cf5097aaa78c19494326b6a07b44cf4d93f5dec5a2c893b91fe2c4f5571726229d1e8dc13229
7
- data.tar.gz: 3273f1bb24290af32db23aaae8cafa84905d4d2d576b5ab96178130fe843b73e4365827b60d47a022a2812621f7fe09a3801c32c205c9805516873ed9ac88659
6
+ metadata.gz: b5b437508d0b83d3966a07266cebef3aa64e98ef4b33e75cd9deb5a615019fdb054f00ffb433d2af573258192bfd7346845dc870db32540b928314999c8e818c
7
+ data.tar.gz: 2aaa6b88e7d41676d989b3ac01057af13cf7247569e68b9be57b919e210afa140d016e3d27522fa8f03362fa17a3fb46356d3be1bd770a251c825cb4477334e6
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- typeprof (0.12.0)
4
+ typeprof (0.13.0)
5
5
  rbs (>= 1.0.0)
6
6
 
7
7
  GEM
@@ -42,6 +42,10 @@ module TypeProf
42
42
  "<builtin>"
43
43
  end
44
44
  end
45
+
46
+ def replace_cref(cref)
47
+ Context.new(@iseq, cref, @mid)
48
+ end
45
49
  end
46
50
 
47
51
  class TypedContext
@@ -61,6 +65,10 @@ module TypeProf
61
65
  "<typed-context:#{ @mid }>"
62
66
  end
63
67
  end
68
+
69
+ def replace_cref(cref)
70
+ # What to do?
71
+ end
64
72
  end
65
73
 
66
74
  class ExecutionPoint
@@ -86,6 +94,10 @@ module TypeProf
86
94
  ExecutionPoint.new(@ctx, @pc + 1, @outer)
87
95
  end
88
96
 
97
+ def replace_cref(cref)
98
+ ExecutionPoint.new(@ctx.replace_cref(cref), @pc, @outer)
99
+ end
100
+
89
101
  def source_location
90
102
  @ctx.source_location(@pc)
91
103
  end
@@ -238,6 +250,8 @@ module TypeProf
238
250
  end
239
251
 
240
252
  def initialize
253
+ @entrypoints = []
254
+
241
255
  @worklist = Utils::WorkList.new
242
256
 
243
257
  @ep2env = {}
@@ -272,6 +286,10 @@ module TypeProf
272
286
  @anonymous_struct_gen_id = 0
273
287
  end
274
288
 
289
+ def add_entrypoint(iseq)
290
+ @entrypoints << iseq
291
+ end
292
+
275
293
  attr_reader :return_envs, :loaded_features, :rbs_reader
276
294
 
277
295
  def get_env(ep)
@@ -878,56 +896,68 @@ module TypeProf
878
896
  iter_counter = 0
879
897
  stat_eps = Utils::MutableSet.new
880
898
 
881
- while true
882
- until @worklist.empty?
883
- ep = @worklist.deletemin
884
-
885
- iter_counter += 1
886
- if Config.options[:show_indicator]
887
- tick2 = Time.now
888
- if tick2 - tick >= 1
889
- tick = tick2
890
- $stderr << "\rType Profiling... (%d instructions @ %s)\e[K" % [iter_counter, ep.source_location]
891
- $stderr.flush
899
+ prologue_ctx = Context.new(nil, nil, nil)
900
+ prologue_ep = ExecutionPoint.new(prologue_ctx, -1, nil)
901
+ prologue_env = Env.new(StaticEnv.new(Type.bot, Type.nil, false, true), [], [], Utils::HashWrapper.new({}))
902
+
903
+ until @entrypoints.empty?
904
+ iseq = @entrypoints.shift
905
+ ep, env = TypeProf.starting_state(iseq)
906
+ merge_env(ep, env)
907
+ add_callsite!(ep.ctx, prologue_ep, prologue_env) {|ty, ep| }
908
+
909
+ while true
910
+ until @worklist.empty?
911
+ ep = @worklist.deletemin
912
+
913
+ iter_counter += 1
914
+ if Config.options[:show_indicator]
915
+ tick2 = Time.now
916
+ if tick2 - tick >= 1
917
+ tick = tick2
918
+ $stderr << "\rType Profiling... (%d instructions @ %s)\e[K" % [iter_counter, ep.source_location]
919
+ $stderr.flush
920
+ end
892
921
  end
893
- end
894
922
 
895
- if (Config.max_sec && Time.now - start_time >= Config.max_sec) || (Config.max_iter && Config.max_iter <= iter_counter)
896
- @terminated = true
897
- break
898
- end
923
+ if (Config.max_sec && Time.now - start_time >= Config.max_sec) || (Config.max_iter && Config.max_iter <= iter_counter)
924
+ @terminated = true
925
+ break
926
+ end
899
927
 
900
- stat_eps << ep
901
- step(ep)
902
- end
928
+ stat_eps << ep
929
+ step(ep)
930
+ end
903
931
 
904
- break if @terminated
932
+ break if @terminated
905
933
 
906
- break unless Config.options[:stub_execution]
934
+ break unless Config.options[:stub_execution]
907
935
 
908
- begin
909
- iseq, (kind, dummy_continuation) = @pending_execution.first
910
- break if !iseq
911
- @pending_execution.delete(iseq)
912
- end while @executed_iseqs.include?(iseq)
936
+ begin
937
+ iseq, (kind, dummy_continuation) = @pending_execution.first
938
+ break if !iseq
939
+ @pending_execution.delete(iseq)
940
+ end while @executed_iseqs.include?(iseq)
913
941
 
914
- puts "DEBUG: trigger stub execution (#{ iseq&.name || "(nil)" }): rest #{ @pending_execution.size }" if Config.verbose >= 2
942
+ puts "DEBUG: trigger stub execution (#{ iseq&.name || "(nil)" }): rest #{ @pending_execution.size }" if Config.verbose >= 2
915
943
 
916
- break if !iseq
917
- case kind
918
- when :method
919
- meth, ep, env = dummy_continuation
920
- merge_env(ep, env)
921
- add_iseq_method_call!(meth, ep.ctx)
922
-
923
- when :block
924
- blk, epenvs = dummy_continuation
925
- epenvs.each do |ep, env|
944
+ break if !iseq
945
+ case kind
946
+ when :method
947
+ meth, ep, env = dummy_continuation
926
948
  merge_env(ep, env)
927
- add_block_to_ctx!(blk.block_body, ep.ctx)
949
+ add_iseq_method_call!(meth, ep.ctx)
950
+
951
+ when :block
952
+ blk, epenvs = dummy_continuation
953
+ epenvs.each do |ep, env|
954
+ merge_env(ep, env)
955
+ add_block_to_ctx!(blk.block_body, ep.ctx)
956
+ end
928
957
  end
929
958
  end
930
959
  end
960
+
931
961
  $stderr.print "\r\e[K" if Config.options[:show_indicator]
932
962
 
933
963
  stat_eps
@@ -1245,7 +1275,13 @@ module TypeProf
1245
1275
  end
1246
1276
  if cbase.is_a?(Type::Class)
1247
1277
  klass = new_class(cbase, id, [], superclass, ep.ctx.iseq.absolute_path)
1248
- add_superclass_type_args!(klass, superclass.type_params.map { Type.any }) if superclass
1278
+ if superclass
1279
+ add_superclass_type_args!(klass, superclass.type_params.map { Type.any })
1280
+
1281
+ # inherited hook
1282
+ aargs = ActualArguments.new([klass], nil, {}, Type.nil)
1283
+ do_send(superclass, :inherited, aargs, ep, env) {|_ret_ty, _ep| }
1284
+ end
1249
1285
  else
1250
1286
  klass = Type.any
1251
1287
  end
@@ -2091,10 +2127,10 @@ module TypeProf
2091
2127
  end
2092
2128
  end
2093
2129
 
2094
- def do_invoke_block(blk, aargs, ep, env, replace_recv_ty: nil, &ctn)
2130
+ def do_invoke_block(blk, aargs, ep, env, replace_recv_ty: nil, replace_cref: nil, &ctn)
2095
2131
  blk.each_child do |blk|
2096
2132
  if blk.is_a?(Type::Proc)
2097
- blk.block_body.do_call(aargs, ep, env, self, replace_recv_ty: replace_recv_ty, &ctn)
2133
+ blk.block_body.do_call(aargs, ep, env, self, replace_recv_ty: replace_recv_ty, replace_cref: replace_cref, &ctn)
2098
2134
  else
2099
2135
  warn(ep, "non-proc is passed as a block")
2100
2136
  ctn[Type.any, ep, env]
@@ -27,7 +27,7 @@ module TypeProf
27
27
  self
28
28
  end
29
29
 
30
- def do_call(aargs, caller_ep, caller_env, scratch, replace_recv_ty:, &ctn)
30
+ def do_call(aargs, caller_ep, caller_env, scratch, replace_recv_ty:, replace_cref:, &ctn)
31
31
  blk_env = scratch.return_envs[@outer_ep]
32
32
  if replace_recv_ty
33
33
  replace_recv_ty = scratch.globalize_type(replace_recv_ty, caller_env, caller_ep)
@@ -46,7 +46,8 @@ module TypeProf
46
46
  return
47
47
  end
48
48
 
49
- nctx = Context.new(@iseq, @outer_ep.ctx.cref, nil)
49
+ cref = replace_cref || @outer_ep.ctx.cref
50
+ nctx = Context.new(@iseq, cref, nil)
50
51
  callee_ep = ExecutionPoint.new(nctx, 0, @outer_ep)
51
52
  nenv = Env.new(blk_env.static_env, locals, [], nil)
52
53
  alloc_site = AllocationSite.new(callee_ep)
@@ -87,7 +88,7 @@ module TypeProf
87
88
  TypedBlock.new(msig, ret_ty)
88
89
  end
89
90
 
90
- def do_call(aargs, caller_ep, caller_env, scratch, replace_recv_ty:, &ctn)
91
+ def do_call(aargs, caller_ep, caller_env, scratch, replace_recv_ty:, replace_cref:, &ctn)
91
92
  aargs = scratch.globalize_type(aargs, caller_env, caller_ep)
92
93
  subst = aargs.consistent_with_method_signature?(@msig)
93
94
  unless subst
@@ -119,7 +120,7 @@ module TypeProf
119
120
  self
120
121
  end
121
122
 
122
- def do_call(aargs, caller_ep, caller_env, scratch, replace_recv_ty:, &ctn)
123
+ def do_call(aargs, caller_ep, caller_env, scratch, replace_recv_ty:, replace_cref:, &ctn)
123
124
  if aargs.lead_tys.size >= 1
124
125
  recv = aargs.lead_tys[0]
125
126
  recv = Type.any if recv == Type.bot
@@ -157,7 +158,7 @@ module TypeProf
157
158
  self
158
159
  end
159
160
 
160
- def do_call(aargs, caller_ep, caller_env, scratch, replace_recv_ty:, &ctn)
161
+ def do_call(aargs, caller_ep, caller_env, scratch, replace_recv_ty:, replace_cref:, &ctn)
161
162
  aargs = scratch.globalize_type(aargs, caller_env, caller_ep)
162
163
 
163
164
  dummy_ctx = TypedContext.new(@caller_ep, @mid)
@@ -165,7 +166,7 @@ module TypeProf
165
166
  scratch.add_block_signature!(self, aargs.to_block_signature)
166
167
  scratch.add_block_to_ctx!(self, dummy_ctx)
167
168
 
168
- @blk.call(aargs, caller_ep, caller_env, scratch, replace_recv_ty: replace_recv_ty) do |ret_ty, ep, env|
169
+ @blk.call(aargs, caller_ep, caller_env, scratch, replace_recv_ty: replace_recv_ty, replace_cref: replace_cref) do |ret_ty, ep, env|
169
170
  scratch.add_return_value!(dummy_ctx, ret_ty)
170
171
  ctn[ret_ty, ep, env]
171
172
  end
@@ -158,7 +158,22 @@ module TypeProf
158
158
  naargs = ActualArguments.new([recv], nil, {}, Type.nil)
159
159
  nrecv = recv
160
160
  nrecv = nrecv.base_type if nrecv.is_a?(Type::ContainerType)
161
- scratch.do_invoke_block(aargs.blk_ty, naargs, ep, env, replace_recv_ty: nrecv) do |_ret_ty, ep|
161
+ scratch.do_invoke_block(aargs.blk_ty, naargs, ep, env, replace_recv_ty: nrecv) do |ret_ty, ep|
162
+ ctn[ret_ty, ep, env]
163
+ end
164
+ end
165
+
166
+ def object_module_eval(recv, mid, aargs, ep, env, scratch, &ctn)
167
+ if aargs.lead_tys.size >= 1
168
+ scratch.warn(ep, "class_eval with arguments is ignored")
169
+ ctn[Type.any, ep, env]
170
+ return
171
+ end
172
+ naargs = ActualArguments.new([recv], nil, {}, Type.nil)
173
+ nrecv = recv
174
+ nrecv = nrecv.base_type if nrecv.is_a?(Type::ContainerType)
175
+ ncref = ep.ctx.cref.extend(nrecv, true)
176
+ scratch.do_invoke_block(aargs.blk_ty, naargs, ep, env, replace_recv_ty: nrecv, replace_cref: ncref) do |_ret_ty, ep|
162
177
  ctn[recv, ep, env]
163
178
  end
164
179
  end
@@ -176,7 +191,7 @@ module TypeProf
176
191
  end
177
192
 
178
193
  elem_ty = Type.bot
179
- enum_for_blk = CustomBlock.new(ep, mid) do |aargs, caller_ep, caller_env, scratch, replace_recv_ty:, &blk_ctn|
194
+ enum_for_blk = CustomBlock.new(ep, mid) do |aargs, caller_ep, caller_env, scratch, replace_recv_ty:, replace_cref:, &blk_ctn|
180
195
  if aargs.lead_tys.size >= 1
181
196
  elem_ty = elem_ty.union(aargs.lead_tys[0])
182
197
  else
@@ -235,9 +250,12 @@ module TypeProf
235
250
  return ctn[Type.any, ep, env]
236
251
  end
237
252
 
253
+ # support multiple arguments: include M1, M2
238
254
  arg = aargs.lead_tys[0]
239
255
  arg.each_child do |arg|
240
256
  if arg.is_a?(Type::Class)
257
+ aargs = ActualArguments.new([recv], nil, {}, Type.nil)
258
+ scratch.do_send(arg, :included, aargs, ep, env) {|_ret_ty, _ep| }
241
259
  scratch.mix_module(:after, recv, arg, nil, ep.ctx.cref.singleton, ep)
242
260
  end
243
261
  end
@@ -259,6 +277,8 @@ module TypeProf
259
277
  arg = aargs.lead_tys[0]
260
278
  arg.each_child do |arg|
261
279
  if arg.is_a?(Type::Class)
280
+ aargs = ActualArguments.new([recv], nil, {}, Type.nil)
281
+ scratch.do_send(arg, :extended, aargs, ep, env) {|_ret_ty, _ep| }
262
282
  # if ep.ctx.cref.singleton is true, the meta-meta level is ignored. Should we warn?
263
283
  scratch.mix_module(:after, recv, arg, nil, true, ep)
264
284
  end
@@ -804,9 +824,11 @@ module TypeProf
804
824
  scratch.set_custom_method(klass_module, :public, Builtin.method(:module_public), false)
805
825
  scratch.set_custom_method(klass_module, :private, Builtin.method(:module_private), false)
806
826
  scratch.set_custom_method(klass_module, :define_method, Builtin.method(:module_define_method))
807
- scratch.set_custom_method(klass_module, :"attr_accessor", Builtin.method(:module_attr_accessor))
808
- scratch.set_custom_method(klass_module, :"attr_reader", Builtin.method(:module_attr_reader))
809
- scratch.set_custom_method(klass_module, :"attr_writer", Builtin.method(:module_attr_writer))
827
+ scratch.set_custom_method(klass_module, :attr_accessor, Builtin.method(:module_attr_accessor))
828
+ scratch.set_custom_method(klass_module, :attr_reader, Builtin.method(:module_attr_reader))
829
+ scratch.set_custom_method(klass_module, :attr_writer, Builtin.method(:module_attr_writer))
830
+ scratch.set_custom_method(klass_module, :class_eval, Builtin.method(:object_module_eval))
831
+ scratch.set_custom_method(klass_module, :module_eval, Builtin.method(:object_module_eval))
810
832
 
811
833
  scratch.set_custom_method(klass_proc, :[], Builtin.method(:proc_call))
812
834
  scratch.set_custom_method(klass_proc, :call, Builtin.method(:proc_call))
@@ -80,21 +80,6 @@ module TypeProf
80
80
  Import.import_library(scratch, feature)
81
81
  end
82
82
 
83
- prologue_ctx = Context.new(nil, nil, nil)
84
- prologue_ep = ExecutionPoint.new(prologue_ctx, -1, nil)
85
- prologue_env = Env.new(StaticEnv.new(Type.bot, Type.nil, false, true), [], [], Utils::HashWrapper.new({}))
86
-
87
- Config.rb_files.each do |rb|
88
- if rb.is_a?(Array) # [String name, String content]
89
- iseq = ISeq.compile_str(*rb.reverse)
90
- else
91
- iseq = ISeq.compile(rb)
92
- end
93
- ep, env = TypeProf.starting_state(iseq)
94
- scratch.merge_env(ep, env)
95
- scratch.add_callsite!(ep.ctx, prologue_ep, prologue_env) {|ty, ep| }
96
- end
97
-
98
83
  rbs_files = []
99
84
  rbs_codes = []
100
85
  Config.rbs_files.each do |rbs|
@@ -109,6 +94,15 @@ module TypeProf
109
94
  Import.import_rbs_code(scratch, name, content)
110
95
  end
111
96
 
97
+ Config.rb_files.each do |rb|
98
+ if rb.is_a?(Array) # [String name, String content]
99
+ iseq = ISeq.compile_str(*rb.reverse)
100
+ else
101
+ iseq = ISeq.compile(rb)
102
+ end
103
+ scratch.add_entrypoint(iseq)
104
+ end
105
+
112
106
  result = scratch.type_profile
113
107
 
114
108
  if Config.output.respond_to?(:write)
@@ -137,18 +137,17 @@ module TypeProf
137
137
  ctxs = @iseq_method_to_ctxs[mdef]
138
138
  next unless ctxs
139
139
 
140
- ctxs.each do |ctx|
141
- next if mid != ctx.mid
142
- next if Config.check_dir_filter(ctx.iseq.absolute_path) == :exclude
140
+ ctx = ctxs.find {|ctx| ctx.mid == mid } || ctxs.first
143
141
 
144
- method_name = ctx.mid
145
- method_name = "self.#{ method_name }" if singleton
142
+ next if Config.check_dir_filter(ctx.iseq.absolute_path) == :exclude
146
143
 
147
- key = [:iseq, method_name]
148
- visibilities[key] ||= mdef.pub_meth
149
- source_locations[key] ||= ctx.iseq.source_location(0)
150
- (methods[key] ||= []) << @scratch.show_method_signature(ctx)
151
- end
144
+ method_name = mid
145
+ method_name = "self.#{ method_name }" if singleton
146
+
147
+ key = [:iseq, method_name]
148
+ visibilities[key] ||= mdef.pub_meth
149
+ source_locations[key] ||= ctx.iseq.source_location(0)
150
+ (methods[key] ||= []) << @scratch.show_method_signature(ctx)
152
151
  when AliasMethodDef
153
152
  alias_name, orig_name = mid, mdef.orig_mid
154
153
  if singleton
@@ -189,11 +189,15 @@ module TypeProf
189
189
  when RBS::AST::Members::Include
190
190
  name = member.name
191
191
  if name.kind == :class
192
+ # including a module
192
193
  mod = conv_type_name(name)
193
194
  type_args = member.args.map {|type| conv_type(type) }
194
195
  modules[:include] << [mod, type_args]
195
196
  else
196
- # including an interface is not supported yet
197
+ # including an interface
198
+ mod = conv_type_name(name)
199
+ type_args = member.args.map {|type| conv_type(type) }
200
+ modules[:include] << [mod, type_args]
197
201
  end
198
202
 
199
203
  when RBS::AST::Members::Extend
@@ -1,3 +1,3 @@
1
1
  module TypeProf
2
- VERSION = "0.12.0"
2
+ VERSION = "0.13.0"
3
3
  end
@@ -0,0 +1,22 @@
1
+ module Foo
2
+ end
3
+
4
+ module Bar
5
+ Foo.class_eval do
6
+ @foo = self
7
+ def foo
8
+ "str"
9
+ end
10
+ end
11
+ end
12
+
13
+ __END__
14
+ # Classes
15
+ module Foo
16
+ self.@foo: singleton(Foo)
17
+
18
+ def self.foo: -> String
19
+ end
20
+
21
+ module Bar
22
+ end
@@ -0,0 +1,18 @@
1
+ class Human
2
+ define_method(:fo) { }
3
+
4
+ [:a, :b].each { |m|
5
+ define_method(m) { }
6
+ }
7
+ end
8
+
9
+ Human.new.a
10
+ Human.new.b
11
+
12
+ __END__
13
+ # Classes
14
+ class Human
15
+ def fo: -> nil
16
+ def a: -> nil
17
+ def b: -> nil
18
+ end
data/smoke/extended.rb ADDED
@@ -0,0 +1,38 @@
1
+ module Foo
2
+ @extended = []
3
+ def self.extended(klass)
4
+ @extended << klass
5
+ end
6
+ end
7
+
8
+ class C
9
+ extend Foo
10
+ end
11
+
12
+ class D
13
+ extend Foo
14
+ end
15
+
16
+ class E
17
+ extend Foo
18
+ end
19
+
20
+ __END__
21
+ # Classes
22
+ module Foo
23
+ self.@extended: Array[singleton(C) | singleton(D) | singleton(E)]
24
+
25
+ def self.extended: (singleton(C) | singleton(D) | singleton(E) klass) -> (Array[singleton(C) | singleton(D) | singleton(E)])
26
+ end
27
+
28
+ class C
29
+ extend Foo
30
+ end
31
+
32
+ class D
33
+ extend Foo
34
+ end
35
+
36
+ class E
37
+ extend Foo
38
+ end
data/smoke/included.rb ADDED
@@ -0,0 +1,38 @@
1
+ module Foo
2
+ @included = []
3
+ def self.included(klass)
4
+ @included << klass
5
+ end
6
+ end
7
+
8
+ class C
9
+ include Foo
10
+ end
11
+
12
+ class D
13
+ include Foo
14
+ end
15
+
16
+ class E
17
+ include Foo
18
+ end
19
+
20
+ __END__
21
+ # Classes
22
+ module Foo
23
+ self.@included: Array[singleton(C) | singleton(D) | singleton(E)]
24
+
25
+ def self.included: (singleton(C) | singleton(D) | singleton(E) klass) -> (Array[singleton(C) | singleton(D) | singleton(E)])
26
+ end
27
+
28
+ class C
29
+ include Foo
30
+ end
31
+
32
+ class D
33
+ include Foo
34
+ end
35
+
36
+ class E
37
+ include Foo
38
+ end
@@ -0,0 +1,26 @@
1
+ class Foo
2
+ @inherited = []
3
+ def self.inherited(klass)
4
+ @inherited << klass
5
+ end
6
+ end
7
+
8
+ class Bar < Foo
9
+ end
10
+
11
+ class Baz < Foo
12
+ end
13
+
14
+ __END__
15
+ # Classes
16
+ class Foo
17
+ self.@inherited: Array[singleton(Bar) | singleton(Baz)]
18
+
19
+ def self.inherited: (singleton(Bar) | singleton(Baz) klass) -> (Array[singleton(Bar) | singleton(Baz)])
20
+ end
21
+
22
+ class Bar < Foo
23
+ end
24
+
25
+ class Baz < Foo
26
+ end
@@ -13,6 +13,6 @@ end
13
13
  __END__
14
14
  # Classes
15
15
  class C
16
- def self.foo: { (C) -> nil } -> C
16
+ def self.foo: { (C) -> nil } -> nil
17
17
  def log: (Integer n) -> nil
18
18
  end
@@ -0,0 +1,12 @@
1
+ def foo
2
+ 5.instance_eval { i }
3
+ end
4
+
5
+ foo
6
+
7
+ __END__
8
+ # Classes
9
+ class Object
10
+ private
11
+ def foo: -> Complex
12
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: typeprof
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.0
4
+ version: 0.13.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yusuke Endoh
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-01-29 00:00:00.000000000 Z
11
+ date: 2021-03-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rbs
@@ -145,6 +145,7 @@ files:
145
145
  - smoke/class-hierarchy2.rb
146
146
  - smoke/class-new.rb
147
147
  - smoke/class.rb
148
+ - smoke/class_eval.rb
148
149
  - smoke/class_instance_var.rb
149
150
  - smoke/class_method.rb
150
151
  - smoke/class_method2.rb
@@ -164,6 +165,7 @@ files:
164
165
  - smoke/define_method4.rbs
165
166
  - smoke/define_method5.rb
166
167
  - smoke/define_method6.rb
168
+ - smoke/define_method7.rb
167
169
  - smoke/demo.rb
168
170
  - smoke/demo1.rb
169
171
  - smoke/demo10.rb
@@ -185,6 +187,7 @@ files:
185
187
  - smoke/enumerator.rb
186
188
  - smoke/expandarray1.rb
187
189
  - smoke/expandarray2.rb
190
+ - smoke/extended.rb
188
191
  - smoke/fib.rb
189
192
  - smoke/flip-flop.rb
190
193
  - smoke/flow1.rb
@@ -211,12 +214,15 @@ files:
211
214
  - smoke/hash3.rb
212
215
  - smoke/hash4.rb
213
216
  - smoke/hash5.rb
217
+ - smoke/included.rb
214
218
  - smoke/inheritance.rb
215
219
  - smoke/inheritance2.rb
220
+ - smoke/inherited.rb
216
221
  - smoke/initialize.rb
217
222
  - smoke/instance_eval.rb
218
223
  - smoke/instance_eval2.rb
219
224
  - smoke/instance_eval3.rb
225
+ - smoke/instance_eval4.rb
220
226
  - smoke/int_times.rb
221
227
  - smoke/integer.rb
222
228
  - smoke/ivar.rb