rsense-core 0.5.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 (137) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +22 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +1 -0
  5. data/README.md +35 -0
  6. data/Rakefile +84 -0
  7. data/TypeAnnotation.tokens +41 -0
  8. data/build.xml +84 -0
  9. data/build_lib/antlr-3.2.jar +0 -0
  10. data/lib/jars/ant-1.7.0.jar +0 -0
  11. data/lib/jars/ant-launcher-1.7.0.jar +0 -0
  12. data/lib/jars/antlr-runtime-3.2.jar +0 -0
  13. data/lib/jars/bsf-2.3.0.jar +0 -0
  14. data/lib/rsense-core.rb +28 -0
  15. data/lib/rsense.jar +0 -0
  16. data/lib/rsense/core.rb +5 -0
  17. data/lib/rsense/core/version.rb +5 -0
  18. data/lib/rsense/parser.rb +6 -0
  19. data/lib/rsense/ruby.rb +19 -0
  20. data/lib/rsense/typing.rb +13 -0
  21. data/lib/rsense/typing/annotation.rb +20 -0
  22. data/lib/rsense/typing/runtime.rb +23 -0
  23. data/lib/rsense/typing/vertex.rb +15 -0
  24. data/lib/rsense/util.rb +9 -0
  25. data/rsense-core.gemspec +30 -0
  26. data/src/org/cx4a/rsense/CodeAssist.java +744 -0
  27. data/src/org/cx4a/rsense/CodeAssistError.java +31 -0
  28. data/src/org/cx4a/rsense/CodeAssistResult.java +42 -0
  29. data/src/org/cx4a/rsense/CodeCompletionResult.java +65 -0
  30. data/src/org/cx4a/rsense/FindDefinitionResult.java +24 -0
  31. data/src/org/cx4a/rsense/LoadResult.java +19 -0
  32. data/src/org/cx4a/rsense/Main.java +916 -0
  33. data/src/org/cx4a/rsense/Options.java +353 -0
  34. data/src/org/cx4a/rsense/Project.java +103 -0
  35. data/src/org/cx4a/rsense/TypeInferenceResult.java +25 -0
  36. data/src/org/cx4a/rsense/WhereResult.java +19 -0
  37. data/src/org/cx4a/rsense/parser/TypeAnnotation.g +221 -0
  38. data/src/org/cx4a/rsense/parser/TypeAnnotationLexer.java +1759 -0
  39. data/src/org/cx4a/rsense/parser/TypeAnnotationParser.java +2025 -0
  40. data/src/org/cx4a/rsense/ruby/Block.java +10 -0
  41. data/src/org/cx4a/rsense/ruby/Context.java +75 -0
  42. data/src/org/cx4a/rsense/ruby/DynamicMethod.java +10 -0
  43. data/src/org/cx4a/rsense/ruby/DynamicScope.java +51 -0
  44. data/src/org/cx4a/rsense/ruby/Frame.java +95 -0
  45. data/src/org/cx4a/rsense/ruby/IRubyObject.java +17 -0
  46. data/src/org/cx4a/rsense/ruby/LocalScope.java +43 -0
  47. data/src/org/cx4a/rsense/ruby/MetaClass.java +50 -0
  48. data/src/org/cx4a/rsense/ruby/Ruby.java +242 -0
  49. data/src/org/cx4a/rsense/ruby/RubyClass.java +146 -0
  50. data/src/org/cx4a/rsense/ruby/RubyModule.java +255 -0
  51. data/src/org/cx4a/rsense/ruby/RubyObject.java +94 -0
  52. data/src/org/cx4a/rsense/ruby/Scope.java +7 -0
  53. data/src/org/cx4a/rsense/ruby/SpecialObject.java +15 -0
  54. data/src/org/cx4a/rsense/ruby/Visibility.java +17 -0
  55. data/src/org/cx4a/rsense/typing/Graph.java +1690 -0
  56. data/src/org/cx4a/rsense/typing/Propagation.java +73 -0
  57. data/src/org/cx4a/rsense/typing/Template.java +84 -0
  58. data/src/org/cx4a/rsense/typing/TemplateAttribute.java +158 -0
  59. data/src/org/cx4a/rsense/typing/TypeSet.java +48 -0
  60. data/src/org/cx4a/rsense/typing/annotation/ClassType.java +57 -0
  61. data/src/org/cx4a/rsense/typing/annotation/MethodType.java +79 -0
  62. data/src/org/cx4a/rsense/typing/annotation/TypeAnnotation.java +4 -0
  63. data/src/org/cx4a/rsense/typing/annotation/TypeAny.java +7 -0
  64. data/src/org/cx4a/rsense/typing/annotation/TypeApplication.java +37 -0
  65. data/src/org/cx4a/rsense/typing/annotation/TypeConstraint.java +29 -0
  66. data/src/org/cx4a/rsense/typing/annotation/TypeExpression.java +11 -0
  67. data/src/org/cx4a/rsense/typing/annotation/TypeIdentity.java +59 -0
  68. data/src/org/cx4a/rsense/typing/annotation/TypeOptional.java +22 -0
  69. data/src/org/cx4a/rsense/typing/annotation/TypePragma.java +22 -0
  70. data/src/org/cx4a/rsense/typing/annotation/TypeSplat.java +22 -0
  71. data/src/org/cx4a/rsense/typing/annotation/TypeTuple.java +35 -0
  72. data/src/org/cx4a/rsense/typing/annotation/TypeUnion.java +23 -0
  73. data/src/org/cx4a/rsense/typing/annotation/TypeVariable.java +44 -0
  74. data/src/org/cx4a/rsense/typing/runtime/AliasMethod.java +94 -0
  75. data/src/org/cx4a/rsense/typing/runtime/AnnotationHelper.java +69 -0
  76. data/src/org/cx4a/rsense/typing/runtime/AnnotationResolver.java +523 -0
  77. data/src/org/cx4a/rsense/typing/runtime/Array.java +84 -0
  78. data/src/org/cx4a/rsense/typing/runtime/ClassTag.java +27 -0
  79. data/src/org/cx4a/rsense/typing/runtime/DefaultMethod.java +115 -0
  80. data/src/org/cx4a/rsense/typing/runtime/Hash.java +131 -0
  81. data/src/org/cx4a/rsense/typing/runtime/LoopTag.java +21 -0
  82. data/src/org/cx4a/rsense/typing/runtime/Method.java +32 -0
  83. data/src/org/cx4a/rsense/typing/runtime/MonomorphicObject.java +77 -0
  84. data/src/org/cx4a/rsense/typing/runtime/ObjectAllocator.java +40 -0
  85. data/src/org/cx4a/rsense/typing/runtime/PolymorphicObject.java +90 -0
  86. data/src/org/cx4a/rsense/typing/runtime/Proc.java +100 -0
  87. data/src/org/cx4a/rsense/typing/runtime/RuntimeHelper.java +1339 -0
  88. data/src/org/cx4a/rsense/typing/runtime/SpecialMethod.java +119 -0
  89. data/src/org/cx4a/rsense/typing/runtime/TypeVarMap.java +112 -0
  90. data/src/org/cx4a/rsense/typing/runtime/VertexHolder.java +48 -0
  91. data/src/org/cx4a/rsense/typing/vertex/CallVertex.java +122 -0
  92. data/src/org/cx4a/rsense/typing/vertex/MultipleAsgnVertex.java +23 -0
  93. data/src/org/cx4a/rsense/typing/vertex/PassThroughVertex.java +20 -0
  94. data/src/org/cx4a/rsense/typing/vertex/SValueVertex.java +24 -0
  95. data/src/org/cx4a/rsense/typing/vertex/SplatVertex.java +24 -0
  96. data/src/org/cx4a/rsense/typing/vertex/ToAryVertex.java +24 -0
  97. data/src/org/cx4a/rsense/typing/vertex/TypeVarVertex.java +22 -0
  98. data/src/org/cx4a/rsense/typing/vertex/Vertex.java +221 -0
  99. data/src/org/cx4a/rsense/typing/vertex/YieldVertex.java +70 -0
  100. data/src/org/cx4a/rsense/util/HereDocReader.java +48 -0
  101. data/src/org/cx4a/rsense/util/Logger.java +111 -0
  102. data/src/org/cx4a/rsense/util/NodeUtil.java +198 -0
  103. data/src/org/cx4a/rsense/util/SourceLocation.java +70 -0
  104. data/src/org/cx4a/rsense/util/StringUtil.java +63 -0
  105. data/src/resources/org/cx4a/rsense/rsense.properties +1 -0
  106. data/stubs/1.8/_builtin.rb +3006 -0
  107. data/stubs/1.8/bigdecimal.rb +131 -0
  108. data/stubs/1.8/cgi.rb +257 -0
  109. data/stubs/1.8/date.rb +147 -0
  110. data/stubs/1.8/optparse.rb +113 -0
  111. data/stubs/1.8/rational.rb +47 -0
  112. data/stubs/1.8/set.rb +94 -0
  113. data/stubs/1.8/socket.rb +461 -0
  114. data/stubs/1.8/stringio.rb +129 -0
  115. data/test/data/a file.rb +1 -0
  116. data/test/data/benchmark.rb +12 -0
  117. data/test/data/crlf.rb +5 -0
  118. data/test/data/test.rb +19 -0
  119. data/test/script/all.rsense +2 -0
  120. data/test/script/array_dynamic.rsense +25 -0
  121. data/test/script/block_nested.rsense +7 -0
  122. data/test/script/builtin.rsense +785 -0
  123. data/test/script/class_method_partial_update.rsense +52 -0
  124. data/test/script/class_partial_update.rsense +17 -0
  125. data/test/script/find-definition.rsense +72 -0
  126. data/test/script/method_arg_onearg.rsense +6 -0
  127. data/test/script/method_arg_optional.rsense +7 -0
  128. data/test/script/method_partial_update.rsense +14 -0
  129. data/test/script/method_yield_arrayarg.rsense +8 -0
  130. data/test/script/method_yield_arrayarg_expand.rsense +8 -0
  131. data/test/script/method_yield_arrayarg_splat.rsense +17 -0
  132. data/test/script/misc.rsense +2 -0
  133. data/test/script/proc_higher_order.rsense +22 -0
  134. data/test/script/regression.rsense +95 -0
  135. data/test/script/stdlib.rsense +66 -0
  136. data/test/script/where.rsense +41 -0
  137. metadata +315 -0
@@ -0,0 +1,129 @@
1
+ class StringIO < Data
2
+ ##% self.new(?String, ?a) -> StringIO
3
+ def self.new(string = '', mode = 'r+') super() end
4
+ ##% self.open(?String, ?a) -> StringIO
5
+ def self.open(string = '', mode = 'r+') super() end
6
+ ##% self.open(?String, ?a) {StringIO -> ?} -> StringIO
7
+ def self.open(string = '', mode = 'r+')
8
+ io = StringIO.new
9
+ yield io
10
+ io
11
+ end
12
+
13
+ ##% "<<"(a) -> self
14
+ def <<(object) self end
15
+ ##% binmode() -> self
16
+ def binmode() self end
17
+ ##% bytes() -> Enumerator<self, Fixnum>
18
+ def bytes() Enumerator.new end
19
+ ##% each_char() {Fixnum -> ?} -> self
20
+ ##% each_char() -> Enumerator<self, Fixnum>
21
+ def each_char() yield 0; self end
22
+ alias :chars :each_char
23
+ ##% clone() -> IO
24
+ def clone() self end
25
+ alias :dup :clone
26
+ ##% close() -> nil
27
+ def close() end
28
+ ##% close_read() -> nil
29
+ def close_read() end
30
+ ##% close_write() -> nil
31
+ def close_write() end
32
+ ##% closed?() -> Boolean
33
+ def closed?() BOOLEAN end
34
+ ##% each(?String) {String -> ?} -> self
35
+ ##% each(?String) -> Enumerator<self, String>
36
+ def each(rs = $/) yield ''; self end
37
+ alias :each_line :each
38
+ ##% each_byte() {Fixnum -> ?} -> self
39
+ ##% each_byte() -> Enumerator<self, Fixnum>
40
+ def each_byte() yield 0; self end
41
+ ##% eof() -> Boolean
42
+ def eof() BOOLEAN end
43
+ alias :eof? :eof
44
+ def fcntl() nil end
45
+ ##% fileno() -> nil
46
+ def fileno() nil end
47
+ alias :to_i :fileno
48
+ ##% flush() -> self
49
+ def flush() self end
50
+ ##% fsync() -> Integer
51
+ def fsync() 0 end
52
+ ##% getbyte() -> Fixnum
53
+ def getbyte() 0 end
54
+ ##% getc() -> Fixnum
55
+ def getc() 0 end
56
+ ##% gets(?String) -> String
57
+ def gets(rs = $/) '' end
58
+ ##% isatty() -> FalseClass
59
+ def isatty() FALSE end
60
+ alias :tty? :isatty
61
+ ##% size() -> Integer
62
+ def size() 0 end
63
+ ##% length() -> Integer
64
+ def length() 0 end
65
+ ##% lineno() -> Integer
66
+ def lineno() 0 end
67
+ ##% lineno=(Integer) -> nil
68
+ def lineno=(number) end
69
+ ##% lines(?String) -> Enumerator<self, String>
70
+ def lines(rs = $/) Enumerator.new end
71
+ ##% path() -> nil
72
+ def path() 0 end
73
+ ##% pid() -> Integer
74
+ def pid() 0 end
75
+ ##% pos() -> Integer
76
+ alias :tell :pos
77
+ ##% pos=(Integer) -> Integer
78
+ def pos=(n) end
79
+ ##% print(*a) -> nil
80
+ def print(*arg) end
81
+ ##% printf(String, *a) -> nil
82
+ def printf(format, *arg) end
83
+ ##% putc<c | c <= Integer>(c) -> c
84
+ def putc(ch) ch end
85
+ ##% puts(*a) -> nil
86
+ def puts(*obj) end
87
+ ##% read(?Integer, ?String) -> String
88
+ def read(length = nil, outbuf = '') '' end
89
+ ##% readbyte() -> Fixnum
90
+ def readbyte() 0 end
91
+ ##% readchar() -> Fixnum
92
+ def readchar() 0 end
93
+ ##% readline(?String) -> String
94
+ def readline(rs = $/) '' end
95
+ ##% readlines(?String) -> Array<String>
96
+ def readlines(rs = $/) [''] end
97
+ ##% readpartial(?Integer, ?String) -> String
98
+ def readpartial(maxlen, outbuf = '') '' end
99
+ ##% reopen(IO) -> self
100
+ ##% reopen(String, ?a) -> self
101
+ def reopen(*) self end
102
+ ##% rewind() -> Integer
103
+ def rewind() 0 end
104
+ ##% seek(Integer, ?Fixnum) -> Fixnum
105
+ def seek(offset, whence = IO::SEEK_SET) 0 end
106
+ ##% string() -> String
107
+ def string() '' end
108
+ ##% string=(String) -> ?
109
+ def string=(buf) nil end
110
+ ##% sync() -> Boolean
111
+ def sync() BOOLEAN end
112
+ ##% sync=(Boolean) -> Boolean
113
+ def sync=(newstate) newstate end
114
+ ##% sysread(Integer, ?String) -> String
115
+ def sysread(maxlen, outbuf = '') '' end
116
+ ##% sysseek(Integer, ?Fixnum) -> Fixnum
117
+ def sysseek(offset, whence = IO::SEEK_SET) 0 end
118
+ # FIXME to_s
119
+ ##% syswrite(a) -> Integer
120
+ def syswrite(string) 0 end
121
+ ##% truncate(Integer) -> Integer
122
+ def truncate(len) 0 end
123
+ ##% ungetc(a) -> nil
124
+ def ungetc(char) end
125
+ # FIXME to_s
126
+ ##% write(a) -> Integer
127
+ def write(str) 0 end
128
+ # FIXME to_s
129
+ end
@@ -0,0 +1 @@
1
+ 1.
@@ -0,0 +1,12 @@
1
+ require 'cgi'
2
+ require 'rexml/document'
3
+ require 'optparse'
4
+ require 'csv'
5
+ require 'stringio'
6
+ require 'socket'
7
+ require 'matrix'
8
+ require 'yaml'
9
+ require 'webrick'
10
+ require 'tsort'
11
+ require 'date'
12
+ require 'erb'
data/test/data/crlf.rb ADDED
@@ -0,0 +1,5 @@
1
+ File.open('foo.txt') do |f|
2
+ f.each do |line|
3
+ line.
4
+ end
5
+ end
data/test/data/test.rb ADDED
@@ -0,0 +1,19 @@
1
+ require 'homesick'
2
+ hs = Homesick.new
3
+ hs_|_
4
+
5
+ #require 'pry'
6
+ #pried = Pry.new
7
+ #pried
8
+
9
+ #require 'pathname'
10
+ #
11
+ #pth = Pathname.new('foo.rb')
12
+ #pth
13
+
14
+ #File.open('foo.txt') { |f|
15
+ # f.each { |line|
16
+ # line
17
+ # }
18
+ #}
19
+
@@ -0,0 +1,2 @@
1
+ script *.rsense
2
+
@@ -0,0 +1,25 @@
1
+ type-inference --test=Array.DynamicAccess1 --should-be=Fixnum
2
+ a = []
3
+ a << 1
4
+ a[0]_|_
5
+ EOF
6
+
7
+ type-inference --test=Array.DynamicAccess2 --should-be=Fixnum,String
8
+ a = []
9
+ a << 1
10
+ a << ''
11
+ a[0]_|_
12
+ EOF
13
+
14
+ type-inference --test=Array.DynamicAccess3 --should-be=Fixnum,String
15
+ a = ['']
16
+ a << 1
17
+ a[0]_|_
18
+ EOF
19
+
20
+ type-inference --test=Array.DynamicAccess4 --should-be=Fixnum
21
+ a = []
22
+ b = a[0]
23
+ a << 1
24
+ b_|_
25
+ EOF
@@ -0,0 +1,7 @@
1
+ type-inference --test=Block.Nested --should-be=String
2
+ File.open("~/txt.txt") do |file|
3
+ file.each do |line|
4
+ line_|_
5
+ end
6
+ end
7
+ EOF
@@ -0,0 +1,785 @@
1
+ type-inference --test=Fixnum --should-be=Fixnum
2
+ 1_|_
3
+ EOF
4
+
5
+ type-inference --test=String --should-be=String
6
+ ''_|_
7
+ EOF
8
+
9
+ type-inference --test=Constant1 --should-be=Fixnum
10
+ C = 1
11
+ C_|_
12
+ EOF
13
+
14
+ type-inference --test=Constant2 --should-be=Fixnum
15
+ module M
16
+ C = 1
17
+ end
18
+ M::C_|_
19
+ EOF
20
+
21
+ type-inference --test=Constant3 --should-be=Fixnum
22
+ C = 1
23
+ def f
24
+ C
25
+ end
26
+ f_|_
27
+ EOF
28
+
29
+ type-inference --test=Constant4 --should-be=Fixnum
30
+ class C
31
+ D = 1
32
+ def f
33
+ D
34
+ end
35
+ end
36
+ C.new.f_|_
37
+ EOF
38
+
39
+ type-inference --test=Constant5 --should-be=Fixnum
40
+ class C
41
+ A = 1
42
+ end
43
+ class D < C
44
+ def f
45
+ A
46
+ end
47
+ end
48
+ D.new.f_|_
49
+ EOF
50
+
51
+ type-inference --test=Constant5 --should-be=Fixnum
52
+ class C
53
+ A = 1
54
+ class << self
55
+ def f() A end
56
+ end
57
+ end
58
+ C.f_|_
59
+ EOF
60
+
61
+ type-inference --test=Array --should-be=Array
62
+ []_|_
63
+ EOF
64
+
65
+ type-inference --test=Array.StaticAccess1 --should-be=Fixnum
66
+ [1][0]_|_
67
+ EOF
68
+
69
+ type-inference --test=Array.StaticAccess2 --should-be=Float
70
+ [1, 2.3][1]_|_
71
+ EOF
72
+
73
+ type-inference --test=Array.Max --should-be=Fixnum,String
74
+ a = ['']
75
+ a << 1
76
+ a.max_|_
77
+ EOF
78
+
79
+ type-inference --test=Array.Each --should-be=String,Array
80
+ a = ['']
81
+ a << []
82
+ a.each {|v| v_|_ }
83
+ EOF
84
+
85
+ type-inference --test=Array.Push1 --should-be=Fixnum,String
86
+ a = [1]
87
+ a << ''
88
+ a[0]_|_
89
+ EOF
90
+
91
+ type-inference --test=Array.Push2 --should-be=Fixnum,String
92
+ a = []
93
+ a << 1
94
+ a << ''
95
+ a[0]_|_
96
+ EOF
97
+
98
+ type-inference --test=Array.Push3 --should-be=Fixnum,Float,String
99
+ a = []
100
+ a.push(1, 2.3, '')
101
+ a[0]_|_
102
+ EOF
103
+
104
+ type-inference --test=Array.Concat --should-be=Fixnum,String
105
+ ([''] + [1])[0]_|_
106
+ EOF
107
+
108
+ type-inference --test=Array.DataPolymorphism1 --should-be=String
109
+ a = []
110
+ a << 1
111
+ b = []
112
+ b << ''
113
+ b[0]_|_
114
+ EOF
115
+
116
+ type-inference --test=Array.DataPolymorphism2 --should-be=Fixnum
117
+ a = []
118
+ a << 1
119
+ a << ''
120
+ b = []
121
+ b << 1
122
+ b[0]_|_
123
+ EOF
124
+
125
+ type-inference --test=Array.DataPolymorphism3 --should-be=String,Fixnum
126
+ a = []
127
+ a << 1
128
+ a << ''
129
+ a[0]_|_
130
+ EOF
131
+
132
+ type-inference --test=Array.DataPolymorphism4 --keep-env --should-be=String,Fixnum
133
+ a = []
134
+ a << 1
135
+ a << ''
136
+ a[0]_|_
137
+ EOF
138
+
139
+ type-inference --test=Hash.StaticAccess1 --should-be=Fixnum
140
+ a = { :a => 1 }
141
+ a[:a]_|_
142
+ EOF
143
+
144
+ type-inference --test=Hash.StaticAccess2 --should-be=Float
145
+ a = { :a => 1, :b => 2.3 }
146
+ a[:b]_|_
147
+ EOF
148
+
149
+ type-inference --test=Hash.DynamicAccess1 --should-be=Fixnum
150
+ a = {}
151
+ a[:a] = 1
152
+ a[:a]_|_
153
+ EOF
154
+
155
+ type-inference --test=Hash.DynamicAccess2 --should-be=Fixnum,Float
156
+ a = {:a => 1}
157
+ a[:a] = 2.3
158
+ a[:a]_|_
159
+ EOF
160
+
161
+ type-inference --test=Hash.DynamicAccess3 --should-be=Fixnum,Float
162
+ a = {:a => 1}
163
+ a[:b] = 2.3
164
+ a[:a]_|_
165
+ EOF
166
+
167
+ type-inference --test=Hash.DynamicAccess3 --should-be=Fixnum
168
+ a = {}
169
+ b = a[:a]
170
+ a[:a] = 1
171
+ b_|_
172
+ EOF
173
+
174
+ type-inference --test=Hash.Put1 --should-be=Fixnum
175
+ a = {}
176
+ a[:a] = 0
177
+ a[:a]_|_
178
+ EOF
179
+
180
+ type-inference --test=Hash.Put2 --should-be=Fixnum,String
181
+ a = {}
182
+ a[:a] = 0
183
+ a[:a] = ''
184
+ a[:a]_|_
185
+ EOF
186
+
187
+ type-inference --test=Hash.DataPolymorphism1 --should-be=String
188
+ a = {}
189
+ a[:a] = 0
190
+ b = {}
191
+ b[:a] = ''
192
+ b[:a]_|_
193
+ EOF
194
+
195
+ type-inference --test=Hash.DataPolymorphism2 --should-be=Fixnum
196
+ a = {}
197
+ a[:a] = 0
198
+ a[:a] = ''
199
+ b = {}
200
+ b[:a] = 0
201
+ b[:a]_|_
202
+ EOF
203
+
204
+ type-inference --test=Hash.DataPolymorphism3 --should-be=Fixnum,String
205
+ a = {}
206
+ a[:a] = 0
207
+ a[:a] = ''
208
+ a[0]_|_
209
+ EOF
210
+
211
+ type-inference --test=Hash.DataPolymorphism4 --keep-end --should-be=Fixnum,String
212
+ a = {}
213
+ a[:a] = 0
214
+ a[:a] = ''
215
+ a[0]_|_
216
+ EOF
217
+
218
+ type-inference --test=LocalVar --should-be=Fixnum
219
+ a = 1
220
+ a_|_
221
+ EOF
222
+
223
+ type-inference --test=GlobalVar1 --should-be=Fixnum
224
+ $a = 1
225
+ $a_|_
226
+ EOF
227
+
228
+ type-inference --test=GlobalVar2 --should-be=Fixnum
229
+ $a = 1
230
+ def f
231
+ $a
232
+ end
233
+ f_|_
234
+ EOF
235
+
236
+ type-inference --test=MultipleAssign1 --should-be=Fixnum
237
+ a, b = 1, ''
238
+ a_|_
239
+ EOF
240
+
241
+ type-inference --test=MultipleAssign2 --should-be=String
242
+ a, b = 1, ''
243
+ b_|_
244
+ EOF
245
+
246
+ type-inference --test=MultipleAssign3 --should-contain=String
247
+ a, b = 'a,b'.split(',')
248
+ b_|_
249
+ EOF
250
+
251
+ type-inference --test=Method.Basic --should-be=Fixnum
252
+ def f
253
+ 1
254
+ end
255
+ f_|_
256
+ EOF
257
+
258
+ type-inference --test=Method.Arg.TwoArg --should-be=Float
259
+ def f(x, y)
260
+ y
261
+ end
262
+ f(1, 2.3)_|_
263
+ EOF
264
+
265
+ type-inference --test=Method.Arg.Optional.Overwrite --should-be=String
266
+ def f(x = 1)
267
+ x
268
+ end
269
+ f('')_|_
270
+ EOF
271
+
272
+ type-inference --test=Method.Arg.Splat --should-be=Array
273
+ def f(x, y, *z)
274
+ z
275
+ end
276
+ f(1, 2, 2.3, '')_|_
277
+ EOF
278
+
279
+ type-inference --test=Method.Arg.Splat.Access --should-be=String
280
+ def f(x, y, *z)
281
+ z[1]
282
+ end
283
+ f(1, 2, 2.3, '')_|_
284
+ EOF
285
+
286
+ type-inference --test=Method.Arg.Splat.None --should-be=Array
287
+ def f(x, y, *z)
288
+ z
289
+ end
290
+ f(1, 2)_|_
291
+ EOF
292
+
293
+ type-inference --test=Method.Arg.Splat.Pass1 --should-be=Float
294
+ def f(x, y)
295
+ y
296
+ end
297
+ f(*[1, 2.3])_|_
298
+ EOF
299
+
300
+ type-inference --test=Method.Arg.Splat.Pass2 --should-be=Fixnum
301
+ def f(x, y)
302
+ x
303
+ end
304
+ f(1, *[1, 2.3])_|_
305
+ EOF
306
+
307
+ type-inference --test=Method.Arg.Splat.Pass3 --should-be=Float
308
+ a = [2.3, '']
309
+ b = [1]
310
+ def f(x, y, z)
311
+ y
312
+ end
313
+ f(b, *a)_|_
314
+ EOF
315
+
316
+ type-inference --test=Method.Arg.OptionalAndSplat1 --should-be=Fixnum
317
+ def f(x, y = 1, *z)
318
+ y
319
+ end
320
+ f(1)_|_
321
+ EOF
322
+
323
+ type-inference --test=Method.Arg.OptionalAndSplat2 --should-be=Float
324
+ def f(x, y = 1, *z)
325
+ z[0]
326
+ end
327
+ f(1, '', 2.3)_|_
328
+ EOF
329
+
330
+ type-inference --test=Method.Return.Splat1 --should-be=Float
331
+ def f
332
+ return [1, 2.3]
333
+ end
334
+ a, b = f
335
+ b_|_
336
+ EOF
337
+
338
+ type-inference --test=Method.Return.Splat2 --should-be=Float
339
+ def f
340
+ return *[1, 2.3]
341
+ end
342
+ a, b = f
343
+ b_|_
344
+ EOF
345
+
346
+ type-inference --test=Method.Return.Splat3 --should-be=Fixnum
347
+ def f
348
+ return *[1]
349
+ end
350
+ a = f
351
+ a_|_
352
+ EOF
353
+
354
+ type-inference --test=Method.Yield.NoArg --should-be=Fixnum
355
+ def f
356
+ yield
357
+ end
358
+ f {
359
+ 1_|_
360
+ }
361
+ EOF
362
+
363
+ type-inference --test=Method.Yield.NoArrayArg --should-be=Fixnum
364
+ def f
365
+ yield 1
366
+ end
367
+ f {|x|
368
+ x_|_
369
+ }
370
+ EOF
371
+
372
+ type-inference --test=Method.Yield.Template --should-be=Fixnum
373
+ def f
374
+ yield 1
375
+ end
376
+ f {|x| x_|_}
377
+ EOF
378
+
379
+ type-inference --test=Method.Yield.Template.NoChange --keep-env --should-be=Fixnum
380
+ f {|x| x_|_}
381
+ EOF
382
+
383
+ type-inference --test=Method.Yield.Template.Change --keep-env --should-be=Fixnum
384
+ f {|y| y_|_}
385
+ EOF
386
+
387
+ type-inference --test=Module.Attr1 --should-be=Fixnum
388
+ class C
389
+ attr :foo
390
+ def initialize() @foo = 1 end
391
+ end
392
+ C.new.foo_|_
393
+ EOF
394
+
395
+ type-inference --test=Module.Attr2 --should-be-empty
396
+ class C
397
+ attr :foo
398
+ end
399
+ a = C.new
400
+ a.foo = 1
401
+ a.foo_|_
402
+ EOF
403
+
404
+ type-inference --test=Module.Attr3 --should-be=Fixnum
405
+ class C
406
+ attr :foo, true
407
+ end
408
+ a = C.new
409
+ a.foo = 1
410
+ a.foo_|_
411
+ EOF
412
+
413
+ type-inference --test=Module.AttrReader1 --should-be=Fixnum
414
+ class C
415
+ attr_reader :foo
416
+ def initialize() @foo = 1 end
417
+ end
418
+ C.new.foo_|_
419
+ EOF
420
+
421
+ type-inference --test=Module.AttrReader2 --should-be=Float
422
+ class C
423
+ attr_reader :foo, :bar
424
+ def initialize() @bar = 2.3 end
425
+ end
426
+ C.new.bar_|_
427
+ EOF
428
+
429
+ type-inference --test=Module.AttrWriter1 --should-be=Fixnum
430
+ class C
431
+ attr_writer :foo
432
+ def get() @foo end
433
+ end
434
+ a = C.new
435
+ a.foo = 1
436
+ a.get_|_
437
+ EOF
438
+
439
+ type-inference --test=Module.AttrWriter1 --should-be=Float
440
+ class C
441
+ attr_writer :foo, :bar
442
+ def get() @bar end
443
+ end
444
+ a = C.new
445
+ a.bar = 2.3
446
+ a.get_|_
447
+ EOF
448
+
449
+ type-inference --test=Module.AttrAccessor1 --should-be=Fixnum
450
+ class C
451
+ attr_accessor :foo
452
+ end
453
+ a = C.new
454
+ a.foo = 1
455
+ a.foo_|_
456
+ EOF
457
+
458
+ type-inference --test=Module.AttrAccessor2 --should-be=Float
459
+ class C
460
+ attr_accessor :foo, :bar
461
+ end
462
+ a = C.new
463
+ a.bar = 2.3
464
+ a.bar_|_
465
+ EOF
466
+
467
+ type-inference --test=Module.ModuleFunction1 --should-be-empty
468
+ module M
469
+ def f() 1 end
470
+ end
471
+ M.f_|_
472
+ EOF
473
+
474
+ type-inference --test=Module.ModuleFunction2 --should-be=Fixnum
475
+ module M
476
+ def f() 1 end
477
+ module_function :f
478
+ end
479
+ M.f_|_
480
+ EOF
481
+
482
+
483
+ type-inference --test=Module.Include.Method --should-be=Fixnum
484
+ module M
485
+ def f() 1 end
486
+ end
487
+ class C
488
+ include M
489
+ end
490
+ C.new.f_|_
491
+ EOF
492
+
493
+ type-inference --test=Module.Include.TopLevel --should-be=Fixnum
494
+ module M
495
+ def f() 1 end
496
+ end
497
+ include M
498
+ f_|_
499
+ EOF
500
+
501
+ type-inference --test=Class.New --should-be=C
502
+ class C
503
+ end
504
+ C.new._|_
505
+ EOF
506
+
507
+ type-inference --test=Class.Method1 --should-be=Fixnum
508
+ class C
509
+ def foo() 1 end
510
+ end
511
+ C.new.foo_|_
512
+ EOF
513
+
514
+ type-inference --test=Class.Method.Alias.Grammar1 --should-be=Fixnum
515
+ class C
516
+ def f() 1 end
517
+ alias :g :f
518
+ end
519
+ C.new.g_|_
520
+ EOF
521
+
522
+ type-inference --test=Class.Method.Alias.Grammar2 --should-be=Fixnum
523
+ class C
524
+ class << self
525
+ def f() 1 end
526
+ alias :g :f
527
+ end
528
+ end
529
+ C.g_|_
530
+ EOF
531
+
532
+ type-inference --test=Class.Method.Alias.Method --should-be=Fixnum
533
+ class C
534
+ def f() 1 end
535
+ alias_method(:g, :f)
536
+ end
537
+ C.new.g_|_
538
+ EOF
539
+
540
+ type-inference --test=Class.SingletonMethod1 --should-be=Fixnum
541
+ class C
542
+ def self.foo() 1 end
543
+ end
544
+ C.foo_|_
545
+ EOF
546
+
547
+ type-inference --test=Class.Constructor1 --should-be=Fixnum
548
+ class C
549
+ def initialize() @x = 1 end
550
+ def get() @x end
551
+ end
552
+ C.new.get_|_
553
+ EOF
554
+
555
+ type-inference --test=Class.Constructor.NoArg --should-be=Float
556
+ class C
557
+ def initialize(x) @x = x end
558
+ def get() @x end
559
+ end
560
+ C.new(2.3).get_|_
561
+ EOF
562
+
563
+ type-inference --test=Class.Constructor.OneArg --should-be=Float
564
+ class C
565
+ def initialize(x) @x = x end
566
+ def get() @x end
567
+ end
568
+ C.new(2.3).get_|_
569
+ EOF
570
+
571
+ type-inference --test=Class.Constructor.Block --should-be=Fixnum
572
+ class C
573
+ def initialize() yield 1 end
574
+ end
575
+ C.new {|x| x_|_}
576
+ EOF
577
+
578
+ type-inference --test=SingletonClass.Method1 --should-be=Fixnum
579
+ class C
580
+ end
581
+ class << C
582
+ def f() 1 end
583
+ end
584
+ C.f_|_
585
+ EOF
586
+
587
+ type-inference --test=SingletonClass.Method2 --should-be=Fixnum
588
+ class C
589
+ class << self
590
+ def f() 1 end
591
+ end
592
+ end
593
+ C.f_|_
594
+ EOF
595
+
596
+ type-inference --test=String.Unpack1 --should-be=String
597
+ ''.unpack('a')[0]_|_
598
+ EOF
599
+
600
+ type-inference --test=Proc.NoArg --should-be=Fixnum
601
+ def f(&b)
602
+ b.call
603
+ end
604
+ f { 1_|_ }
605
+ EOF
606
+
607
+ type-inference --test=Proc.OneArg --should-be=Fixnum
608
+ def f(&b)
609
+ b.call(1)
610
+ end
611
+ f {|x| x_|_ }
612
+ EOF
613
+
614
+ type-inference --test=Proc.ManyArgs --should-be=Float
615
+ def f(&b)
616
+ b.call(1, 2.3)
617
+ end
618
+ f {|x, y| y_|_ }
619
+ EOF
620
+
621
+ type-inference --test=Proc.ManyArgs2 --should-be=Float
622
+ def f(&b)
623
+ b[1, 2.3]
624
+ end
625
+ f {|x, y| y_|_ }
626
+ EOF
627
+
628
+ type-inference --test=Proc.Result --should-be=String
629
+ def f(&b)
630
+ b.call
631
+ end
632
+ f { '' }_|_
633
+ EOF
634
+
635
+ type-inference --test=Proc.Pass --should-be=String
636
+ def f(&b)
637
+ g('', &b)
638
+ end
639
+ def g(a, &b)
640
+ b.call(a)
641
+ end
642
+ f {|x| x_|_}
643
+ EOF
644
+
645
+ type-inference --test=Proc.PassAsArg --should-be=String
646
+ def f(&b)
647
+ g('', b)
648
+ end
649
+ def g(a, b)
650
+ b.call(a)
651
+ end
652
+ f {|x| x_|_}
653
+ EOF
654
+
655
+ type-inference --test=Proc.Generate --should-be=Proc
656
+ proc {}_|_
657
+ EOF
658
+
659
+ type-inference --test=Proc.Call --should-be=Fixnum
660
+ proc {
661
+ 1_|_
662
+ }.call
663
+ EOF
664
+
665
+ type-inference --test=Proc.InifinityLoop --should-be=Object
666
+ b = proc {|p|
667
+ p.call(p)_|_
668
+ }
669
+ b.call(b)
670
+ EOF
671
+
672
+ type-inference --test=Lambda.HigherOrder --should-be=Fixnum,Bignum
673
+ def adder(a)
674
+ lambda {|b| a + b }
675
+ end
676
+ adder(1).call(2)_|_
677
+ EOF
678
+
679
+ type-inference --test=Proc.new.HigherOrder --should-be=Fixnum,Bignum
680
+ def adder(a)
681
+ Proc.new {|b| a + b }
682
+ end
683
+ adder(1).call(2)_|_
684
+ EOF
685
+
686
+ type-inference --test=Range.Begin --should-be=Fixnum
687
+ (0..100).begin_|_
688
+ EOF
689
+
690
+ type-inference --test=Range.Begin2 --should-be=Fixnum,Float
691
+ (0..100.0).begin_|_
692
+ EOF
693
+
694
+ type-inference --test=Range.Each --should-be=Fixnum
695
+ (0..100).each {|x| x_|_}
696
+ EOF
697
+
698
+ type-inference --test=Range.ForEach --should-be=Fixnum
699
+ for x in (0..100)
700
+ x_|_
701
+ end
702
+ EOF
703
+
704
+ type-inference --test=Annotation.Method.Return --should-be=String
705
+ ##% f() -> String
706
+ def f() end
707
+ f_|_
708
+ EOF
709
+
710
+ type-inference --test=Annotation.Method.Arg --should-be=Fixnum
711
+ ##% f(a) -> a
712
+ def f(a) end
713
+ f(1)_|_
714
+ EOF
715
+
716
+ type-inference --test=Annotation.Method.Arg.Guard1 --should-be=String
717
+ ##% f(Fixnum) -> String
718
+ def f(a) end
719
+ f(1)_|_
720
+ EOF
721
+
722
+ type-inference --test=Annotation.Method.Arg.Guard2 --should-be-empty
723
+ ##% f(Fixnum) -> String
724
+ def f(a) end
725
+ f('')_|_
726
+ EOF
727
+
728
+ type-inference --test=Annotation.Method.Arg.Guard3 --should-be=Fixnum
729
+ ##% f(Fixnum) -> String
730
+ ##% f(String) -> Fixnum
731
+ def f(a) end
732
+ f('')_|_
733
+ EOF
734
+
735
+ type-inference --test=Annotation.Method.Arg.Optional --should-be=Fixnum
736
+ ##% f(?a) -> Fixnum
737
+ def f(*a) end
738
+ f_|_
739
+ EOF
740
+
741
+ type-inference --test=Annotation.Method.Arg.OptionalGuard1 --should-be=Fixnum
742
+ ##% f(?String) -> Fixnum
743
+ def f(*a) end
744
+ f_|_
745
+ EOF
746
+
747
+ type-inference --test=Annotation.Method.Arg.OptionalGuard2 --should-be=Fixnum
748
+ ##% f(?String) -> Fixnum
749
+ def f(*a) end
750
+ f('')_|_
751
+ EOF
752
+
753
+ type-inference --test=Annotation.Method.Arg.OptionalGuard3 --should-be-empty
754
+ ##% f(?String) -> Fixnum
755
+ def f(*a) end
756
+ f(1)_|_
757
+ EOF
758
+
759
+ type-inference --test=Annotation.Method.Arg.Splat --should-be=Array
760
+ ##% f(*a) -> a
761
+ def f(*a) end
762
+ f(1, '')_|_
763
+ EOF
764
+
765
+ type-inference --test=Annotation.Method.Arg.SplatGuard1 --should-be=Fixnum
766
+ ##% f(*String) -> Fixnum
767
+ def f(*a) end
768
+ f('', '', '')_|_
769
+ EOF
770
+
771
+ type-inference --test=Annotation.Method.Arg.SplatGuard2 --should-be-empty
772
+ ##% f(*String) -> Fixnum
773
+ def f(*a) end
774
+ f('', 1, '')_|_
775
+ EOF
776
+
777
+ type-inference --test=Annotation.Method.Arg.Inheritance --should-be=Fixnum,Float
778
+ ##% f(?Enumerable<v>) -> v
779
+ def f(enum = nil) end
780
+ f([1, 2.3])_|_
781
+ EOF
782
+
783
+ type-inference --test=Math --should-be=Float
784
+ Math.sin(5)_|_
785
+ EOF