rsense-core 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +22 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +1 -0
- data/README.md +35 -0
- data/Rakefile +84 -0
- data/TypeAnnotation.tokens +41 -0
- data/build.xml +84 -0
- data/build_lib/antlr-3.2.jar +0 -0
- data/lib/jars/ant-1.7.0.jar +0 -0
- data/lib/jars/ant-launcher-1.7.0.jar +0 -0
- data/lib/jars/antlr-runtime-3.2.jar +0 -0
- data/lib/jars/bsf-2.3.0.jar +0 -0
- data/lib/rsense-core.rb +28 -0
- data/lib/rsense.jar +0 -0
- data/lib/rsense/core.rb +5 -0
- data/lib/rsense/core/version.rb +5 -0
- data/lib/rsense/parser.rb +6 -0
- data/lib/rsense/ruby.rb +19 -0
- data/lib/rsense/typing.rb +13 -0
- data/lib/rsense/typing/annotation.rb +20 -0
- data/lib/rsense/typing/runtime.rb +23 -0
- data/lib/rsense/typing/vertex.rb +15 -0
- data/lib/rsense/util.rb +9 -0
- data/rsense-core.gemspec +30 -0
- data/src/org/cx4a/rsense/CodeAssist.java +744 -0
- data/src/org/cx4a/rsense/CodeAssistError.java +31 -0
- data/src/org/cx4a/rsense/CodeAssistResult.java +42 -0
- data/src/org/cx4a/rsense/CodeCompletionResult.java +65 -0
- data/src/org/cx4a/rsense/FindDefinitionResult.java +24 -0
- data/src/org/cx4a/rsense/LoadResult.java +19 -0
- data/src/org/cx4a/rsense/Main.java +916 -0
- data/src/org/cx4a/rsense/Options.java +353 -0
- data/src/org/cx4a/rsense/Project.java +103 -0
- data/src/org/cx4a/rsense/TypeInferenceResult.java +25 -0
- data/src/org/cx4a/rsense/WhereResult.java +19 -0
- data/src/org/cx4a/rsense/parser/TypeAnnotation.g +221 -0
- data/src/org/cx4a/rsense/parser/TypeAnnotationLexer.java +1759 -0
- data/src/org/cx4a/rsense/parser/TypeAnnotationParser.java +2025 -0
- data/src/org/cx4a/rsense/ruby/Block.java +10 -0
- data/src/org/cx4a/rsense/ruby/Context.java +75 -0
- data/src/org/cx4a/rsense/ruby/DynamicMethod.java +10 -0
- data/src/org/cx4a/rsense/ruby/DynamicScope.java +51 -0
- data/src/org/cx4a/rsense/ruby/Frame.java +95 -0
- data/src/org/cx4a/rsense/ruby/IRubyObject.java +17 -0
- data/src/org/cx4a/rsense/ruby/LocalScope.java +43 -0
- data/src/org/cx4a/rsense/ruby/MetaClass.java +50 -0
- data/src/org/cx4a/rsense/ruby/Ruby.java +242 -0
- data/src/org/cx4a/rsense/ruby/RubyClass.java +146 -0
- data/src/org/cx4a/rsense/ruby/RubyModule.java +255 -0
- data/src/org/cx4a/rsense/ruby/RubyObject.java +94 -0
- data/src/org/cx4a/rsense/ruby/Scope.java +7 -0
- data/src/org/cx4a/rsense/ruby/SpecialObject.java +15 -0
- data/src/org/cx4a/rsense/ruby/Visibility.java +17 -0
- data/src/org/cx4a/rsense/typing/Graph.java +1690 -0
- data/src/org/cx4a/rsense/typing/Propagation.java +73 -0
- data/src/org/cx4a/rsense/typing/Template.java +84 -0
- data/src/org/cx4a/rsense/typing/TemplateAttribute.java +158 -0
- data/src/org/cx4a/rsense/typing/TypeSet.java +48 -0
- data/src/org/cx4a/rsense/typing/annotation/ClassType.java +57 -0
- data/src/org/cx4a/rsense/typing/annotation/MethodType.java +79 -0
- data/src/org/cx4a/rsense/typing/annotation/TypeAnnotation.java +4 -0
- data/src/org/cx4a/rsense/typing/annotation/TypeAny.java +7 -0
- data/src/org/cx4a/rsense/typing/annotation/TypeApplication.java +37 -0
- data/src/org/cx4a/rsense/typing/annotation/TypeConstraint.java +29 -0
- data/src/org/cx4a/rsense/typing/annotation/TypeExpression.java +11 -0
- data/src/org/cx4a/rsense/typing/annotation/TypeIdentity.java +59 -0
- data/src/org/cx4a/rsense/typing/annotation/TypeOptional.java +22 -0
- data/src/org/cx4a/rsense/typing/annotation/TypePragma.java +22 -0
- data/src/org/cx4a/rsense/typing/annotation/TypeSplat.java +22 -0
- data/src/org/cx4a/rsense/typing/annotation/TypeTuple.java +35 -0
- data/src/org/cx4a/rsense/typing/annotation/TypeUnion.java +23 -0
- data/src/org/cx4a/rsense/typing/annotation/TypeVariable.java +44 -0
- data/src/org/cx4a/rsense/typing/runtime/AliasMethod.java +94 -0
- data/src/org/cx4a/rsense/typing/runtime/AnnotationHelper.java +69 -0
- data/src/org/cx4a/rsense/typing/runtime/AnnotationResolver.java +523 -0
- data/src/org/cx4a/rsense/typing/runtime/Array.java +84 -0
- data/src/org/cx4a/rsense/typing/runtime/ClassTag.java +27 -0
- data/src/org/cx4a/rsense/typing/runtime/DefaultMethod.java +115 -0
- data/src/org/cx4a/rsense/typing/runtime/Hash.java +131 -0
- data/src/org/cx4a/rsense/typing/runtime/LoopTag.java +21 -0
- data/src/org/cx4a/rsense/typing/runtime/Method.java +32 -0
- data/src/org/cx4a/rsense/typing/runtime/MonomorphicObject.java +77 -0
- data/src/org/cx4a/rsense/typing/runtime/ObjectAllocator.java +40 -0
- data/src/org/cx4a/rsense/typing/runtime/PolymorphicObject.java +90 -0
- data/src/org/cx4a/rsense/typing/runtime/Proc.java +100 -0
- data/src/org/cx4a/rsense/typing/runtime/RuntimeHelper.java +1339 -0
- data/src/org/cx4a/rsense/typing/runtime/SpecialMethod.java +119 -0
- data/src/org/cx4a/rsense/typing/runtime/TypeVarMap.java +112 -0
- data/src/org/cx4a/rsense/typing/runtime/VertexHolder.java +48 -0
- data/src/org/cx4a/rsense/typing/vertex/CallVertex.java +122 -0
- data/src/org/cx4a/rsense/typing/vertex/MultipleAsgnVertex.java +23 -0
- data/src/org/cx4a/rsense/typing/vertex/PassThroughVertex.java +20 -0
- data/src/org/cx4a/rsense/typing/vertex/SValueVertex.java +24 -0
- data/src/org/cx4a/rsense/typing/vertex/SplatVertex.java +24 -0
- data/src/org/cx4a/rsense/typing/vertex/ToAryVertex.java +24 -0
- data/src/org/cx4a/rsense/typing/vertex/TypeVarVertex.java +22 -0
- data/src/org/cx4a/rsense/typing/vertex/Vertex.java +221 -0
- data/src/org/cx4a/rsense/typing/vertex/YieldVertex.java +70 -0
- data/src/org/cx4a/rsense/util/HereDocReader.java +48 -0
- data/src/org/cx4a/rsense/util/Logger.java +111 -0
- data/src/org/cx4a/rsense/util/NodeUtil.java +198 -0
- data/src/org/cx4a/rsense/util/SourceLocation.java +70 -0
- data/src/org/cx4a/rsense/util/StringUtil.java +63 -0
- data/src/resources/org/cx4a/rsense/rsense.properties +1 -0
- data/stubs/1.8/_builtin.rb +3006 -0
- data/stubs/1.8/bigdecimal.rb +131 -0
- data/stubs/1.8/cgi.rb +257 -0
- data/stubs/1.8/date.rb +147 -0
- data/stubs/1.8/optparse.rb +113 -0
- data/stubs/1.8/rational.rb +47 -0
- data/stubs/1.8/set.rb +94 -0
- data/stubs/1.8/socket.rb +461 -0
- data/stubs/1.8/stringio.rb +129 -0
- data/test/data/a file.rb +1 -0
- data/test/data/benchmark.rb +12 -0
- data/test/data/crlf.rb +5 -0
- data/test/data/test.rb +19 -0
- data/test/script/all.rsense +2 -0
- data/test/script/array_dynamic.rsense +25 -0
- data/test/script/block_nested.rsense +7 -0
- data/test/script/builtin.rsense +785 -0
- data/test/script/class_method_partial_update.rsense +52 -0
- data/test/script/class_partial_update.rsense +17 -0
- data/test/script/find-definition.rsense +72 -0
- data/test/script/method_arg_onearg.rsense +6 -0
- data/test/script/method_arg_optional.rsense +7 -0
- data/test/script/method_partial_update.rsense +14 -0
- data/test/script/method_yield_arrayarg.rsense +8 -0
- data/test/script/method_yield_arrayarg_expand.rsense +8 -0
- data/test/script/method_yield_arrayarg_splat.rsense +17 -0
- data/test/script/misc.rsense +2 -0
- data/test/script/proc_higher_order.rsense +22 -0
- data/test/script/regression.rsense +95 -0
- data/test/script/stdlib.rsense +66 -0
- data/test/script/where.rsense +41 -0
- 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
|
data/test/data/a file.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
1.
|
data/test/data/crlf.rb
ADDED
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,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,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
|