rdl 2.0.0.rc2 → 2.0.0.rc3

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 (92) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES.md +7 -1
  3. data/README.md +94 -20
  4. data/lib/rdl.rb +4 -1
  5. data/lib/rdl/config.rb +90 -3
  6. data/lib/rdl/info.rb +16 -0
  7. data/lib/rdl/typecheck.rb +207 -79
  8. data/lib/rdl/types/bot.rb +1 -1
  9. data/lib/rdl/types/dependent_arg.rb +17 -8
  10. data/lib/rdl/types/{finitehash.rb → finite_hash.rb} +3 -29
  11. data/lib/rdl/types/generic.rb +1 -37
  12. data/lib/rdl/types/intersection.rb +1 -0
  13. data/lib/rdl/types/lexer.rex +2 -1
  14. data/lib/rdl/types/lexer.rex.rb +4 -1
  15. data/lib/rdl/types/method.rb +2 -12
  16. data/lib/rdl/types/nominal.rb +1 -22
  17. data/lib/rdl/types/non_null.rb +50 -0
  18. data/lib/rdl/types/parser.racc +3 -1
  19. data/lib/rdl/types/parser.tab.rb +222 -190
  20. data/lib/rdl/types/singleton.rb +1 -6
  21. data/lib/rdl/types/structural.rb +1 -10
  22. data/lib/rdl/types/top.rb +1 -2
  23. data/lib/rdl/types/tuple.rb +3 -19
  24. data/lib/rdl/types/type.rb +223 -0
  25. data/lib/rdl/types/union.rb +12 -2
  26. data/lib/rdl/types/var.rb +4 -1
  27. data/lib/rdl/types/wild_query.rb +1 -0
  28. data/lib/rdl/wrap.rb +199 -169
  29. data/lib/rdl_disable.rb +41 -0
  30. data/lib/rdl_types.rb +1 -4
  31. data/{types/ruby-2.x → lib/types/core-ruby-2.x}/_aliases.rb +0 -0
  32. data/{types/ruby-2.x → lib/types/core-ruby-2.x}/abbrev.rb +0 -0
  33. data/{types/ruby-2.x → lib/types/core-ruby-2.x}/array.rb +56 -56
  34. data/{types/ruby-2.x → lib/types/core-ruby-2.x}/base64.rb +0 -0
  35. data/{types/ruby-2.x → lib/types/core-ruby-2.x}/basic_object.rb +0 -0
  36. data/{types/ruby-2.x → lib/types/core-ruby-2.x}/benchmark.rb +0 -0
  37. data/{types/ruby-2.x → lib/types/core-ruby-2.x}/bigdecimal.rb +0 -0
  38. data/{types/ruby-2.x → lib/types/core-ruby-2.x}/bigmath.rb +0 -0
  39. data/{types/ruby-2.x → lib/types/core-ruby-2.x}/bignum.rb +0 -0
  40. data/{types/ruby-2.x → lib/types/core-ruby-2.x}/class.rb +0 -0
  41. data/{types/ruby-2.x → lib/types/core-ruby-2.x}/complex.rb +0 -0
  42. data/{types/ruby-2.x → lib/types/core-ruby-2.x}/coverage.rb +0 -0
  43. data/{types/ruby-2.x → lib/types/core-ruby-2.x}/csv.rb +0 -0
  44. data/{types/ruby-2.x → lib/types/core-ruby-2.x}/date.rb +0 -0
  45. data/{types/ruby-2.x → lib/types/core-ruby-2.x}/dir.rb +0 -0
  46. data/{types/ruby-2.x → lib/types/core-ruby-2.x}/encoding.rb +0 -0
  47. data/{types/ruby-2.x → lib/types/core-ruby-2.x}/enumerable.rb +0 -0
  48. data/{types/ruby-2.x → lib/types/core-ruby-2.x}/enumerator.rb +0 -0
  49. data/{types/ruby-2.x → lib/types/core-ruby-2.x}/exception.rb +0 -0
  50. data/{types/ruby-2.x → lib/types/core-ruby-2.x}/file.rb +0 -0
  51. data/{types/ruby-2.x → lib/types/core-ruby-2.x}/fileutils.rb +0 -0
  52. data/{types/ruby-2.x → lib/types/core-ruby-2.x}/fixnum.rb +0 -0
  53. data/{types/ruby-2.x → lib/types/core-ruby-2.x}/float.rb +26 -26
  54. data/{types/ruby-2.x → lib/types/core-ruby-2.x}/gem.rb +0 -0
  55. data/{types/ruby-2.x → lib/types/core-ruby-2.x}/hash.rb +0 -0
  56. data/{types/ruby-2.x → lib/types/core-ruby-2.x}/integer.rb +8 -8
  57. data/{types/ruby-2.x → lib/types/core-ruby-2.x}/io.rb +0 -0
  58. data/{types/ruby-2.x → lib/types/core-ruby-2.x}/kernel.rb +12 -11
  59. data/{types/ruby-2.x → lib/types/core-ruby-2.x}/marshal.rb +0 -0
  60. data/{types/ruby-2.x → lib/types/core-ruby-2.x}/matchdata.rb +0 -0
  61. data/{types/ruby-2.x → lib/types/core-ruby-2.x}/math.rb +0 -0
  62. data/{types/ruby-2.x → lib/types/core-ruby-2.x}/module.rb +0 -0
  63. data/{types/ruby-2.x → lib/types/core-ruby-2.x}/nil.rb +0 -0
  64. data/{types/ruby-2.x → lib/types/core-ruby-2.x}/numeric.rb +0 -0
  65. data/lib/types/core-ruby-2.x/object.rb +75 -0
  66. data/{types/ruby-2.x → lib/types/core-ruby-2.x}/pathname.rb +0 -0
  67. data/{types/ruby-2.x → lib/types/core-ruby-2.x}/process.rb +0 -0
  68. data/{types/ruby-2.x → lib/types/core-ruby-2.x}/random.rb +0 -0
  69. data/{types/ruby-2.x → lib/types/core-ruby-2.x}/range.rb +0 -0
  70. data/{types/ruby-2.x → lib/types/core-ruby-2.x}/rational.rb +0 -0
  71. data/{types/ruby-2.x → lib/types/core-ruby-2.x}/regexp.rb +0 -0
  72. data/{types/ruby-2.x → lib/types/core-ruby-2.x}/set.rb +0 -0
  73. data/{types/ruby-2.x → lib/types/core-ruby-2.x}/string.rb +0 -0
  74. data/{types/ruby-2.x → lib/types/core-ruby-2.x}/strscan.rb +0 -0
  75. data/{types/ruby-2.x → lib/types/core-ruby-2.x}/symbol.rb +0 -0
  76. data/{types/ruby-2.x → lib/types/core-ruby-2.x}/time.rb +0 -0
  77. data/{types/ruby-2.x → lib/types/core-ruby-2.x}/uri.rb +0 -0
  78. data/{types/ruby-2.x → lib/types/core-ruby-2.x}/yaml.rb +0 -0
  79. data/lib/types/core.rb +4 -0
  80. data/rdl.gemspec +2 -2
  81. data/test/test_le.rb +77 -35
  82. data/test/test_parser.rb +75 -59
  83. data/test/test_rdl.rb +18 -0
  84. data/test/test_typecheck.rb +73 -4
  85. metadata +54 -57
  86. data/lib/rails_types.rb +0 -1
  87. data/types/rails-4.2.1/fixnum.rb +0 -3
  88. data/types/rails-4.2.1/string.rb +0 -3
  89. data/types/rails-tmp/action_dispatch.rb +0 -406
  90. data/types/rails-tmp/active_record.rb +0 -406
  91. data/types/rails-tmp/devise_contracts.rb +0 -216
  92. data/types/ruby-2.x/object.rb +0 -73
@@ -0,0 +1,41 @@
1
+ # Defines RDL methods that do nothing
2
+
3
+ module RDL; end
4
+
5
+ def RDL.config(*args); end
6
+
7
+ class Object
8
+ def pre(*args); end
9
+ def post(*args); end
10
+ def type(*args); end
11
+ def var_type(*args); end
12
+ def rdl_alias(*args); end
13
+ def type_params(*args); end
14
+ def rdl_nowrap(*args); end
15
+ def instantaite!(*args); self; end
16
+ def deinstantaite!(*args); self; end
17
+ def type_cast(*args); self; end
18
+ def type_alias(*args); end
19
+ def rdl_do_typecheck(*args); end
20
+ def rdl_note_type(*args); end
21
+
22
+ def attr_accessor_type(*args)
23
+ args.each_slice(2) { |name, typ| attr_accessor name }
24
+ nil
25
+ end
26
+
27
+ def attr_reader_type(*args)
28
+ args.each_slice(2) { |name, typ| attr_reader name }
29
+ nil
30
+ end
31
+
32
+ alias_method :attr_type, :attr_reader_type
33
+
34
+ def attr_writer_type(*args)
35
+ args.each_slice(2) { |name, typ| attr_writer name }
36
+ nil
37
+ end
38
+
39
+
40
+
41
+ end
@@ -1,4 +1 @@
1
- dir = RUBY_VERSION.split('.')[0] + ".x"
2
-
3
- require_relative "../types/ruby-#{dir}/_aliases.rb" # load type aliases first
4
- Dir[File.dirname(__FILE__) + "/../types/ruby-#{dir}/*.rb"].each { |f| require f }
1
+ require_relative "types/core.rb"
@@ -4,82 +4,82 @@ class Array
4
4
  type_params [:t], :all?
5
5
 
6
6
  type :<<, '(t) -> Array<t>'
7
- type :[], '(Range<Fixnum>) -> Array<t>'
8
- type :[], '(Fixnum or Float) -> t'
9
- type :[], '(Fixnum, Fixnum) -> Array<t>'
7
+ type :[], '(Range<%integer>) -> Array<t>'
8
+ type :[], '(%integer or Float) -> t'
9
+ type :[], '(%integer, %integer) -> Array<t>'
10
10
  type :&, '(Array<u>) -> Array<t>'
11
- type :*, '(Fixnum) -> Array<t>'
11
+ type :*, '(%integer) -> Array<t>'
12
12
  type :*, '(String) -> String'
13
13
  type :+, '(Enumerable<u>) -> Array<u or t>'
14
14
  type :-, '(Array<u>) -> Array<u or t>'
15
- type :slice, '(Range<Fixnum>) -> Array<t>'
16
- type :slice, '(Fixnum) -> t'
17
- type :slice, '(Fixnum, Fixnum) -> Array<t>'
18
- type :[]=, '(Fixnum, t) -> t'
19
- type :[]=, '(Fixnum, Fixnum, t) -> t'
20
- #type :[]=, '(Fixnum, Fixnum, Array<t>) -> Array<t>'
15
+ type :slice, '(Range<%integer>) -> Array<t>'
16
+ type :slice, '(%integer) -> t'
17
+ type :slice, '(%integer, %integer) -> Array<t>'
18
+ type :[]=, '(%integer, t) -> t'
19
+ type :[]=, '(%integer, %integer, t) -> t'
20
+ #type :[]=, '(%integer, %integer, Array<t>) -> Array<t>'
21
21
  #type :[]=, '(Range, Array<t>) -> Array<t>'
22
- type :[]=, '(Range<Fixnum>, t) -> t'
22
+ type :[]=, '(Range<%integer>, t) -> t'
23
23
  type :assoc, '(t) -> Array<t>'
24
- type :at, '(Fixnum) -> t'
24
+ type :at, '(%integer) -> t'
25
25
  type :clear, '() -> Array<t>'
26
- type :map, '() {(t) ->u} -> Array<u>'
26
+ type :map, '() {(t) -> u} -> Array<u>'
27
27
  type :map, '() -> Enumerator<t>'
28
- type :map!, '() {(t) ->u} -> Array<u>'
28
+ type :map!, '() {(t) -> u} -> Array<u>'
29
29
  type :map!, '() -> Enumerator<t>'
30
30
  type :collect, '() { (t) -> u } -> Array<u>'
31
31
  type :collect, '() -> Enumerator<t>'
32
- type :combination, '(Fixnum) { (Array<t>) -> %any } -> Array<t>'
33
- type :combination, '(Fixnum) -> Enumerator<t>'
32
+ type :combination, '(%integer) { (Array<t>) -> %any } -> Array<t>'
33
+ type :combination, '(%integer) -> Enumerator<t>'
34
34
  type :push, '(?t) -> Array<t>'
35
35
  type :compact, '() -> Array<t>'
36
36
  type :compact!, '() -> Array<t>'
37
37
  type :concat, '(Array<t>) -> Array<t>'
38
- type :count, '() -> Fixnum'
39
- type :count, '(t) -> Fixnum'
40
- type :count, '() { (t) -> %bool } -> Fixnum'
41
- type :cycle, '(?Fixnum) { (t) -> %any } -> %any'
42
- type :cycle, '(?Fixnum) -> Enumerator<t>'
38
+ type :count, '() -> %integer'
39
+ type :count, '(t) -> %integer'
40
+ type :count, '() { (t) -> %bool } -> %integer'
41
+ type :cycle, '(?%integer) { (t) -> %any } -> %any'
42
+ type :cycle, '(?%integer) -> Enumerator<t>'
43
43
  type :delete, '(u) -> t'
44
44
  type :delete, '(u) { () -> v } -> t or v'
45
- type :delete_at, '(Fixnum) -> Array<t>'
45
+ type :delete_at, '(%integer) -> Array<t>'
46
46
  type :delete_if, '() { (t) -> %bool } -> Array<t>'
47
47
  type :delete_if, '() -> Enumerator<t>'
48
- type :drop, '(Fixnum) -> Array<t>'
48
+ type :drop, '(%integer) -> Array<t>'
49
49
  type :drop_while, '() { (t) -> %bool } -> Array<t>'
50
50
  type :drop_while, '() -> Enumerator<t>'
51
51
  type :each, '() -> Enumerator<t>'
52
52
  type :each, '() { (t) -> %any } -> Array<t>'
53
- type :each_index, '() { (Fixnum) -> %any } -> Array<t>'
53
+ type :each_index, '() { (%integer) -> %any } -> Array<t>'
54
54
  type :each_index, '() -> Enumerator<t>'
55
55
  type :empty?, '() -> %bool'
56
- type :fetch, '(Fixnum) -> t'
57
- type :fetch, '(Fixnum, u) -> u'
58
- type :fetch, '(Fixnum) { (Fixnum) -> u } -> t or u'
56
+ type :fetch, '(%integer) -> t'
57
+ type :fetch, '(%integer, u) -> u'
58
+ type :fetch, '(%integer) { (%integer) -> u } -> t or u'
59
59
  type :fill, '(t) -> Array<t>'
60
- type :fill, '(t,Fixnum,?Fixnum) -> Array<t>'
61
- type :fill, '(t, Range<Fixnum>) -> Array<t>'
62
- type :fill, '() { (Fixnum) -> t } -> Array<t>'
63
- type :fill, '(Fixnum, ?Fixnum) { (Fixnum) -> t } -> Array<t>'
64
- type :fill, '(Range<Fixnum>) { (Fixnum) -> t } -> Array<t>'
60
+ type :fill, '(t, %integer, ?%integer) -> Array<t>'
61
+ type :fill, '(t, Range<%integer>) -> Array<t>'
62
+ type :fill, '() { (%integer) -> t } -> Array<t>'
63
+ type :fill, '(%integer, ?%integer) { (%integer) -> t } -> Array<t>'
64
+ type :fill, '(Range<%integer>) { (%integer) -> t } -> Array<t>'
65
65
  type :flatten, '() -> Array<%any>' # Can't give a more precise type
66
- type :index, '(u) -> Fixnum'
67
- type :index, '() { (t) -> %bool } -> Fixnum'
66
+ type :index, '(u) -> %integer'
67
+ type :index, '() { (t) -> %bool } -> %integer'
68
68
  type :index, '() -> Enumerator<t>'
69
69
  type :first, '() -> t'
70
- type :first, '(Fixnum) -> Array<t>'
70
+ type :first, '(%integer) -> Array<t>'
71
71
  type :include?, '(u) -> %bool'
72
- type :insert, '(Fixnum, *t) -> Array<t>'
72
+ type :insert, '(%integer, *t) -> Array<t>'
73
73
  type :inspect, '() -> String'
74
74
  type :join, '(?String) -> String'
75
75
  type :keep_if, '() { (t) -> %bool } -> Array<t>'
76
76
  type :last, '() -> t'
77
- type :last, '(Fixnum) -> Array<t>'
77
+ type :last, '(%integer) -> Array<t>'
78
78
  type :member, '(u) -> %bool'
79
79
  type :length, '() -> Fixnum'
80
- type :permutation, '(?Fixnum) -> Enumerator<t>'
81
- type :permutation, '(?Fixnum) { (Array<t>) -> %any } -> Array<t>'
82
- type :pop, '(Fixnum) -> Array<t>'
80
+ type :permutation, '(?%integer) -> Enumerator<t>'
81
+ type :permutation, '(?%integer) { (Array<t>) -> %any } -> Array<t>'
82
+ type :pop, '(%integer) -> Array<t>'
83
83
  type :pop, '() -> t'
84
84
  type :product, '(*Array<u>) -> Array<Array<t or u>>'
85
85
  type :rassoc, '(u) -> t'
@@ -87,41 +87,41 @@ class Array
87
87
  type :reject, '() -> Enumerator<t>'
88
88
  type :reject!, '() { (t) -> %bool } -> Array<t>'
89
89
  type :reject!, '() -> Enumerator<t>'
90
- type :repeated_combination, '(Fixnum) { (Array<t>) -> %any } -> Array<t>'
91
- type :repeated_combination, '(Fixnum) -> Enumerator<t>'
92
- type :repeated_permutation, '(Fixnum) { (Array<t>) -> %any } -> Array<t>'
93
- type :repeated_permutation, '(Fixnum) -> Enumerator<t>'
90
+ type :repeated_combination, '(%integer) { (Array<t>) -> %any } -> Array<t>'
91
+ type :repeated_combination, '(%integer) -> Enumerator<t>'
92
+ type :repeated_permutation, '(%integer) { (Array<t>) -> %any } -> Array<t>'
93
+ type :repeated_permutation, '(%integer) -> Enumerator<t>'
94
94
  type :reverse, '() -> Array<t>'
95
95
  type :reverse!, '() -> Array<t>'
96
96
  type :reverse_each, '() { (t) -> %any } -> Array<t>'
97
97
  type :reverse_each, '() -> Enumerator<t>'
98
98
  type :rindex, '(u) -> t'
99
- type :rindex, '() { (t) -> %bool } -> Fixnum'
99
+ type :rindex, '() { (t) -> %bool } -> %integer'
100
100
  type :rindex, '() -> Enumerator<t>'
101
- type :rotate, '(?Fixnum) -> Array<t>'
102
- type :rotate!, '(?Fixnum) -> Array<t>'
101
+ type :rotate, '(?%integer) -> Array<t>'
102
+ type :rotate!, '(?%integer) -> Array<t>'
103
103
  type :sample, '() -> t'
104
- type :sample, '(Fixnum) -> Array<t>'
104
+ type :sample, '(%integer) -> Array<t>'
105
105
  type :select, '() { (t) -> %bool } -> Array<t>'
106
106
  type :select, '() -> Enumerator<t>'
107
107
  type :select!, '() { (t) -> %bool } -> Array<t>'
108
108
  type :select!, '() -> Enumerator<t>'
109
109
  type :shift, '() -> t'
110
- type :shift, '(Fixnum) -> Array<t>'
110
+ type :shift, '(%integer) -> Array<t>'
111
111
  type :shuffle, '() -> Array<t>'
112
112
  type :shuffle!, '() -> Array<t>'
113
113
  rdl_alias :size, :length
114
114
  rdl_alias :slice, :[]
115
- type :slice!, '(Range<Fixnum>) -> Array<t>'
116
- type :slice!, '(Fixnum, Fixnum) -> Array<t>'
117
- type :slice!, '(Fixnum or Float) -> t'
115
+ type :slice!, '(Range<%integer>) -> Array<t>'
116
+ type :slice!, '(%integer, %integer) -> Array<t>'
117
+ type :slice!, '(%integer or Float) -> t'
118
118
  type :sort, '() -> Array<t>'
119
- type :sort, '() { (t,t) -> Fixnum } -> Array<t>'
119
+ type :sort, '() { (t,t) -> %integer } -> Array<t>'
120
120
  type :sort!, '() -> Array<t>'
121
- type :sort!, '() { (t,t) -> Fixnum } -> Array<t>'
121
+ type :sort!, '() { (t,t) -> %integer } -> Array<t>'
122
122
  type :sort_by!, '() { (t) -> u } -> Array<t>'
123
123
  type :sort_by!, '() -> Enumerator<t>'
124
- type :take, '(Fixnum) -> Array<t>'
124
+ type :take, '(%integer) -> Array<t>'
125
125
  type :take_while, '() { (t) ->%bool } -> Array<t>'
126
126
  type :take_while, '() -> Enumerator<t>'
127
127
  type :to_a, '() -> Array<t>'
@@ -131,7 +131,7 @@ class Array
131
131
  type :uniq, '() -> Array<t>'
132
132
  type :uniq!, '() -> Array<t>'
133
133
  type :unshift, '(*t) -> Array<t>'
134
- type :values_at, '(*Range<Fixnum> or Fixnum) -> Array<t>'
134
+ type :values_at, '(*Range<%integer> or %integer) -> Array<t>'
135
135
  type :zip, '(*Array<u>) -> Array<Array<t or u>>'
136
136
  type :|, '(Array<u>) -> Array<t or u>'
137
137
  end
@@ -1,10 +1,10 @@
1
1
  class Float < Numeric
2
2
  rdl_nowrap
3
3
 
4
- type :%, '(%integer x {{ x!=0 }}) -> Float'
5
- type :%, '(Float x {{ x!=0 }}) -> Float'
6
- type :%, '(Rational x {{ x!=0 }}) -> Float'
7
- type :%, '(BigDecimal x {{ x!=0 && !self.infinite? && !self.nan? }}) -> BigDecimal'
4
+ type :%, '(%integer x {{ x != 0 }}) -> Float'
5
+ type :%, '(Float x {{ x != 0 }}) -> Float'
6
+ type :%, '(Rational x {{ x != 0 }}) -> Float'
7
+ type :%, '(BigDecimal x {{ x != 0 && !self.infinite? && !self.nan? }}) -> BigDecimal'
8
8
 
9
9
  type :*, '(%integer) -> Float'
10
10
  type :*, '(Float) -> Float'
@@ -20,7 +20,7 @@ class Float < Numeric
20
20
  pre(:**) { |x| x!=BigDecimal::INFINITY && if self<0 then x<=-1||x>=0 else true end}
21
21
  post(:**) { |x| x.real?}
22
22
  type :**, '(Complex) -> Complex'
23
- pre(:**) { |x| x!=0 && if (x.real.is_a?(BigDecimal)||x.imaginary.is_a?(BigDecimal)) then (if x.real.is_a?(Float) then (x.real!=Float::INFINITY && !(x.real.nan?)) elsif(x.imaginary.is_a?(Float)) then x.imaginary!=Float::INFINITY && !(x.imaginary.nan?) else true end) && self!=Float::INFINITY && !(self.nan?) else true end}
23
+ pre(:**) { |x| x != 0 && if (x.real.is_a?(BigDecimal)||x.imaginary.is_a?(BigDecimal)) then (if x.real.is_a?(Float) then (x.real!=Float::INFINITY && !(x.real.nan?)) elsif(x.imaginary.is_a?(Float)) then x.imaginary!=Float::INFINITY && !(x.imaginary.nan?) else true end) && self!=Float::INFINITY && !(self.nan?) else true end}
24
24
 
25
25
  type :+, '(%integer) -> Float'
26
26
  type :+, '(Float) -> Float'
@@ -38,11 +38,11 @@ class Float < Numeric
38
38
 
39
39
  type :-, '() -> Float'
40
40
 
41
- type :/, '(%integer x {{ x!=0 }}) -> Float'
42
- type :/, '(Float x {{ x!=0 }}) -> Float'
43
- type :/, '(Rational x {{ x!=0 }}) -> Float'
44
- type :/, '(BigDecimal x {{ x!=0 && !self.infinite? && !self.nan? }}) -> BigDecimal'
45
- type :/, '(Complex x {{ x!=0 }}) -> Complex'
41
+ type :/, '(%integer x {{ x != 0 }}) -> Float'
42
+ type :/, '(Float x {{ x != 0 }}) -> Float'
43
+ type :/, '(Rational x {{ x != 0 }}) -> Float'
44
+ type :/, '(BigDecimal x {{ x != 0 && !self.infinite? && !self.nan? }}) -> BigDecimal'
45
+ type :/, '(Complex x {{ x != 0 }}) -> Complex'
46
46
  pre(:/) { |x| if (x.real.is_a?(BigDecimal)||x.imaginary.is_a?(BigDecimal)) then (if x.real.is_a?(Float) then (x.real!=Float::INFINITY && !(x.real.nan?)) elsif(x.imaginary.is_a?(Float)) then x.imaginary!=Float::INFINITY && !(x.imaginary.nan?) else true end) && self!=Float::INFINITY && !(self.nan?) else true end && if (x.real.is_a?(Rational) && x.imaginary.is_a?(Float)) then !x.imaginary.nan? else true end}
47
47
 
48
48
  type :<, '(%integer) -> %bool'
@@ -84,13 +84,13 @@ class Float < Numeric
84
84
 
85
85
  type :abs2, '() -> Float r {{ r>=0 }}'
86
86
 
87
- type :div, '(%integer x {{ x!=0 && !self.infinite? && !self.nan? }}) -> %integer'
88
- type :div, '(Float x {{ x!=0 && !self.infinite? && !self.nan? }}) -> %integer'
89
- type :div, '(Rational x {{ x!=0 && !self.infinite? && !self.nan? }}) -> %integer'
90
- type :div, '(BigDecimal x {{ x!=0 && !x.nan? && !self.infinite? && !self.nan? }}) -> %integer'
87
+ type :div, '(%integer x {{ x != 0 && !self.infinite? && !self.nan? }}) -> %integer'
88
+ type :div, '(Float x {{ x != 0 && !self.infinite? && !self.nan? }}) -> %integer'
89
+ type :div, '(Rational x {{ x != 0 && !self.infinite? && !self.nan? }}) -> %integer'
90
+ type :div, '(BigDecimal x {{ x != 0 && !x.nan? && !self.infinite? && !self.nan? }}) -> %integer'
91
91
 
92
92
  type :divmod, '(%real) -> [%real, %real]'
93
- pre(:divmod) { |x| x!=0 && if x.is_a?(Float) then !x.nan? else true end && self!=Float::INFINITY && !self.nan?}
93
+ pre(:divmod) { |x| x != 0 && if x.is_a?(Float) then !x.nan? else true end && self!=Float::INFINITY && !self.nan?}
94
94
 
95
95
  type :angle, '() -> %numeric'
96
96
  post(:angle) { |r,x| r == 0 || r == Math::PI || r == Float::NAN}
@@ -114,7 +114,7 @@ class Float < Numeric
114
114
  type :fdiv, '(Rational) -> Float'
115
115
  type :fdiv, '(BigDecimal x {{ !self.infinite? && !self.nan? }}) -> BigDecimal'
116
116
  type :fdiv, '(Complex) -> Complex'
117
- pre(:fdiv) { |x| x!=0 && if (x.real.is_a?(BigDecimal)||x.imaginary.is_a?(BigDecimal)) then (if x.real.is_a?(Float) then (x.real!=Float::INFINITY && !(x.real.nan?)) elsif(x.imaginary.is_a?(Float)) then x.imaginary!=Float::INFINITY && !(x.imaginary.nan?) else true end) && self!=Float::INFINITY && !(self.nan?) else true end && if (x.real.is_a?(Rational) && x.imaginary.is_a?(Float)) then !x.imaginary.nan? else true end}
117
+ pre(:fdiv) { |x| x != 0 && if (x.real.is_a?(BigDecimal)||x.imaginary.is_a?(BigDecimal)) then (if x.real.is_a?(Float) then (x.real!=Float::INFINITY && !(x.real.nan?)) elsif(x.imaginary.is_a?(Float)) then x.imaginary!=Float::INFINITY && !(x.imaginary.nan?) else true end) && self!=Float::INFINITY && !(self.nan?) else true end && if (x.real.is_a?(Rational) && x.imaginary.is_a?(Float)) then !x.imaginary.nan? else true end}
118
118
 
119
119
  type :finite?, '() -> %bool'
120
120
 
@@ -132,10 +132,10 @@ class Float < Numeric
132
132
  type :magnitude, '() -> Float'
133
133
  post(:magnitude) { |r,x| r>=0 }
134
134
 
135
- type :modulo, '(%integer x {{ x!=0 }}) -> Float'
136
- type :modulo, '(Float x {{ x!=0 }}) -> Float'
137
- type :modulo, '(Rational x {{ x!=0 }}) -> Float'
138
- type :modulo, '(BigDecimal x {{ x!=0 && !self.infinite? && !self.nan? }}) -> BigDecimal'
135
+ type :modulo, '(%integer x {{ x != 0 }}) -> Float'
136
+ type :modulo, '(Float x {{ x != 0 }}) -> Float'
137
+ type :modulo, '(Rational x {{ x != 0 }}) -> Float'
138
+ type :modulo, '(BigDecimal x {{ x != 0 && !self.infinite? && !self.nan? }}) -> BigDecimal'
139
139
 
140
140
  type :nan?, '() -> %bool'
141
141
 
@@ -148,11 +148,11 @@ class Float < Numeric
148
148
 
149
149
  type :prev_float, '() -> Float'
150
150
 
151
- type :quo, '(%integer x {{ x!=0 }}) -> Float'
152
- type :quo, '(Float x {{ x!=0 }}) -> Float'
153
- type :quo, '(Rational x {{ x!=0 }}) -> Float'
154
- type :quo, '(BigDecimal x {{ x!=0 && !self.infinite? && !self.nan? }}) -> BigDecimal'
155
- type :quo, '(Complex x {{ x!=0 }}) -> Complex'
151
+ type :quo, '(%integer x {{ x != 0 }}) -> Float'
152
+ type :quo, '(Float x {{ x != 0 }}) -> Float'
153
+ type :quo, '(Rational x {{ x != 0 }}) -> Float'
154
+ type :quo, '(BigDecimal x {{ x != 0 && !self.infinite? && !self.nan? }}) -> BigDecimal'
155
+ type :quo, '(Complex x {{ x != 0 }}) -> Complex'
156
156
  pre(:quo) { |x| if (x.real.is_a?(BigDecimal)||x.imaginary.is_a?(BigDecimal)) then (if x.real.is_a?(Float) then (x.real!=Float::INFINITY && !(x.real.nan?)) elsif(x.imaginary.is_a?(Float)) then x.imaginary!=Float::INFINITY && !(x.imaginary.nan?) else true end) && self!=Float::INFINITY && !(self.nan?) else true end && if (x.real.is_a?(Rational) && x.imaginary.is_a?(Float)) then !x.imaginary.nan? else true end}
157
157
 
158
158
  type :rationalize, '() -> Rational'
@@ -165,7 +165,7 @@ class Float < Numeric
165
165
  pre(:round) { !self.infinite? && !self.nan?}
166
166
 
167
167
  type :round, '(%numeric) -> %numeric'
168
- pre(:round) { |x| x!=0 && if x.is_a?(Complex) then x.imaginary==0 && (if x.real.is_a?(Float)||x.real.is_a?(BigDecimal) then !x.real.infinite? && !x.real.nan? else true end) elsif x.is_a?(Float) then x!=Float::INFINITY && !x.nan? elsif x.is_a?(BigDecimal) then x!=BigDecimal::INFINITY && !x.nan? else true end} #Also, x must be in range [-2**31, 2**31].
168
+ pre(:round) { |x| x != 0 && if x.is_a?(Complex) then x.imaginary==0 && (if x.real.is_a?(Float)||x.real.is_a?(BigDecimal) then !x.real.infinite? && !x.real.nan? else true end) elsif x.is_a?(Float) then x!=Float::INFINITY && !x.nan? elsif x.is_a?(BigDecimal) then x!=BigDecimal::INFINITY && !x.nan? else true end} #Also, x must be in range [-2**31, 2**31].
169
169
 
170
170
  type :to_f, '() -> Float'
171
171
 
@@ -59,13 +59,13 @@ class Integer < Numeric
59
59
  type :<=, '(BigDecimal) -> %bool'
60
60
 
61
61
  type :<=>, '(%integer) -> Object'
62
- post(:<=>) { |r,x| r == -1 || r==0 || r==1}
62
+ post(:<=>) { |r,x| r == -1 || r == 0 || r == 1 }
63
63
  type :<=>, '(Float) -> Object'
64
- post(:<=>) { |r,x| r == -1 || r==0 || r==1}
64
+ post(:<=>) { |r,x| r == -1 || r == 0 || r == 1 }
65
65
  type :<=>, '(Rational) -> Object'
66
- post(:<=>) { |r,x| r == -1 || r==0 || r==1}
66
+ post(:<=>) { |r,x| r == -1 || r == 0 || r == 1 }
67
67
  type :<=>, '(BigDecimal) -> Object'
68
- post(:<=>) { |r,x| r == -1 || r==0 || r==1}
68
+ post(:<=>) { |r,x| r == -1 || r == 0 || r == 1 }
69
69
 
70
70
  type :==, '(Object) -> %bool'
71
71
 
@@ -81,18 +81,18 @@ class Integer < Numeric
81
81
  type :>=, '(Rational) -> %bool'
82
82
  type :>=, '(BigDecimal) -> %bool'
83
83
 
84
- type :>>, '(%integer) -> %integer r {{ r>=0 }}'
84
+ type :>>, '(%integer) -> %integer r {{ r >= 0 }}'
85
85
 
86
86
  type :[], '(%integer) -> Fixnum'
87
87
  post(:[]) { |r,x| r == 0 || r==1}
88
88
  type :[], '(Rational) -> Fixnum'
89
89
  post(:[]) { |r,x| r == 0 || r==1}
90
90
  type :[], '(Float) -> Fixnum'
91
- pre(:[]) { |x| x!=Float::INFINITY && !x.nan? }
91
+ pre(:[]) { |x| x != Float::INFINITY && !x.nan? }
92
92
  post(:[]) { |r,x| r == 0 || r==1}
93
93
  type :[], '(BigDecimal) -> Fixnum'
94
- pre(:[]) { |x| x!=BigDecimal::INFINITY && !x.nan? }
95
- post(:[]) { |r,x| r == 0 || r==1}
94
+ pre(:[]) { |x| x != BigDecimal::INFINITY && !x.nan? }
95
+ post(:[]) { |r,x| r == 0 || r == 1 }
96
96
 
97
97
  type :^, '(%integer) -> %integer'
98
98
 
@@ -20,7 +20,7 @@ module Kernel
20
20
  type 'self.__dir__', '() -> String or nil'
21
21
  type 'self.__method__', '() -> Symbol or nil'
22
22
  type 'self.`', '(String) -> String'
23
- type 'self.abort', '(?String msg) -> %any'
23
+ type 'self.abort', '(?String msg) -> %bot'
24
24
  type 'self.at_exit', '() { () -> %any} -> Proc' # TODO: Fix proc
25
25
  type 'self.autoload', '(String or Symbol module, String filename) -> nil'
26
26
  type 'self.autoload?', '(Symbol or String name) -> String or nil'
@@ -33,12 +33,12 @@ module Kernel
33
33
  # type 'self.catch' # TODO
34
34
  type 'self.eval', '(String, ?Binding, ?String filename, ?Fixnum lineno) -> %any'
35
35
  # type 'self.exec' #TODO
36
- type 'self.exit', '(Fixnum or %bool status) -> %any'
37
- type 'self.exit!', '(Fixnum or %bool status) -> %any'
38
- type 'self.fail', '() -> %any'
39
- type 'self.fail', '(String) -> %any'
40
- type 'self.fail', '(Class, Array<String>) -> %any'
41
- type 'self.fail', '(Class, String, Array<String>) -> %any'
36
+ type 'self.exit', '(Fixnum or %bool status) -> %bot'
37
+ type 'self.exit!', '(Fixnum or %bool status) -> %bot'
38
+ type 'self.fail', '() -> %bot'
39
+ type 'self.fail', '(String) -> %bot'
40
+ type 'self.fail', '(Class, Array<String>) -> %bot'
41
+ type 'self.fail', '(Class, String, Array<String>) -> %bot'
42
42
  # type 'self.fail', '(String or [exception : () -> String], ?String, ?Array<String>) -> %any'
43
43
  # type 'self.fork' #TODO
44
44
  type 'self.format', '(String format, *%any args) -> String'
@@ -58,7 +58,7 @@ module Kernel
58
58
  type(:proc, "() {(*%any) -> %any} -> Proc") # TODO more precise
59
59
  type 'self.putc', '(Fixnum) -> Fixnum'
60
60
  type 'self.puts', '(*[to_s : () -> String]) -> nil'
61
- type 'self.raise', '() -> %any'
61
+ type 'self.raise', '() -> %bot'
62
62
  # type 'self.raise', '(String or [exception : () -> String], ?String, ?Array<String>) -> %any'
63
63
  # TODO: above same as fail?
64
64
  type 'self.rand', '(Fixnum or Range max) -> Numeric'
@@ -81,9 +81,10 @@ module Kernel
81
81
  # type 'self.trap' # TODO
82
82
  # type 'self.untrace_var' # TODO
83
83
  type 'self.warn', '(*String msg) -> nil'
84
- type :raise, '() -> nil'
85
- type :raise, '(String) -> nil'
86
- type :raise, '(Class, String, Array<String>) -> nil'
84
+ type :clone, '() -> self'
85
+ type :raise, '() -> %bot'
86
+ type :raise, '(String) -> %bot'
87
+ type :raise, '(Class, String, Array<String>) -> %bot'
87
88
  type :send, '(String or Symbol, *%any) -> %any'
88
89
  type :send, '(String or Symbol, *%any) { (*%any) -> %any } -> %any'
89
90
  end