rsense-core 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
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