typeprof 0.5.4 → 0.9.0

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.
Files changed (289) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +7 -5
  3. data/doc/doc.ja.md +3 -4
  4. data/doc/doc.md +3 -4
  5. data/lib/typeprof/analyzer.rb +308 -171
  6. data/lib/typeprof/arguments.rb +14 -6
  7. data/lib/typeprof/block.rb +6 -2
  8. data/lib/typeprof/builtin.rb +230 -67
  9. data/lib/typeprof/cli.rb +33 -34
  10. data/lib/typeprof/config.rb +6 -4
  11. data/lib/typeprof/container-type.rb +159 -104
  12. data/lib/typeprof/export.rb +28 -22
  13. data/lib/typeprof/import.rb +70 -53
  14. data/lib/typeprof/iseq.rb +23 -7
  15. data/lib/typeprof/method.rb +71 -138
  16. data/lib/typeprof/type.rb +73 -15
  17. data/lib/typeprof/version.rb +1 -1
  18. data/smoke/alias.rb +5 -4
  19. data/smoke/alias2.rb +4 -4
  20. data/smoke/any1.rb +2 -1
  21. data/smoke/any2.rb +3 -2
  22. data/smoke/arguments.rb +3 -2
  23. data/smoke/arguments2.rb +11 -10
  24. data/smoke/array-each.rb +2 -1
  25. data/smoke/array-each2.rb +2 -1
  26. data/smoke/array-each3.rb +2 -1
  27. data/smoke/array-ltlt.rb +2 -1
  28. data/smoke/array-ltlt2.rb +2 -1
  29. data/smoke/array-map.rb +2 -1
  30. data/smoke/array-map2.rb +2 -1
  31. data/smoke/array-map3.rb +4 -3
  32. data/smoke/array-mul.rb +3 -2
  33. data/smoke/array-plus1.rb +2 -1
  34. data/smoke/array-plus2.rb +2 -2
  35. data/smoke/array-pop.rb +2 -1
  36. data/smoke/array-range-aref.rb +71 -0
  37. data/smoke/array-replace.rb +2 -1
  38. data/smoke/array-s-aref.rb +2 -1
  39. data/smoke/array1.rb +6 -5
  40. data/smoke/array10.rb +2 -1
  41. data/smoke/array11.rb +2 -1
  42. data/smoke/array12.rb +4 -3
  43. data/smoke/array13.rb +5 -4
  44. data/smoke/array14.rb +2 -1
  45. data/smoke/array15.rb +16 -0
  46. data/smoke/array2.rb +4 -3
  47. data/smoke/array3.rb +4 -4
  48. data/smoke/array4.rb +2 -1
  49. data/smoke/array5.rb +2 -1
  50. data/smoke/array6.rb +3 -2
  51. data/smoke/array7.rb +2 -1
  52. data/smoke/array8.rb +1 -1
  53. data/smoke/array9.rb +2 -1
  54. data/smoke/attr-module.rb +26 -0
  55. data/smoke/attr.rb +5 -5
  56. data/smoke/autoload.rb +14 -0
  57. data/smoke/backtrace.rb +4 -3
  58. data/smoke/block-ambiguous.rb +9 -8
  59. data/smoke/block-args1-rest.rb +12 -11
  60. data/smoke/block-args1.rb +11 -10
  61. data/smoke/block-args2-rest.rb +12 -11
  62. data/smoke/block-args2.rb +11 -10
  63. data/smoke/block-args3-rest.rb +14 -13
  64. data/smoke/block-args3.rb +13 -12
  65. data/smoke/block-blockarg.rb +5 -4
  66. data/smoke/block-kwarg.rb +11 -10
  67. data/smoke/block1.rb +2 -1
  68. data/smoke/block10.rb +2 -1
  69. data/smoke/block11.rb +6 -5
  70. data/smoke/block12.rb +3 -2
  71. data/smoke/block14.rb +3 -2
  72. data/smoke/block2.rb +2 -1
  73. data/smoke/block3.rb +3 -3
  74. data/smoke/block4.rb +3 -2
  75. data/smoke/block5.rb +3 -2
  76. data/smoke/block6.rb +3 -2
  77. data/smoke/block7.rb +2 -1
  78. data/smoke/block8.rb +4 -3
  79. data/smoke/block9.rb +2 -1
  80. data/smoke/blown.rb +2 -1
  81. data/smoke/break1.rb +3 -2
  82. data/smoke/break2.rb +2 -1
  83. data/smoke/break3.rb +13 -0
  84. data/smoke/case.rb +2 -1
  85. data/smoke/case2.rb +2 -1
  86. data/smoke/case3.rb +17 -0
  87. data/smoke/class-hierarchy.rb +5 -5
  88. data/smoke/class-hierarchy2.rb +3 -3
  89. data/smoke/class-new.rb +15 -0
  90. data/smoke/class_instance_var.rb +1 -1
  91. data/smoke/class_method.rb +2 -2
  92. data/smoke/class_method2.rb +2 -2
  93. data/smoke/class_method3.rb +4 -2
  94. data/smoke/constant1.rb +6 -6
  95. data/smoke/constant2.rb +5 -4
  96. data/smoke/constant3.rb +2 -1
  97. data/smoke/constant4.rb +2 -1
  98. data/smoke/context-sensitive1.rb +2 -1
  99. data/smoke/cvar.rb +6 -5
  100. data/smoke/cvar2.rb +2 -2
  101. data/smoke/define_method.rb +16 -0
  102. data/smoke/define_method2.rb +18 -0
  103. data/smoke/define_method3.rb +13 -0
  104. data/smoke/define_method3.rbs +3 -0
  105. data/smoke/define_method4.rb +15 -0
  106. data/smoke/define_method4.rbs +3 -0
  107. data/smoke/define_method5.rb +12 -0
  108. data/smoke/demo.rb +7 -6
  109. data/smoke/demo1.rb +2 -1
  110. data/smoke/demo10.rb +3 -2
  111. data/smoke/demo11.rb +2 -1
  112. data/smoke/demo2.rb +2 -1
  113. data/smoke/demo3.rb +2 -1
  114. data/smoke/demo4.rb +3 -3
  115. data/smoke/demo5.rb +1 -1
  116. data/smoke/demo6.rb +3 -3
  117. data/smoke/demo7.rb +2 -1
  118. data/smoke/demo8.rb +3 -2
  119. data/smoke/demo9.rb +3 -2
  120. data/smoke/dummy-execution1.rb +3 -2
  121. data/smoke/dummy-execution2.rb +2 -2
  122. data/smoke/dummy_element.rb +14 -0
  123. data/smoke/ensure1.rb +3 -2
  124. data/smoke/enumerator.rb +3 -2
  125. data/smoke/expandarray1.rb +2 -1
  126. data/smoke/expandarray2.rb +2 -1
  127. data/smoke/fib.rb +2 -2
  128. data/smoke/flip-flop.rb +28 -0
  129. data/smoke/flow1.rb +2 -1
  130. data/smoke/flow2.rb +2 -1
  131. data/smoke/flow3.rb +2 -1
  132. data/smoke/flow5.rb +2 -1
  133. data/smoke/flow6.rb +2 -1
  134. data/smoke/flow7.rb +2 -1
  135. data/smoke/flow8.rb +2 -1
  136. data/smoke/flow9.rb +12 -0
  137. data/smoke/freeze.rb +2 -1
  138. data/smoke/function.rb +3 -2
  139. data/smoke/gvar.rb +3 -2
  140. data/smoke/gvar2.rb +3 -2
  141. data/smoke/hash-bot.rb +12 -0
  142. data/smoke/hash-fetch.rb +4 -3
  143. data/smoke/hash-merge-bang.rb +2 -1
  144. data/smoke/hash1.rb +3 -2
  145. data/smoke/hash2.rb +2 -1
  146. data/smoke/hash3.rb +2 -1
  147. data/smoke/hash4.rb +2 -1
  148. data/smoke/hash5.rb +1 -1
  149. data/smoke/inheritance.rb +4 -4
  150. data/smoke/inheritance2.rb +2 -2
  151. data/smoke/initialize.rb +6 -5
  152. data/smoke/instance_eval.rb +2 -2
  153. data/smoke/instance_eval2.rb +10 -0
  154. data/smoke/instance_eval3.rb +25 -0
  155. data/smoke/int_times.rb +2 -1
  156. data/smoke/integer.rb +2 -1
  157. data/smoke/ivar.rb +5 -4
  158. data/smoke/ivar2.rb +4 -4
  159. data/smoke/ivar3.rb +2 -2
  160. data/smoke/kernel-class.rb +2 -1
  161. data/smoke/keyword1.rb +2 -1
  162. data/smoke/keyword2.rb +2 -1
  163. data/smoke/keyword3.rb +2 -1
  164. data/smoke/keyword4.rb +2 -1
  165. data/smoke/keyword5.rb +2 -1
  166. data/smoke/kwrest.rb +12 -0
  167. data/smoke/kwrest.rbs +3 -0
  168. data/smoke/kwsplat1.rb +5 -4
  169. data/smoke/kwsplat2.rb +2 -1
  170. data/smoke/lit-complex.rb +10 -0
  171. data/smoke/lit-encoding.rb +10 -0
  172. data/smoke/manual-rbs.rb +4 -3
  173. data/smoke/manual-rbs2.rb +2 -1
  174. data/smoke/manual-rbs3.rb +2 -2
  175. data/smoke/masgn1.rb +2 -1
  176. data/smoke/masgn2.rb +3 -2
  177. data/smoke/masgn3.rb +2 -1
  178. data/smoke/method_in_branch.rb +3 -2
  179. data/smoke/method_missing.rb +28 -0
  180. data/smoke/module1.rb +2 -2
  181. data/smoke/module2.rb +1 -1
  182. data/smoke/module3.rb +2 -2
  183. data/smoke/module4.rb +2 -2
  184. data/smoke/module5.rb +17 -0
  185. data/smoke/module6.rb +40 -0
  186. data/smoke/module_function1.rb +3 -3
  187. data/smoke/module_function2.rb +3 -3
  188. data/smoke/multiple-include.rb +1 -1
  189. data/smoke/multiple-superclass.rb +1 -1
  190. data/smoke/next1.rb +3 -2
  191. data/smoke/next2.rb +2 -1
  192. data/smoke/object-send1.rb +4 -3
  193. data/smoke/object-send2.rb +10 -0
  194. data/smoke/object-send3.rb +18 -0
  195. data/smoke/once.rb +2 -1
  196. data/smoke/optional1.rb +2 -1
  197. data/smoke/optional2.rb +2 -1
  198. data/smoke/optional3.rb +2 -1
  199. data/smoke/parameterizedd-self.rb +3 -2
  200. data/smoke/parameterizedd-self2.rb +15 -0
  201. data/smoke/pathname1.rb +2 -1
  202. data/smoke/pathname2.rb +2 -1
  203. data/smoke/pattern-match1.rb +2 -1
  204. data/smoke/pattern-match2.rb +2 -1
  205. data/smoke/printf.rb +2 -2
  206. data/smoke/proc.rb +3 -2
  207. data/smoke/proc2.rb +2 -1
  208. data/smoke/proc3.rb +2 -1
  209. data/smoke/proc4.rb +2 -1
  210. data/smoke/proc5.rb +19 -0
  211. data/smoke/public.rb +34 -0
  212. data/smoke/range.rb +2 -1
  213. data/smoke/rbs-alias.rb +2 -1
  214. data/smoke/rbs-attr.rb +6 -5
  215. data/smoke/rbs-attr2.rb +11 -0
  216. data/smoke/rbs-attr2.rbs +3 -0
  217. data/smoke/rbs-extend.rb +2 -1
  218. data/smoke/rbs-interface.rb +5 -4
  219. data/smoke/rbs-module.rb +26 -0
  220. data/smoke/rbs-module.rbs +4 -0
  221. data/smoke/rbs-opt-and-rest.rb +10 -0
  222. data/smoke/rbs-opt-and-rest.rbs +3 -0
  223. data/smoke/rbs-proc1.rb +2 -1
  224. data/smoke/rbs-proc2.rb +3 -2
  225. data/smoke/rbs-proc3.rb +2 -1
  226. data/smoke/rbs-record.rb +3 -2
  227. data/smoke/rbs-tyvar.rb +3 -2
  228. data/smoke/rbs-tyvar2.rb +3 -2
  229. data/smoke/rbs-tyvar3.rb +3 -2
  230. data/smoke/rbs-tyvar4.rb +3 -3
  231. data/smoke/rbs-tyvar5.rb +2 -1
  232. data/smoke/rbs-tyvar6.rb +18 -0
  233. data/smoke/rbs-tyvar6.rbs +12 -0
  234. data/smoke/rbs-tyvar7.rb +12 -0
  235. data/smoke/rbs-tyvar7.rbs +7 -0
  236. data/smoke/rbs-vars.rb +7 -8
  237. data/smoke/redo1.rb +3 -2
  238. data/smoke/redo2.rb +3 -2
  239. data/smoke/req-keyword.rb +2 -1
  240. data/smoke/rescue1.rb +3 -2
  241. data/smoke/rescue2.rb +3 -2
  242. data/smoke/rescue3.rb +19 -0
  243. data/smoke/rescue4.rb +17 -0
  244. data/smoke/respond_to.rb +2 -1
  245. data/smoke/rest-farg.rb +2 -1
  246. data/smoke/rest1.rb +3 -2
  247. data/smoke/rest2.rb +2 -1
  248. data/smoke/rest3.rb +7 -6
  249. data/smoke/rest4.rb +3 -2
  250. data/smoke/rest5.rb +2 -1
  251. data/smoke/rest6.rb +2 -1
  252. data/smoke/retry1.rb +3 -2
  253. data/smoke/return.rb +2 -1
  254. data/smoke/singleton_method.rb +1 -1
  255. data/smoke/step.rb +4 -3
  256. data/smoke/string-split.rb +2 -1
  257. data/smoke/struct-keyword_init.rb +20 -0
  258. data/smoke/struct.rb +1 -1
  259. data/smoke/struct2.rb +5 -4
  260. data/smoke/struct3.rb +2 -2
  261. data/smoke/struct4.rb +7 -0
  262. data/smoke/struct5.rb +16 -0
  263. data/smoke/struct6.rb +15 -0
  264. data/smoke/struct7.rb +17 -0
  265. data/smoke/stub-keyword.rb +10 -0
  266. data/smoke/super1.rb +5 -4
  267. data/smoke/super2.rb +1 -1
  268. data/smoke/super3.rb +3 -3
  269. data/smoke/super4.rb +43 -0
  270. data/smoke/super5.rb +36 -0
  271. data/smoke/svar1.rb +2 -1
  272. data/smoke/symbol-proc-attr.rb +22 -0
  273. data/smoke/symbol-proc-attr2.rb +15 -0
  274. data/smoke/symbol-proc-bot.rb +13 -0
  275. data/smoke/symbol-proc.rb +4 -3
  276. data/smoke/tap1.rb +3 -2
  277. data/smoke/toplevel.rb +2 -1
  278. data/smoke/two-map.rb +3 -2
  279. data/smoke/type_var.rb +2 -1
  280. data/smoke/typed_method.rb +2 -1
  281. data/smoke/uninitialize-var.rb +2 -1
  282. data/smoke/union-recv.rb +2 -2
  283. data/smoke/user-demo.rb +3 -3
  284. data/smoke/wrong-extend.rb +2 -2
  285. data/smoke/wrong-include.rb +2 -2
  286. data/smoke/wrong-include2.rb +17 -0
  287. data/typeprof.gemspec +1 -1
  288. metadata +61 -6
  289. data/tools/stackprof-wrapper.rb +0 -10
@@ -149,6 +149,10 @@ module TypeProf
149
149
  raise "cannot substitute abstract type: #{ self.class }"
150
150
  end
151
151
 
152
+ def generate_substitution
153
+ {}
154
+ end
155
+
152
156
  DummySubstitution = Object.new
153
157
  def DummySubstitution.[](_)
154
158
  Type.any
@@ -170,7 +174,7 @@ module TypeProf
170
174
  "untyped"
171
175
  end
172
176
 
173
- def get_method(mid, scratch)
177
+ def method_dispatch_info
174
178
  nil
175
179
  end
176
180
 
@@ -203,11 +207,12 @@ module TypeProf
203
207
  local = nil
204
208
  tys.each do |ty|
205
209
  raise ty.inspect unless ty.is_a?(Type)
206
- local = true if ty.is_a?(LocalArray) || ty.is_a?(LocalHash)
210
+ local = true if ty.is_a?(Local)
207
211
  end
208
212
  raise if local && elems
209
213
 
210
214
  @elems = elems
215
+ raise elems.inspect if elems && !elems.is_a?(::Hash)
211
216
  end
212
217
 
213
218
  def each_free_type_variable(&blk)
@@ -285,7 +290,7 @@ module TypeProf
285
290
  types.delete(Type::Instance.new(Type::Builtin[:true]))
286
291
  bool = true
287
292
  end
288
- types.delete(Type.any) unless Config.options[:pedantic_output]
293
+ types.delete(Type.any) unless Config.options[:show_untyped]
289
294
  proc_tys, types = types.partition {|ty| ty.is_a?(Proc) }
290
295
  types = types.map {|ty| ty.screen_name(scratch) }
291
296
  types << scratch.show_proc_signature(proc_tys) unless proc_tys.empty?
@@ -310,9 +315,14 @@ module TypeProf
310
315
  def globalize(env, visited, depth)
311
316
  return Type.any if depth <= 0
312
317
  tys = Utils::Set[]
313
- raise if @elems
318
+ if @elems
319
+ # XXX: If @elems is non nil, the Union type should global, so calling globalize against such a type should not occur.
320
+ # However, currently, ActualArguments may contain global types for flag_args_kw_splat case.
321
+ # This should be fixed in future in ActualArguments side. See Scratch#setup_actual_arguments.
322
+ #raise
323
+ end
314
324
 
315
- elems = {}
325
+ elems = @elems ? @elems.dup : {}
316
326
  @types.each do |ty|
317
327
  ty = ty.globalize(env, visited, depth - 1)
318
328
  case ty
@@ -435,10 +445,12 @@ module TypeProf
435
445
  @idx = idx
436
446
  @type_params = type_params
437
447
  @superclass = superclass
448
+ raise if @kind == :class && !@superclass
438
449
  @_name = name
439
450
  end
440
451
 
441
452
  attr_reader :kind, :idx, :type_params, :superclass
453
+ attr_accessor :superclass_type_args
442
454
 
443
455
  def inspect
444
456
  if @_name
@@ -452,8 +464,8 @@ module TypeProf
452
464
  "singleton(#{ scratch.get_class_name(self) })"
453
465
  end
454
466
 
455
- def get_method(mid, scratch)
456
- scratch.get_method(self, true, mid)
467
+ def method_dispatch_info
468
+ [self, true]
457
469
  end
458
470
 
459
471
  def consistent?(other)
@@ -485,6 +497,8 @@ module TypeProf
485
497
  def initialize(klass)
486
498
  raise unless klass
487
499
  raise if klass == Type.any
500
+ raise if klass.is_a?(Type::Instance)
501
+ raise if klass.is_a?(Type::Union)
488
502
  @klass = klass
489
503
  end
490
504
 
@@ -504,8 +518,8 @@ module TypeProf
504
518
  end
505
519
  end
506
520
 
507
- def get_method(mid, scratch)
508
- scratch.get_method(@klass, false, mid)
521
+ def method_dispatch_info
522
+ [@klass, false]
509
523
  end
510
524
 
511
525
  def consistent?(other)
@@ -558,8 +572,8 @@ module TypeProf
558
572
  end
559
573
  end
560
574
 
561
- def get_method(mid, scratch)
562
- @base_type.get_method(mid, scratch)
575
+ def method_dispatch_info
576
+ @base_type.method_dispatch_info
563
577
  end
564
578
 
565
579
  def substitute(subst, depth)
@@ -600,8 +614,8 @@ module TypeProf
600
614
  end
601
615
  end
602
616
 
603
- def get_method(mid, scratch)
604
- @base_type.get_method(mid, scratch)
617
+ def method_dispatch_info
618
+ @base_type.method_dispatch_info
605
619
  end
606
620
 
607
621
  def substitute(_subst, _depth)
@@ -630,8 +644,8 @@ module TypeProf
630
644
  @base_type
631
645
  end
632
646
 
633
- def get_method(mid, scratch)
634
- @base_type.get_method(mid, scratch)
647
+ def method_dispatch_info
648
+ @base_type.method_dispatch_info
635
649
  end
636
650
 
637
651
  def consistent?(_other)
@@ -675,6 +689,8 @@ module TypeProf
675
689
  Type::Literal.new(obj, Type::Instance.new(Type::Builtin[:int]))
676
690
  when ::Rational
677
691
  Type::Literal.new(obj, Type::Instance.new(Type::Builtin[:rational]))
692
+ when ::Complex
693
+ Type::Literal.new(obj, Type::Instance.new(Type::Builtin[:complex]))
678
694
  when ::Float
679
695
  Type::Literal.new(obj, Type::Instance.new(Type::Builtin[:float]))
680
696
  when ::Class
@@ -711,6 +727,8 @@ module TypeProf
711
727
  Type.nil
712
728
  when ::Range
713
729
  Type::Literal.new(obj, Type::Instance.new(Type::Builtin[:range]))
730
+ when ::Encoding
731
+ Type::Literal.new(obj, Type::Instance.new(Type::Builtin[:encoding]))
714
732
  else
715
733
  raise "unknown object: #{ obj.inspect }"
716
734
  end
@@ -813,8 +831,10 @@ module TypeProf
813
831
  def initialize(lead_tys, opt_tys, rest_ty, post_tys, kw_tys, kw_rest_ty, blk_ty)
814
832
  @lead_tys = lead_tys
815
833
  @opt_tys = opt_tys
834
+ raise unless opt_tys.is_a?(Array)
816
835
  @rest_ty = rest_ty
817
836
  @post_tys = post_tys
837
+ raise unless post_tys
818
838
  @kw_tys = kw_tys
819
839
  kw_tys.each {|a| raise if a.size != 3 } if kw_tys
820
840
  @kw_rest_ty = kw_rest_ty
@@ -834,6 +854,44 @@ module TypeProf
834
854
  MethodSignature.new(lead_tys, opt_tys, rest_ty, post_tys, kw_tys, kw_rest_ty, blk_ty)
835
855
  end
836
856
 
857
+ def merge_as_block_arguments(other)
858
+ lead_tys1, opt_tys1, rest_ty1, post_tys1 = @lead_tys, @opt_tys, @rest_ty, @post_tys
859
+ lead_tys2, opt_tys2, rest_ty2, post_tys2 = other.lead_tys, other.opt_tys, other.rest_ty, other.post_tys
860
+
861
+ case
862
+ when lead_tys1.size > lead_tys2.size
863
+ n = lead_tys2.size
864
+ lead_tys1, opt_tys1 = lead_tys1[0, n], lead_tys1[n..] + opt_tys1
865
+ when lead_tys1.size < lead_tys2.size
866
+ n = lead_tys1.size
867
+ lead_tys2, opt_tys2 = lead_tys2[0, n], lead_tys2[n..] + opt_tys2
868
+ end
869
+ case
870
+ when post_tys1.size > post_tys2.size
871
+ i = post_tys1.size - post_tys2.size
872
+ if rest_ty1
873
+ rest_ty1 = post_tys[0, i].inject(rest_ty1) {|ty1, ty2| ty1.union(ty2) }
874
+ post_tys1 = post_tys1[i..]
875
+ else
876
+ opt_tys1, post_tys1 = opt_tys1 + post_tys1[0, i], post_tys1[i..]
877
+ end
878
+ when post_tys1.size < post_tys2.size
879
+ i = post_tys2.size - post_tys1.size
880
+ if rest_ty2
881
+ rest_ty2 = post_tys[0, i].inject(rest_ty2) {|ty1, ty2| ty1.union(ty2) }
882
+ post_tys2 = post_tys2[i..]
883
+ else
884
+ opt_tys2, post_tys2 = opt_tys2 + post_tys2[0, i], post_tys2[i..]
885
+ end
886
+ end
887
+
888
+ # XXX: tweak keywords too
889
+
890
+ msig1 = MethodSignature.new(lead_tys1, opt_tys1, rest_ty1, post_tys1, @kw_tys, @kw_rest_ty, @blk_ty)
891
+ msig2 = MethodSignature.new(lead_tys2, opt_tys2, rest_ty2, post_tys2, other.kw_tys, other.kw_rest_ty, other.blk_ty)
892
+ msig1.merge(msig2)
893
+ end
894
+
837
895
  def merge(other)
838
896
  raise if @lead_tys.size != other.lead_tys.size
839
897
  raise if @post_tys.size != other.post_tys.size
@@ -1,3 +1,3 @@
1
1
  module TypeProf
2
- VERSION = "0.5.4"
2
+ VERSION = "0.9.0"
3
3
  end
@@ -20,11 +20,12 @@ Test.new.qux("str")
20
20
  __END__
21
21
  # Classes
22
22
  class Object
23
- def foo : (Integer) -> Integer
24
- def bar : (String) -> String
23
+ private
24
+ def foo: (Integer) -> Integer
25
+ def bar: (String) -> String
25
26
  end
26
27
 
27
28
  class Test
28
- def baz : (Integer) -> Integer
29
- def qux : (String) -> String
29
+ def baz: (Integer) -> Integer
30
+ def qux: (String) -> String
30
31
  end
@@ -12,8 +12,8 @@ Foo[:x, :y, :z]
12
12
  __END__
13
13
  # Classes
14
14
  class Foo
15
- @a : :x
16
- @b : :y
17
- @c : :z
18
- def initialize : (:x, :y, :z) -> [:x, :y, :z]
15
+ @a: :x
16
+ @b: :y
17
+ @c: :z
18
+ def initialize: (:x, :y, :z) -> [:x, :y, :z]
19
19
  end
@@ -11,5 +11,6 @@ smoke/any1.rb:2: [error] undefined method: Integer#undefined_method
11
11
 
12
12
  # Classes
13
13
  class Object
14
- def foo : -> untyped
14
+ private
15
+ def foo: -> untyped
15
16
  end
@@ -12,6 +12,7 @@ bar
12
12
  __END__
13
13
  # Classes
14
14
  class Object
15
- def foo : -> untyped
16
- def bar : -> Integer
15
+ private
16
+ def foo: -> untyped
17
+ def bar: -> Integer
17
18
  end
@@ -11,6 +11,7 @@ smoke/arguments.rb:6: [error] wrong number of arguments (given 2, expected 1)
11
11
 
12
12
  # Classes
13
13
  class Object
14
- def foo : (untyped) -> nil
15
- def bar : (untyped) -> nil
14
+ private
15
+ def foo: (untyped) -> nil
16
+ def bar: (untyped) -> nil
16
17
  end
@@ -42,14 +42,15 @@ f10 {|n| }
42
42
  __END__
43
43
  # Classes
44
44
  class Object
45
- def f1 : -> nil
46
- def f2 : (:x, :y, :z) -> nil
47
- def f3 : (?String, ?String) -> nil
48
- def f4 : (*:a | :b | :c) -> nil
49
- def f5 : (:x, ?String, :z) -> nil
50
- def f6 : (k: :kk) -> nil
51
- def f7 : (?k: Integer) -> nil
52
- def f8 : (?k: String) -> nil
53
- def f9 : (**{k: :kk}) -> nil
54
- def f10 : { (Integer) -> nil } -> nil
45
+ private
46
+ def f1: -> nil
47
+ def f2: (:x, :y, :z) -> nil
48
+ def f3: (?String, ?String) -> nil
49
+ def f4: (*:a | :b | :c) -> nil
50
+ def f5: (:x, ?String, :z) -> nil
51
+ def f6: (k: :kk) -> nil
52
+ def f7: (?k: Integer) -> nil
53
+ def f8: (?k: String) -> nil
54
+ def f9: (**{k: :kk}) -> nil
55
+ def f10: { (Integer) -> nil } -> nil
55
56
  end
@@ -10,5 +10,6 @@ log(nil)
10
10
  __END__
11
11
  # Classes
12
12
  class Object
13
- def log : ((:sym | Integer | String)?) -> nil
13
+ private
14
+ def log: ((:sym | Integer | String)?) -> nil
14
15
  end
@@ -11,5 +11,6 @@ foo
11
11
  __END__
12
12
  # Classes
13
13
  class Object
14
- def foo : -> ((Integer | String)?)
14
+ private
15
+ def foo: -> ((Integer | String)?)
15
16
  end
@@ -8,5 +8,6 @@ end
8
8
  __END__
9
9
  # Classes
10
10
  class Object
11
- def log : (untyped) -> nil
11
+ private
12
+ def log: (bot) -> nil
12
13
  end
@@ -9,5 +9,6 @@ foo
9
9
  __END__
10
10
  # Classes
11
11
  class Object
12
- def foo : -> (Array[Integer | String])
12
+ private
13
+ def foo: -> (Array[Integer | String])
13
14
  end
@@ -12,5 +12,6 @@ foo
12
12
  __END__
13
13
  # Classes
14
14
  class Object
15
- def foo : -> (Array[Integer | String])
15
+ private
16
+ def foo: -> (Array[Integer | String])
16
17
  end
@@ -7,5 +7,6 @@ foo([1, 2, 3])
7
7
  __END__
8
8
  # Classes
9
9
  class Object
10
- def foo : ([Integer, Integer, Integer]) -> Array[String]
10
+ private
11
+ def foo: ([Integer, Integer, Integer]) -> Array[String]
11
12
  end
@@ -6,5 +6,6 @@ foo([1, 2, 3])
6
6
  __END__
7
7
  # Classes
8
8
  class Object
9
- def foo : ([Integer, Integer, Integer]) -> (Array[Integer | String])
9
+ private
10
+ def foo: ([Integer, Integer, Integer]) -> (Array[Integer | String])
10
11
  end
@@ -16,7 +16,8 @@ map_bang_test_known_bug([1, 2, 3])
16
16
  __END__
17
17
  # Classes
18
18
  class Object
19
- def map_test : ([Integer, Integer, Integer]) -> Array[String]
20
- def map_bang_test : ([Integer, Integer, Integer]) -> (Array[Integer | String])
21
- def map_bang_test_known_bug : ([Integer, Integer, Integer]) -> [Integer, Integer, Integer]
19
+ private
20
+ def map_test: ([Integer, Integer, Integer]) -> Array[String]
21
+ def map_bang_test: ([Integer, Integer, Integer]) -> (Array[Integer | String])
22
+ def map_bang_test_known_bug: ([Integer, Integer, Integer]) -> [Integer, Integer, Integer]
22
23
  end
@@ -12,6 +12,7 @@ bar([1, 2, 3])
12
12
  __END__
13
13
  # Classes
14
14
  class Object
15
- def foo : ([Integer, Integer, Integer]) -> Array[Integer]
16
- def bar : ([Integer, Integer, Integer]) -> String
15
+ private
16
+ def foo: ([Integer, Integer, Integer]) -> Array[Integer]
17
+ def bar: ([Integer, Integer, Integer]) -> String
17
18
  end
@@ -6,5 +6,6 @@ log([1] + ["str"] + [2] + [:sym])
6
6
  __END__
7
7
  # Classes
8
8
  class Object
9
- def log : (Array[:sym | Integer | String]) -> nil
9
+ private
10
+ def log: (Array[:sym | Integer | String]) -> nil
10
11
  end
@@ -10,6 +10,6 @@ Foo.new.foo
10
10
  __END__
11
11
  # Classes
12
12
  class Foo
13
- @var : Array[Integer]
14
- def foo : -> Array[Integer]
13
+ @var: Array[Integer]
14
+ def foo: -> Array[Integer]
15
15
  end
@@ -7,5 +7,6 @@ foo
7
7
  __END__
8
8
  # Classes
9
9
  class Object
10
- def foo : -> (:sym | Integer | String)
10
+ private
11
+ def foo: -> (:sym | Integer | String)
11
12
  end
@@ -0,0 +1,71 @@
1
+ def f1(*ary)
2
+ ary[1..3]
3
+ end
4
+
5
+ def f2(*ary)
6
+ ary[1...3]
7
+ end
8
+
9
+ def f3(*ary)
10
+ ary[1..-3]
11
+ end
12
+
13
+ def f4(*ary)
14
+ ary[1...-3]
15
+ end
16
+
17
+ def f5(*ary)
18
+ ary[-4..3]
19
+ end
20
+
21
+ def f6(*ary)
22
+ ary[-4...3]
23
+ end
24
+
25
+ def f7(*ary)
26
+ ary[-4..-3]
27
+ end
28
+
29
+ def f8(*ary)
30
+ ary[-4...-3]
31
+ end
32
+
33
+ def f9(*ary)
34
+ ary[...3]
35
+ end
36
+
37
+ def f10(*ary)
38
+ ary[3..]
39
+ end
40
+
41
+ def dispatch(*ary)
42
+ f1(*ary)
43
+ f2(*ary)
44
+ f3(*ary)
45
+ f4(*ary)
46
+ f5(*ary)
47
+ f6(*ary)
48
+ f7(*ary)
49
+ f8(*ary)
50
+ f9(*ary)
51
+ f10(*ary)
52
+ end
53
+
54
+ dispatch(:a, :b, :c, :d, :e)
55
+
56
+ __END__
57
+ # Classes
58
+ class Object
59
+ private
60
+ def f1: (*:a | :b | :c | :d | :e) -> (Array[:a | :b | :c | :d | :e])
61
+ def f2: (*:a | :b | :c | :d | :e) -> (Array[:a | :b | :c | :d | :e])
62
+ def f3: (*:a | :b | :c | :d | :e) -> (Array[:a | :b | :c | :d | :e])
63
+ def f4: (*:a | :b | :c | :d | :e) -> (Array[:a | :b | :c | :d | :e])
64
+ def f5: (*:a | :b | :c | :d | :e) -> (Array[:a | :b | :c | :d | :e])
65
+ def f6: (*:a | :b | :c | :d | :e) -> (Array[:a | :b | :c | :d | :e])
66
+ def f7: (*:a | :b | :c | :d | :e) -> (Array[:a | :b | :c | :d | :e])
67
+ def f8: (*:a | :b | :c | :d | :e) -> (Array[:a | :b | :c | :d | :e])
68
+ def f9: (*:a | :b | :c | :d | :e) -> (Array[:a | :b | :c | :d | :e])
69
+ def f10: (*:a | :b | :c | :d | :e) -> (Array[:a | :b | :c | :d | :e])
70
+ def dispatch: (*:a | :b | :c | :d | :e) -> (Array[:a | :b | :c | :d | :e])
71
+ end