typeprof 0.1.2 → 0.4.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.
- checksums.yaml +4 -4
- data/.gitignore +3 -0
- data/Gemfile +2 -2
- data/Gemfile.lock +10 -21
- data/LICENSE +21 -0
- data/README.md +1 -1
- data/doc/demo.md +398 -0
- data/doc/doc.ja.md +11 -1
- data/doc/doc.md +16 -7
- data/exe/typeprof +2 -1
- data/lib/typeprof.rb +9 -0
- data/lib/typeprof/analyzer.rb +455 -364
- data/lib/typeprof/arguments.rb +397 -0
- data/lib/typeprof/block.rb +133 -0
- data/lib/typeprof/builtin.rb +125 -116
- data/lib/typeprof/cli.rb +62 -71
- data/lib/typeprof/config.rb +114 -0
- data/lib/typeprof/container-type.rb +208 -27
- data/lib/typeprof/export.rb +201 -96
- data/lib/typeprof/import.rb +451 -365
- data/lib/typeprof/iseq.rb +43 -2
- data/lib/typeprof/method.rb +139 -100
- data/lib/typeprof/type.rb +138 -297
- data/lib/typeprof/utils.rb +4 -18
- data/lib/typeprof/version.rb +3 -0
- data/smoke/arguments2.rb +55 -0
- data/smoke/array-each3.rb +1 -4
- data/smoke/array12.rb +1 -1
- data/smoke/array6.rb +1 -0
- data/smoke/block-ambiguous.rb +36 -0
- data/smoke/block-args1-rest.rb +62 -0
- data/smoke/block-args1.rb +59 -0
- data/smoke/block-args2-rest.rb +62 -0
- data/smoke/block-args2.rb +59 -0
- data/smoke/block-args3-rest.rb +73 -0
- data/smoke/block-args3.rb +70 -0
- data/smoke/block-blockarg.rb +27 -0
- data/smoke/block-kwarg.rb +52 -0
- data/smoke/block11.rb +1 -1
- data/smoke/block13.rb +9 -0
- data/smoke/block13.rbs +3 -0
- data/smoke/block14.rb +17 -0
- data/smoke/block4.rb +2 -2
- data/smoke/block5.rb +1 -0
- data/smoke/block6.rb +1 -1
- data/smoke/block7.rb +0 -2
- data/smoke/block8.rb +2 -2
- data/smoke/block9.rb +1 -1
- data/smoke/blown.rb +1 -1
- data/smoke/class-hierarchy.rb +54 -0
- data/smoke/class-hierarchy2.rb +27 -0
- data/smoke/class.rb +2 -0
- data/smoke/constant1.rb +13 -5
- data/smoke/constant2.rb +2 -0
- data/smoke/cvar.rb +1 -0
- data/smoke/demo10.rb +1 -1
- data/smoke/demo5.rb +3 -0
- data/smoke/demo8.rb +2 -2
- data/smoke/demo9.rb +1 -3
- data/smoke/flow7.rb +1 -7
- data/smoke/flow8.rb +13 -0
- data/smoke/gvar.rb +1 -1
- data/smoke/gvar2.rb +17 -0
- data/smoke/gvar2.rbs +1 -0
- data/smoke/hash4.rb +1 -1
- data/smoke/inheritance2.rb +6 -0
- data/smoke/instance_eval.rb +1 -1
- data/smoke/int_times.rb +1 -1
- data/smoke/ivar3.rb +16 -0
- data/smoke/ivar3.rbs +3 -0
- data/smoke/keyword3.rb +1 -2
- data/smoke/keyword4.rb +1 -1
- data/smoke/manual-rbs2.rb +1 -1
- data/smoke/manual-rbs3.rb +12 -0
- data/smoke/manual-rbs3.rbs +3 -0
- data/smoke/module4.rb +5 -0
- data/smoke/multiple-superclass.rb +12 -0
- data/smoke/next2.rb +1 -1
- data/smoke/optional1.rb +1 -1
- data/smoke/optional2.rb +1 -1
- data/smoke/optional3.rb +10 -0
- data/smoke/proc4.rb +1 -1
- data/smoke/rbs-alias.rb +9 -0
- data/smoke/rbs-alias.rbs +4 -0
- data/smoke/rbs-attr.rb +26 -0
- data/smoke/rbs-attr.rbs +5 -0
- data/smoke/rbs-extend.rb +9 -0
- data/smoke/rbs-extend.rbs +7 -0
- data/smoke/rbs-interface.rb +24 -0
- data/smoke/rbs-interface.rbs +12 -0
- data/smoke/rbs-proc1.rb +9 -0
- data/smoke/rbs-proc1.rbs +3 -0
- data/smoke/rbs-proc2.rb +20 -0
- data/smoke/rbs-proc2.rbs +3 -0
- data/smoke/rbs-proc3.rb +13 -0
- data/smoke/rbs-proc3.rbs +4 -0
- data/smoke/rbs-record.rb +17 -0
- data/smoke/rbs-record.rbs +4 -0
- data/smoke/rbs-tyvar.rb +18 -0
- data/smoke/rbs-tyvar.rbs +5 -0
- data/smoke/rbs-tyvar2.rb +20 -0
- data/smoke/rbs-tyvar2.rbs +9 -0
- data/smoke/rbs-tyvar3.rb +25 -0
- data/smoke/rbs-tyvar3.rbs +4 -0
- data/smoke/rbs-vars.rb +39 -0
- data/smoke/rbs-vars.rbs +7 -0
- data/smoke/rest1.rb +1 -1
- data/smoke/rest2.rb +1 -1
- data/smoke/rest3.rb +1 -1
- data/smoke/rest5.rb +1 -1
- data/smoke/rest6.rb +1 -1
- data/smoke/retry1.rb +1 -1
- data/smoke/return.rb +1 -1
- data/smoke/singleton_method.rb +3 -0
- data/smoke/step.rb +1 -1
- data/smoke/struct.rb +6 -2
- data/smoke/struct3.rb +14 -0
- data/smoke/super1.rb +18 -0
- data/smoke/symbol-proc.rb +24 -0
- data/smoke/union-recv.rb +6 -0
- data/smoke/user-demo.rb +15 -0
- data/smoke/wrong-extend.rb +1 -0
- data/tools/setup-insns-def.rb +1 -1
- data/tools/stackprof-wrapper.rb +1 -1
- data/typeprof.gemspec +12 -4
- metadata +68 -10
- data/.gitmodules +0 -6
- data/run.sh +0 -3
- data/smoke/variadic1.rb.notyet +0 -5
data/lib/typeprof/utils.rb
CHANGED
|
@@ -6,25 +6,11 @@ module TypeProf
|
|
|
6
6
|
end
|
|
7
7
|
|
|
8
8
|
module StructuralEquality
|
|
9
|
-
def hash
|
|
10
|
-
@_hash ||=
|
|
11
|
-
begin
|
|
12
|
-
h = 0
|
|
13
|
-
instance_variables.each do |v|
|
|
14
|
-
h ^= instance_variable_get(v).hash if v != :@_hash
|
|
15
|
-
end
|
|
16
|
-
h
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
TABLE = {}
|
|
21
|
-
|
|
22
9
|
def self.included(klass)
|
|
23
|
-
|
|
24
|
-
(
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
ruby2_keywords :new
|
|
10
|
+
klass.instance_eval do
|
|
11
|
+
def new(*args)
|
|
12
|
+
(@table ||= {})[[self] + args] ||= super
|
|
13
|
+
end
|
|
28
14
|
end
|
|
29
15
|
end
|
|
30
16
|
end
|
data/smoke/arguments2.rb
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
def f1
|
|
2
|
+
end
|
|
3
|
+
f1
|
|
4
|
+
|
|
5
|
+
def f2(x, y, z)
|
|
6
|
+
end
|
|
7
|
+
f2(:x, :y, :z)
|
|
8
|
+
|
|
9
|
+
def f3(x = "str", y = "str")
|
|
10
|
+
end
|
|
11
|
+
f3
|
|
12
|
+
|
|
13
|
+
def f4(*r)
|
|
14
|
+
end
|
|
15
|
+
f4(:a, :b, :c)
|
|
16
|
+
|
|
17
|
+
def f5(x, y = "str", z)
|
|
18
|
+
end
|
|
19
|
+
f5(:x, :z)
|
|
20
|
+
|
|
21
|
+
def f6(k:)
|
|
22
|
+
end
|
|
23
|
+
f6(k: :kk)
|
|
24
|
+
|
|
25
|
+
def f7(k: 42)
|
|
26
|
+
end
|
|
27
|
+
f7
|
|
28
|
+
|
|
29
|
+
def f8(k: "str")
|
|
30
|
+
end
|
|
31
|
+
f8
|
|
32
|
+
|
|
33
|
+
def f9(**kw)
|
|
34
|
+
end
|
|
35
|
+
f9(k: :kk)
|
|
36
|
+
|
|
37
|
+
def f10(&blk)
|
|
38
|
+
blk.call(1)
|
|
39
|
+
end
|
|
40
|
+
f10 {|n| }
|
|
41
|
+
|
|
42
|
+
__END__
|
|
43
|
+
# Classes
|
|
44
|
+
class Object
|
|
45
|
+
def f1 : -> nil
|
|
46
|
+
def f2 : (:x, :y, :z) -> nil
|
|
47
|
+
def f3 : (?String, ?String) -> nil
|
|
48
|
+
def f4 : (*:a | :b | :c) -> nil
|
|
49
|
+
def f5 : (:x, ?String, :z) -> nil
|
|
50
|
+
def f6 : (k: :kk) -> nil
|
|
51
|
+
def f7 : (?k: Integer) -> nil
|
|
52
|
+
def f8 : (?k: String) -> nil
|
|
53
|
+
def f9 : (**{:k=>:kk}) -> nil
|
|
54
|
+
def f10 : { (Integer) -> nil } -> nil
|
|
55
|
+
end
|
data/smoke/array-each3.rb
CHANGED
|
@@ -2,14 +2,11 @@ def log(x)
|
|
|
2
2
|
end
|
|
3
3
|
|
|
4
4
|
[].each do |x|
|
|
5
|
-
# Currently, x is bot. But, [].each is rarely useful.
|
|
6
|
-
# It would be a good guess to assume a empty receiver of Array#each means a wrong guess.
|
|
7
|
-
# So, it would be good to assume x as any
|
|
8
5
|
log(x)
|
|
9
6
|
end
|
|
10
7
|
|
|
11
8
|
__END__
|
|
12
9
|
# Classes
|
|
13
10
|
class Object
|
|
14
|
-
def log : (
|
|
11
|
+
def log : (untyped) -> nil
|
|
15
12
|
end
|
data/smoke/array12.rb
CHANGED
data/smoke/array6.rb
CHANGED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
def f1
|
|
2
|
+
yield :a, :b, :c
|
|
3
|
+
end
|
|
4
|
+
def log1(x); end
|
|
5
|
+
f1 {|x| log1(x) }
|
|
6
|
+
|
|
7
|
+
def f2
|
|
8
|
+
yield :a, :b, :c
|
|
9
|
+
end
|
|
10
|
+
def log2(x); end
|
|
11
|
+
f2 {|x,| log2(x) }
|
|
12
|
+
|
|
13
|
+
def f3
|
|
14
|
+
yield [:a, :b, :c]
|
|
15
|
+
end
|
|
16
|
+
def log3(x); end
|
|
17
|
+
f3 {|x| log3(x) }
|
|
18
|
+
|
|
19
|
+
def f4
|
|
20
|
+
yield [:a, :b, :c]
|
|
21
|
+
end
|
|
22
|
+
def log4(x); end
|
|
23
|
+
f4 {|x,| log4(x) }
|
|
24
|
+
|
|
25
|
+
__END__
|
|
26
|
+
# Classes
|
|
27
|
+
class Object
|
|
28
|
+
def f1 : { (:a, :b, :c) -> nil } -> nil
|
|
29
|
+
def log1 : (:a) -> nil
|
|
30
|
+
def f2 : { (:a, :b, :c) -> nil } -> nil
|
|
31
|
+
def log2 : (:a) -> nil
|
|
32
|
+
def f3 : { ([:a, :b, :c]) -> nil } -> nil
|
|
33
|
+
def log3 : ([:a, :b, :c]) -> nil
|
|
34
|
+
def f4 : { ([:a, :b, :c]) -> nil } -> nil
|
|
35
|
+
def log4 : (:a) -> nil
|
|
36
|
+
end
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
StringArray = ["str"] + ["str"]
|
|
2
|
+
|
|
3
|
+
def f1(&blk)
|
|
4
|
+
yield *StringArray
|
|
5
|
+
blk
|
|
6
|
+
end
|
|
7
|
+
def log1(a, o, c); end
|
|
8
|
+
f1 do |a, o=:opt, c|
|
|
9
|
+
log1(a, o, c)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def f2(&blk)
|
|
13
|
+
yield :a, *StringArray
|
|
14
|
+
blk
|
|
15
|
+
end
|
|
16
|
+
def log2(a, o, c); end
|
|
17
|
+
f2 do |a, o=:opt, c|
|
|
18
|
+
log2(a, o, c)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def f3(&blk)
|
|
22
|
+
yield :a, :b, *StringArray
|
|
23
|
+
blk
|
|
24
|
+
end
|
|
25
|
+
def log3(a, o, c); end
|
|
26
|
+
f3 do |a, o=:opt, c|
|
|
27
|
+
log3(a, o, c)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def f4(&blk)
|
|
31
|
+
yield :a, :b, :c, *StringArray
|
|
32
|
+
blk
|
|
33
|
+
end
|
|
34
|
+
def log4(a, o, c); end
|
|
35
|
+
f4 do |a, o=:opt, c|
|
|
36
|
+
log4(a, o, c)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def f5(&blk)
|
|
40
|
+
yield :a, :b, :c, :d, *StringArray
|
|
41
|
+
blk
|
|
42
|
+
end
|
|
43
|
+
def log5(a, o, c); end
|
|
44
|
+
f5 do |a, o=:opt, c|
|
|
45
|
+
log5(a, o, c)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
__END__
|
|
49
|
+
# Classes
|
|
50
|
+
class Object
|
|
51
|
+
StringArray : Array[String]
|
|
52
|
+
def f1 : { (*String) -> nil } -> (^(String, ?:opt | String, String) -> nil)
|
|
53
|
+
def log1 : (String, :opt | String, String) -> nil
|
|
54
|
+
def f2 : { (:a, *String) -> nil } -> (^(:a, ?:opt | String, String) -> nil)
|
|
55
|
+
def log2 : (:a, :opt | String, String) -> nil
|
|
56
|
+
def f3 : { (:a, :b, *String) -> nil } -> (^(:a, ?:b | :opt, :b | String) -> nil)
|
|
57
|
+
def log3 : (:a, :b | :opt, :b | String) -> nil
|
|
58
|
+
def f4 : { (:a, :b, :c, *String) -> nil } -> (^(:a, ?:b | :opt, :b | :c) -> nil)
|
|
59
|
+
def log4 : (:a, :b | :opt, :b | :c) -> nil
|
|
60
|
+
def f5 : { (:a, :b, :c, :d, *String) -> nil } -> (^(:a, ?:b | :opt, :b | :c) -> nil)
|
|
61
|
+
def log5 : (:a, :b | :opt, :b | :c) -> nil
|
|
62
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
def f1(&blk)
|
|
2
|
+
yield
|
|
3
|
+
blk
|
|
4
|
+
end
|
|
5
|
+
def log1(a, o, c); end
|
|
6
|
+
f1 do |a, o=:opt, c|
|
|
7
|
+
log1(a, o, c)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def f2(&blk)
|
|
11
|
+
yield :a
|
|
12
|
+
blk
|
|
13
|
+
end
|
|
14
|
+
def log2(a, o, c); end
|
|
15
|
+
f2 do |a, o=:opt, c|
|
|
16
|
+
log2(a, o, c)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def f3(&blk)
|
|
20
|
+
yield :a, :b
|
|
21
|
+
blk
|
|
22
|
+
end
|
|
23
|
+
def log3(a, o, c); end
|
|
24
|
+
f3 do |a, o=:opt, c|
|
|
25
|
+
log3(a, o, c)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def f4(&blk)
|
|
29
|
+
yield :a, :b, :c
|
|
30
|
+
blk
|
|
31
|
+
end
|
|
32
|
+
def log4(a, o, c); end
|
|
33
|
+
f4 do |a, o=:opt, c|
|
|
34
|
+
log4(a, o, c)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def f5(&blk)
|
|
38
|
+
yield :a, :b, :c, :d
|
|
39
|
+
blk
|
|
40
|
+
end
|
|
41
|
+
def log5(a, o, c); end
|
|
42
|
+
f5 do |a, o=:opt, c|
|
|
43
|
+
log5(a, o, c)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
__END__
|
|
47
|
+
# Classes
|
|
48
|
+
class Object
|
|
49
|
+
def f1 : { -> nil } -> ^(nil, ?:opt, nil) -> nil
|
|
50
|
+
def log1 : (nil, :opt, nil) -> nil
|
|
51
|
+
def f2 : { (:a) -> nil } -> ^(:a, ?:opt, nil) -> nil
|
|
52
|
+
def log2 : (:a, :opt, nil) -> nil
|
|
53
|
+
def f3 : { (:a, :b) -> nil } -> ^(:a, ?:opt, :b) -> nil
|
|
54
|
+
def log3 : (:a, :opt, :b) -> nil
|
|
55
|
+
def f4 : { (:a, :b, :c) -> nil } -> (^(:a, ?:b | :opt, :c) -> nil)
|
|
56
|
+
def log4 : (:a, :b | :opt, :c) -> nil
|
|
57
|
+
def f5 : { (:a, :b, :c, :d) -> nil } -> (^(:a, ?:b | :opt, :c) -> nil)
|
|
58
|
+
def log5 : (:a, :b | :opt, :c) -> nil
|
|
59
|
+
end
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
StringArray = ["str"] + ["str"]
|
|
2
|
+
|
|
3
|
+
def f1(&blk)
|
|
4
|
+
yield *StringArray
|
|
5
|
+
blk
|
|
6
|
+
end
|
|
7
|
+
def log1(a, r, c); end
|
|
8
|
+
f1 do |a, *r, c|
|
|
9
|
+
log1(a, r, c)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def f2(&blk)
|
|
13
|
+
yield :a, *StringArray
|
|
14
|
+
blk
|
|
15
|
+
end
|
|
16
|
+
def log2(a, r, c); end
|
|
17
|
+
f2 do |a, *r, c|
|
|
18
|
+
log2(a, r, c)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def f3(&blk)
|
|
22
|
+
yield :a, :b, *StringArray
|
|
23
|
+
blk
|
|
24
|
+
end
|
|
25
|
+
def log3(a, r, c); end
|
|
26
|
+
f3 do |a, *r, c|
|
|
27
|
+
log3(a, r, c)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def f4(&blk)
|
|
31
|
+
yield :a, :b, :c, *StringArray
|
|
32
|
+
blk
|
|
33
|
+
end
|
|
34
|
+
def log4(a, r, c); end
|
|
35
|
+
f4 do |a, *r, c|
|
|
36
|
+
log4(a, r, c)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def f5(&blk)
|
|
40
|
+
yield :a, :b, :c, :d, *StringArray
|
|
41
|
+
blk
|
|
42
|
+
end
|
|
43
|
+
def log5(a, r, c); end
|
|
44
|
+
f5 do |a, *r, c|
|
|
45
|
+
log5(a, r, c)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
__END__
|
|
49
|
+
# Classes
|
|
50
|
+
class Object
|
|
51
|
+
StringArray : Array[String]
|
|
52
|
+
def f1 : { (*String) -> nil } -> ^(String, *String, String) -> nil
|
|
53
|
+
def log1 : (String, Array[String], String) -> nil
|
|
54
|
+
def f2 : { (:a, *String) -> nil } -> ^(:a, *String, String) -> nil
|
|
55
|
+
def log2 : (:a, Array[String], String) -> nil
|
|
56
|
+
def f3 : { (:a, :b, *String) -> nil } -> (^(:a, *:b | String, :b | String) -> nil)
|
|
57
|
+
def log3 : (:a, Array[:b | String], :b | String) -> nil
|
|
58
|
+
def f4 : { (:a, :b, :c, *String) -> nil } -> (^(:a, *:b | :c | String, :c | String) -> nil)
|
|
59
|
+
def log4 : (:a, Array[:b | :c | String], :c | String) -> nil
|
|
60
|
+
def f5 : { (:a, :b, :c, :d, *String) -> nil } -> (^(:a, *:b | :c | :d | String, :d | String) -> nil)
|
|
61
|
+
def log5 : (:a, Array[:b | :c | :d | String], :d | String) -> nil
|
|
62
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
def f1(&blk)
|
|
2
|
+
yield
|
|
3
|
+
blk
|
|
4
|
+
end
|
|
5
|
+
def log1(a, r, c); end
|
|
6
|
+
f1 do |a, *r, c|
|
|
7
|
+
log1(a, r, c)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def f2(&blk)
|
|
11
|
+
yield :a
|
|
12
|
+
blk
|
|
13
|
+
end
|
|
14
|
+
def log2(a, r, c); end
|
|
15
|
+
f2 do |a, *r, c|
|
|
16
|
+
log2(a, r, c)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def f3(&blk)
|
|
20
|
+
yield :a, :b
|
|
21
|
+
blk
|
|
22
|
+
end
|
|
23
|
+
def log3(a, r, c); end
|
|
24
|
+
f3 do |a, *r, c|
|
|
25
|
+
log3(a, r, c)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def f4(&blk)
|
|
29
|
+
yield :a, :b, :c
|
|
30
|
+
blk
|
|
31
|
+
end
|
|
32
|
+
def log4(a, r, c); end
|
|
33
|
+
f4 do |a, *r, c|
|
|
34
|
+
log4(a, r, c)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def f5(&blk)
|
|
38
|
+
yield :a, :b, :c, :d
|
|
39
|
+
blk
|
|
40
|
+
end
|
|
41
|
+
def log5(a, r, c); end
|
|
42
|
+
f5 do |a, *r, c|
|
|
43
|
+
log5(a, r, c)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
__END__
|
|
47
|
+
# Classes
|
|
48
|
+
class Object
|
|
49
|
+
def f1 : { -> nil } -> ^(nil, *bot, nil) -> nil
|
|
50
|
+
def log1 : (nil, [], nil) -> nil
|
|
51
|
+
def f2 : { (:a) -> nil } -> ^(:a, *bot, nil) -> nil
|
|
52
|
+
def log2 : (:a, [], nil) -> nil
|
|
53
|
+
def f3 : { (:a, :b) -> nil } -> ^(:a, *bot, :b) -> nil
|
|
54
|
+
def log3 : (:a, [], :b) -> nil
|
|
55
|
+
def f4 : { (:a, :b, :c) -> nil } -> ^(:a, *:b, :c) -> nil
|
|
56
|
+
def log4 : (:a, [:b], :c) -> nil
|
|
57
|
+
def f5 : { (:a, :b, :c, :d) -> nil } -> (^(:a, *:b | :c, :d) -> nil)
|
|
58
|
+
def log5 : (:a, [:b, :c], :d) -> nil
|
|
59
|
+
end
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
StringArray = ["str"] + ["str"]
|
|
2
|
+
|
|
3
|
+
def f1(&blk)
|
|
4
|
+
yield *StringArray
|
|
5
|
+
blk
|
|
6
|
+
end
|
|
7
|
+
def log1(a, o, r, c); end
|
|
8
|
+
f1 do |a, o=:opt, *r, c|
|
|
9
|
+
log1(a, o, r, c)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def f2(&blk)
|
|
13
|
+
yield :a, *StringArray
|
|
14
|
+
blk
|
|
15
|
+
end
|
|
16
|
+
def log2(a, o, r, c); end
|
|
17
|
+
f2 do |a, o=:opt, *r, c|
|
|
18
|
+
log2(a, o, r, c)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def f3(&blk)
|
|
22
|
+
yield :a, :b, *StringArray
|
|
23
|
+
blk
|
|
24
|
+
end
|
|
25
|
+
def log3(a, o, r, c); end
|
|
26
|
+
f3 do |a, o=:opt, *r, c|
|
|
27
|
+
log3(a, o, r, c)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def f4(&blk)
|
|
31
|
+
yield :a, :b, :c, *StringArray
|
|
32
|
+
blk
|
|
33
|
+
end
|
|
34
|
+
def log4(a, o, r, c); end
|
|
35
|
+
f4 do |a, o=:opt, *r, c|
|
|
36
|
+
log4(a, o, r, c)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def f5(&blk)
|
|
40
|
+
yield :a, :b, :c, :d, *StringArray
|
|
41
|
+
blk
|
|
42
|
+
end
|
|
43
|
+
def log5(a, o, r, c); end
|
|
44
|
+
f5 do |a, o=:opt, *r, c|
|
|
45
|
+
log5(a, o, r, c)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def f6(&blk)
|
|
49
|
+
yield :a, :b, :c, :d, :e, *StringArray
|
|
50
|
+
blk
|
|
51
|
+
end
|
|
52
|
+
def log6(a, o, r, c); end
|
|
53
|
+
f6 do |a, o=:opt, *r, c|
|
|
54
|
+
log6(a, o, r, c)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
__END__
|
|
58
|
+
# Classes
|
|
59
|
+
class Object
|
|
60
|
+
StringArray : Array[String]
|
|
61
|
+
def f1 : { (*String) -> nil } -> (^(String, ?:opt | String, *String, String) -> nil)
|
|
62
|
+
def log1 : (String, :opt | String, Array[String], String) -> nil
|
|
63
|
+
def f2 : { (:a, *String) -> nil } -> (^(:a, ?:opt | String, *String, String) -> nil)
|
|
64
|
+
def log2 : (:a, :opt | String, Array[String], String) -> nil
|
|
65
|
+
def f3 : { (:a, :b, *String) -> nil } -> (^(:a, ?:b | :opt, *String, :b | String) -> nil)
|
|
66
|
+
def log3 : (:a, :b | :opt, Array[String], :b | String) -> nil
|
|
67
|
+
def f4 : { (:a, :b, :c, *String) -> nil } -> (^(:a, ?:b | :opt, *:c | String, :c | String) -> nil)
|
|
68
|
+
def log4 : (:a, :b | :opt, Array[:c | String], :c | String) -> nil
|
|
69
|
+
def f5 : { (:a, :b, :c, :d, *String) -> nil } -> (^(:a, ?:b | :opt, *:c | :d | String, :d | String) -> nil)
|
|
70
|
+
def log5 : (:a, :b | :opt, Array[:c | :d | String], :d | String) -> nil
|
|
71
|
+
def f6 : { (:a, :b, :c, :d, :e, *String) -> nil } -> (^(:a, ?:b | :opt, *:c | :d | :e | String, :e | String) -> nil)
|
|
72
|
+
def log6 : (:a, :b | :opt, Array[:c | :d | :e | String], :e | String) -> nil
|
|
73
|
+
end
|