fastruby 0.0.19 → 0.0.20

Sign up to get free protection for your applications and to get access to all the features.
Files changed (121) hide show
  1. data/CHANGELOG +8 -0
  2. data/{README → README.rdoc} +6 -1
  3. data/Rakefile +7 -7
  4. data/benchmarks/benchmark.rb~ +14 -2
  5. data/ext/fastruby_base/fastruby_base.inl +8 -4
  6. data/lib/fastruby/builder/inference_updater.rb +76 -0
  7. data/lib/fastruby/builder/inference_updater.rb~ +76 -0
  8. data/lib/fastruby/builder/inferencer.rb +38 -0
  9. data/lib/fastruby/{inliner → builder}/inliner.rb +16 -27
  10. data/lib/fastruby/builder/inliner.rb~ +60 -0
  11. data/lib/fastruby/builder/locals_inference.rb +53 -0
  12. data/lib/fastruby/builder/lvar_type.rb +43 -0
  13. data/lib/fastruby/builder/lvar_type.rb~ +44 -0
  14. data/lib/fastruby/builder/pipeline.rb +43 -0
  15. data/lib/fastruby/builder/pipeline.rb~ +43 -0
  16. data/lib/fastruby/{reductor → builder}/reductor.rb +6 -3
  17. data/lib/fastruby/builder/reductor.rb~ +42 -0
  18. data/lib/fastruby/builder.rb +73 -25
  19. data/lib/fastruby/builder.rb~ +311 -0
  20. data/lib/fastruby/corelib/fixnum.rb +75 -0
  21. data/lib/fastruby/corelib/fixnum.rb~ +146 -0
  22. data/lib/fastruby/corelib/integer.rb +96 -0
  23. data/lib/fastruby/corelib/integer.rb~ +96 -0
  24. data/lib/fastruby/corelib.rb +23 -0
  25. data/lib/fastruby/corelib.rb~ +23 -0
  26. data/lib/fastruby/getlocals.rb +3 -1
  27. data/lib/fastruby/logging.rb +2 -2
  28. data/lib/fastruby/modules/inferencer/infer.rb +31 -0
  29. data/lib/fastruby/modules/inferencer/literal.rb +42 -0
  30. data/lib/fastruby/modules/inliner/call.rb +327 -0
  31. data/lib/fastruby/{inliner/modules/call.rb → modules/inliner/call.rb~} +14 -24
  32. data/lib/fastruby/modules/inliner/defn.rb +41 -0
  33. data/lib/fastruby/modules/inliner/defn.rb~ +29 -0
  34. data/lib/fastruby/modules/inliner/recursive.rb +40 -0
  35. data/lib/fastruby/{inliner/modules/recursive.rb → modules/inliner/recursive.rb~} +1 -1
  36. data/lib/fastruby/modules/lvar_type/call.rb +36 -0
  37. data/lib/fastruby/modules/lvar_type/call.rb~ +36 -0
  38. data/lib/fastruby/modules/lvar_type/defn.rb +42 -0
  39. data/lib/fastruby/modules/lvar_type/defn.rb~ +42 -0
  40. data/lib/fastruby/modules/lvar_type/lasgn.rb +41 -0
  41. data/lib/fastruby/modules/lvar_type/lasgn.rb~ +42 -0
  42. data/lib/fastruby/modules/lvar_type/recursive.rb +33 -0
  43. data/lib/fastruby/modules/lvar_type/recursive.rb~ +33 -0
  44. data/lib/fastruby/{reductor/modules → modules/reductor}/case.rb +0 -0
  45. data/lib/fastruby/modules/reductor/fastruby_flag.rb +33 -0
  46. data/lib/fastruby/{reductor/modules → modules/reductor}/for.rb +0 -0
  47. data/lib/fastruby/{reductor/modules → modules/reductor}/nontree.rb +0 -0
  48. data/lib/fastruby/modules/reductor/nontree.rb~ +32 -0
  49. data/lib/fastruby/{reductor/modules → modules/reductor}/recursive.rb +1 -1
  50. data/lib/fastruby/modules/reductor/recursive.rb~ +31 -0
  51. data/lib/fastruby/{translator/modules → modules/translator}/block.rb +0 -0
  52. data/lib/fastruby/modules/translator/call.rb +344 -0
  53. data/lib/fastruby/{translator/modules/call.rb → modules/translator/call.rb~} +24 -3
  54. data/lib/fastruby/{translator/modules → modules/translator}/defn.rb +10 -9
  55. data/lib/fastruby/modules/translator/defn.rb~ +267 -0
  56. data/lib/fastruby/{translator/modules → modules/translator}/directive.rb +3 -1
  57. data/lib/fastruby/modules/translator/directive.rb~ +44 -0
  58. data/lib/fastruby/{translator/modules → modules/translator}/exceptions.rb +3 -1
  59. data/lib/fastruby/modules/translator/exceptions.rb~ +120 -0
  60. data/lib/fastruby/{translator/modules → modules/translator}/flow.rb +0 -0
  61. data/lib/fastruby/modules/translator/iter.rb +745 -0
  62. data/lib/fastruby/{translator/modules/iter.rb → modules/translator/iter.rb~} +103 -48
  63. data/lib/fastruby/modules/translator/literal.rb +150 -0
  64. data/lib/fastruby/{translator/modules/literal.rb → modules/translator/literal.rb~} +3 -3
  65. data/lib/fastruby/{translator/modules → modules/translator}/logical.rb +0 -0
  66. data/lib/fastruby/{translator/modules → modules/translator}/method_group.rb +0 -0
  67. data/lib/fastruby/{translator/modules → modules/translator}/nonlocal.rb +18 -6
  68. data/lib/fastruby/modules/translator/nonlocal.rb~ +298 -0
  69. data/lib/fastruby/modules/translator/static.rb +290 -0
  70. data/lib/fastruby/{translator/modules/static.rb → modules/translator/static.rb~} +66 -17
  71. data/lib/fastruby/modules/translator/variable.rb +280 -0
  72. data/lib/fastruby/{translator/modules/variable.rb → modules/translator/variable.rb~} +14 -44
  73. data/lib/fastruby/modules.rb +30 -0
  74. data/lib/fastruby/object.rb +42 -6
  75. data/lib/fastruby/object.rb~ +159 -0
  76. data/lib/fastruby/set_tree.rb +7 -11
  77. data/lib/fastruby/set_tree.rb~ +71 -0
  78. data/lib/fastruby/sexp_extension.rb +29 -7
  79. data/lib/fastruby/sexp_extension.rb~ +262 -0
  80. data/lib/fastruby/translator/scope_mode_helper.rb~ +138 -0
  81. data/lib/fastruby/translator/translator.rb +87 -92
  82. data/lib/fastruby/translator/translator.rb~ +1600 -0
  83. data/lib/fastruby/translator/translator_modules.rb +3 -1
  84. data/lib/fastruby/translator/translator_modules.rb~ +53 -0
  85. data/lib/fastruby.rb +3 -1
  86. data/lib/fastruby.rb~ +3 -1
  87. data/lib/fastruby_only/base.rb +1 -0
  88. data/spec/corelib/numeric/fixnum_spec.rb +110 -0
  89. data/spec/corelib/numeric/fixnum_spec.rb~ +104 -0
  90. data/spec/corelib/numeric/integer_spec.rb +173 -0
  91. data/spec/corelib/numeric/integer_spec.rb~ +173 -0
  92. data/spec/fastruby_only/base_spec.rb +74 -0
  93. data/spec/graph/base_spec.rb +2 -1
  94. data/spec/graph/base_spec.rb~ +35 -0
  95. data/spec/graph/path_spec.rb +2 -2
  96. data/spec/graph/path_spec.rb~ +48 -0
  97. data/spec/graph/vertex_spec.rb +2 -1
  98. data/spec/graph/vertex_spec.rb~ +58 -0
  99. data/spec/reductor/base_spec.rb +1 -1
  100. data/spec/ruby/block/lambda_spec.rb~ +163 -0
  101. data/spec/ruby/block/proc_as_block_spec.rb~ +69 -1
  102. data/spec/ruby/block_spec.rb~ +2 -494
  103. data/spec/ruby/call/base_call_spec.rb +1 -1
  104. data/spec/ruby/call/base_call_spec.rb~ +2 -60
  105. data/spec/ruby/defn/replacement_spec.rb +26 -14
  106. data/spec/ruby/defn/replacement_spec.rb~ +13 -3
  107. data/spec/ruby/exception/internal_ex_spec.rb~ +86 -0
  108. data/spec/ruby/integrity_spec.rb~ +35 -1
  109. data/spec/ruby/variable_spec.rb~ +31 -0
  110. data/spec/scope_mode/flow_spec.rb +1 -1
  111. data/spec/scope_mode/flow_spec.rb~ +109 -0
  112. data/spec/sugar/base_spec.rb +29 -0
  113. data/spec/sugar/base_spec.rb~ +16 -0
  114. metadata +100 -43
  115. data/spec/fastruby/inliner/modules/call_spec.rb +0 -0
  116. data/spec/fastruby/translator/modules/nonlocal_spec.rb +0 -0
  117. data/spec/fastruby/translator/translator_spec.rb +0 -0
  118. data/spec/ruby/block/arguments_spec.rb~ +0 -214
  119. data/spec/ruby/block/break_spec.rb~ +0 -236
  120. data/spec/ruby/block/next_spec.rb~ +0 -85
  121. data/spec/ruby/block/retry_spec.rb~ +0 -43
@@ -0,0 +1,74 @@
1
+ require "fastruby"
2
+
3
+ describe FastRuby, "FastRuby" do
4
+ it "should accept fastruby_only option" do
5
+ fastruby "
6
+ class FRONLY1
7
+ def foo
8
+ 100
9
+ end
10
+ end
11
+ ", :fastruby_only => true
12
+ end
13
+
14
+ it "should accept fastruby_only option, methods defined with that option should not be callable from normal ruby" do
15
+ fastruby "
16
+ class FRONLY2
17
+ def fronly2_foo
18
+ 100
19
+ end
20
+ end
21
+ ", :fastruby_only => true
22
+
23
+ lambda {
24
+ FRONLY2.new.fronly2_foo
25
+ }.should raise_error(NoMethodError)
26
+ end
27
+
28
+ it "should accept fastruby_only option, methods defined with that option should be callable from fastruby" do
29
+ fastruby "
30
+ class FRONLY3
31
+ def foo
32
+ 100
33
+ end
34
+ end
35
+ ", :fastruby_only => true
36
+
37
+ fastruby "
38
+ class FRONLY3
39
+ def bar
40
+ foo
41
+ end
42
+ end
43
+ "
44
+
45
+ FRONLY3.new.bar.should be == 100
46
+ end
47
+
48
+ it "should accept fastruby_only option, and two versions of the same method" do
49
+ class FRONLY4
50
+ def foo
51
+ 200
52
+ end
53
+ end
54
+
55
+ fastruby "
56
+ class FRONLY4
57
+ def foo
58
+ 100
59
+ end
60
+ end
61
+ ", :fastruby_only => true
62
+
63
+ fastruby "
64
+ class FRONLY4
65
+ def bar
66
+ foo
67
+ end
68
+ end
69
+ "
70
+
71
+ FRONLY4.new.bar.should be == 100
72
+ FRONLY4.new.foo.should be == 200
73
+ end
74
+ end
@@ -1,8 +1,9 @@
1
1
  require "fastruby"
2
2
  require "fastruby/sexp_extension"
3
3
 
4
+ include FastRuby
5
+
4
6
  describe FastRuby::Graph, "fastruby sexp graph" do
5
- include FastRuby
6
7
  it "should allow create empty graph" do
7
8
  graph = Graph.new
8
9
  end
@@ -0,0 +1,35 @@
1
+ require "fastruby"
2
+ require "fastruby/sexp_extension"
3
+
4
+ describe FastRuby::Graph, "fastruby sexp graph" do
5
+ include FastRuby
6
+ it "should allow create empty graph" do
7
+ graph = Graph.new
8
+ end
9
+
10
+ it "should allow add edges with add_edge" do
11
+ graph = Graph.new
12
+ graph.add_edge(1,2)
13
+ graph.edges.count.should be == 1
14
+ graph.edges.first.should be == [1,2]
15
+ end
16
+
17
+ it "should return 0 edges for an empty graph" do
18
+ graph = Graph.new
19
+ graph.edges.count.should be == 0
20
+ end
21
+
22
+ it "should allow creation of graphs using hashes" do
23
+ graph = Graph.new 3 => [4]
24
+ graph.edges.count.should be == 1
25
+ graph.edges.should include([3,4])
26
+ end
27
+
28
+ it "should allow creation of graphs using hashes with multiple nodes" do
29
+ graph = Graph.new 3 => [4,5,6]
30
+ graph.edges.count.should be == 3
31
+ graph.edges.should include([3,4])
32
+ graph.edges.should include([3,5])
33
+ graph.edges.should include([3,6])
34
+ end
35
+ end
@@ -1,9 +1,9 @@
1
1
  require "fastruby"
2
2
  require "fastruby/sexp_extension"
3
3
 
4
- describe FastRuby::Graph, "fastruby sexp graph" do
5
- include FastRuby
4
+ include FastRuby
6
5
 
6
+ describe FastRuby::Graph, "fastruby sexp graph" do
7
7
  def self.assert_graph_paths(origin, paths, graph_hash)
8
8
  it "should read paths #{paths.inspect} for graph #{graph_hash} from #{origin}" do
9
9
  graph = Graph.new graph_hash
@@ -0,0 +1,48 @@
1
+ require "fastruby"
2
+ require "fastruby/sexp_extension"
3
+
4
+ describe FastRuby::Graph, "fastruby sexp graph" do
5
+ include FastRuby
6
+
7
+ def self.assert_graph_paths(origin, paths, graph_hash)
8
+ it "should read paths #{paths.inspect} for graph #{graph_hash} from #{origin}" do
9
+ graph = Graph.new graph_hash
10
+
11
+ array = []
12
+ graph.each_path_from(origin) do |path|
13
+ path_array = []
14
+ path.each(&path_array.method(:<<))
15
+ array << path_array
16
+ end
17
+
18
+ paths.each do |path|
19
+ array.should include(path)
20
+ end
21
+ array.count.should be == paths.count
22
+
23
+ array
24
+ end
25
+ end
26
+
27
+ assert_graph_paths(1, [[1,2]], 1 => [2] )
28
+ assert_graph_paths(1, [[1,3]], 1 => [3] )
29
+ assert_graph_paths(1, [[1,4]], 1 => [4] )
30
+ assert_graph_paths(3, [[3,2]], 3 => [2] )
31
+ assert_graph_paths(4, [[4,2]], 4 => [2] )
32
+
33
+ assert_graph_paths(1, [[1,2],[1,3]], 1 => [2,3] )
34
+
35
+ assert_graph_paths(1, [[1,2,3]], 1 => [2], 2 => [3] )
36
+ assert_graph_paths(1, [[1,2,3],[1,2,4]], 1 => [2], 2 => [3,4] )
37
+ assert_graph_paths(1, [[1,2,4],[1,3,4]], 1 => [2,3], 2 => [4],3 => [4] )
38
+ assert_graph_paths(1, [[1,2,3,4,5],[1,2,3,5],[1,3,5],[1,3,4,5]], 1 => [2,3], 2 => [3],3 => [4,5],4 => [5] )
39
+
40
+ # cyclic paths
41
+ assert_graph_paths(1, [[1]], 1 => [1] )
42
+ assert_graph_paths(1, [[1,2,1]], 1 => [2], 2 => [1] )
43
+ assert_graph_paths(2, [[2,1,2]], 1 => [2], 2 => [1] )
44
+
45
+ # cyclyc paths with repeated vertexes
46
+ assert_graph_paths(1, [[1,2,4],[1,2,3,2,4]], 1 => [2], 2 => [3,4], 3 => [2])
47
+ end
48
+
@@ -1,8 +1,9 @@
1
1
  require "fastruby"
2
2
  require "fastruby/sexp_extension"
3
3
 
4
+ include FastRuby
5
+
4
6
  describe FastRuby::Graph, "fastruby sexp graph" do
5
- include FastRuby
6
7
  it "should allow read vertex from empty graph" do
7
8
  graph = Graph.new
8
9
  graph.vertexes
@@ -0,0 +1,58 @@
1
+ require "fastruby"
2
+ require "fastruby/sexp_extension"
3
+
4
+ describe FastRuby::Graph, "fastruby sexp graph" do
5
+ include FastRuby
6
+ it "should allow read vertex from empty graph" do
7
+ graph = Graph.new
8
+ graph.vertexes
9
+ end
10
+
11
+ it "should allow read vertex from empty graph and it must be empty" do
12
+ graph = Graph.new
13
+ graph.vertexes.count.should be == 0
14
+ end
15
+
16
+ it "should allow read vertex from graph with one vertex" do
17
+ graph = Graph.new 1 => [1]
18
+ graph.vertexes.count.should be == 1
19
+ graph.vertexes.should include(1)
20
+ end
21
+
22
+ it "should allow read vertex from graph with two vertexes" do
23
+ graph = Graph.new 1 => [1,2]
24
+ graph.vertexes.count.should be == 2
25
+ graph.vertexes.should include(1)
26
+ graph.vertexes.should include(2)
27
+ end
28
+
29
+ it "should allow allow read vertex outputs" do
30
+ graph = Graph.new 1 => [1]
31
+
32
+ array = []
33
+ graph.each_vertex_output(1, &array.method(:<<))
34
+
35
+ array.should include(1)
36
+ end
37
+
38
+ it "should allow read vertex outputs" do
39
+ graph = Graph.new 1 => [2]
40
+
41
+ array = []
42
+ graph.each_vertex_output(1, &array.method(:<<))
43
+
44
+ array.should include(2)
45
+
46
+ array = []
47
+ graph.each_vertex_output(2, &array.method(:<<))
48
+
49
+ array.should be == []
50
+ end
51
+
52
+
53
+ it "should allow read vertex outputs with no blocks (returning sets)" do
54
+ graph = Graph.new 1 => [2]
55
+ graph.each_vertex_output(1).should include(2)
56
+ graph.each_vertex_output(2).count.should == 0
57
+ end
58
+ end
@@ -1,5 +1,5 @@
1
1
  require "fastruby"
2
- require "fastruby/reductor/reductor"
2
+ require "fastruby/builder/reductor"
3
3
  require "fastruby/sexp_extension"
4
4
  require "ruby_parser"
5
5
 
@@ -1,6 +1,62 @@
1
1
  require "fastruby"
2
2
 
3
3
  describe FastRuby, "fastruby" do
4
+ class ::LL1
5
+ fastruby "
6
+ def foo
7
+ a = 16
8
+ lambda {|x|
9
+ a+x
10
+ }
11
+ end
12
+ "
13
+ end
14
+
15
+ it "lambda must be able to access local variables" do
16
+ ::LL1.new.foo.call(16).should be == 32
17
+ end
18
+
19
+ fastruby "
20
+ class ::LL2
21
+ def foo
22
+ a = 16
23
+ lambda {|x|
24
+ a+x
25
+ }
26
+ end
27
+
28
+ def bar
29
+ end
30
+ end
31
+ "
32
+
33
+ it "lambda must be able to access local variables, after another unrelated method is called" do
34
+ ll2 = ::LL2.new
35
+ lambda_object = ll2.foo
36
+ ::LL2.new.bar
37
+ lambda_object.call(16).should be == 32
38
+ end
39
+
40
+ fastruby "
41
+ class ::LL3
42
+ def foo(a)
43
+ lambda {|x|
44
+ a+x
45
+ }
46
+ end
47
+
48
+ def bar(y)
49
+ lambda_object = foo(16)
50
+ foo(160)
51
+ lambda_object.call(y)
52
+ end
53
+ end
54
+ "
55
+
56
+ it "lambda must be able to access local variables, after another unrelated method is called (from fastruby)" do
57
+ ll3 = ::LL3.new
58
+ ll3.bar(1).should be == 17
59
+ end
4
60
 
5
61
  fastruby "
6
62
  class ::LL4
@@ -35,4 +91,111 @@ describe FastRuby, "fastruby" do
35
91
  lambda_object.call(1).should be == 100
36
92
  end
37
93
 
94
+ it "lambda must be able to access local variables of parent scopes through yield on ruby" do
95
+ ll4 = ::LL4.new
96
+
97
+ a = 99
98
+
99
+ lambda_object = ll4.foo do |x|
100
+ x+a
101
+ end
102
+ lambda_object.call(1).should be == 100
103
+ end
104
+
105
+ def self.next_sentence(sname)
106
+ fastruby "
107
+ class ::LL5#{sname}
108
+ def foo
109
+ lambda {
110
+ #{sname} 100
111
+ }
112
+ end
113
+ end
114
+ "
115
+
116
+ it "lambda #{sname}'s must act as block next" do
117
+ eval("LL5"+sname).new.foo.call.should be == 100
118
+ end
119
+ end
120
+
121
+ next_sentence("next")
122
+ next_sentence("break")
123
+ next_sentence("return")
124
+
125
+ def self.illegal_jump(sname)
126
+ eval "
127
+ class ::LL6#{sname}
128
+ def foo
129
+ lambda {
130
+ yield
131
+ }
132
+ end
133
+
134
+ def bar
135
+ foo do
136
+ #{sname} 9
137
+ end
138
+ end
139
+ end
140
+ "
141
+
142
+ it "#{sname} inside block should raise LocalJumpError" do
143
+ ll6 = eval("::LL6"+sname).new
144
+ lambda {
145
+ ll6.bar.call
146
+ }.should raise_error(LocalJumpError)
147
+ end
148
+ end
149
+
150
+ # illegal_jump("return")
151
+ illegal_jump("break")
152
+
153
+
154
+ fastruby "
155
+ class ::LL7
156
+
157
+ def bar(l)
158
+ l.call
159
+ yield
160
+ end
161
+
162
+ def foo
163
+ lambda_obj = lambda {
164
+ }
165
+
166
+ bar(lambda_obj) do
167
+ break 0
168
+ end
169
+ end
170
+ end
171
+ "
172
+
173
+ it "should break from block after calling lambda" do
174
+ ll7 = ::LL7.new
175
+ lambda {
176
+ ll7.foo.should be == 0
177
+ }.should_not raise_error
178
+ end
179
+
180
+
181
+ class ::LL8
182
+
183
+ alias alt_lambda lambda
184
+
185
+ fastruby "
186
+ def foo
187
+ lambda_obj = alt_lambda {
188
+ return 9
189
+ }
190
+
191
+ lambda_obj.call
192
+ end
193
+ "
194
+ end
195
+
196
+ it "should close lambda with return when renamed with alias" do
197
+ ll8 = ::LL8.new
198
+ ll8.foo.should be == 9
199
+ end
200
+
38
201
  end
@@ -1,6 +1,27 @@
1
1
  require "fastruby"
2
2
 
3
3
  describe FastRuby, "fastruby" do
4
+
5
+
6
+ class ::VY6
7
+ fastruby "
8
+ def foo(a)
9
+ yield(a)
10
+ end
11
+
12
+ def bar(x,block)
13
+ foo(x,&block)
14
+ end
15
+ "
16
+ end
17
+
18
+ it "should allow single arguments with block" do
19
+ vy6 = ::VY6.new
20
+
21
+ block = proc do |a| "44" end
22
+ vy6.bar(44,block).should be == "44"
23
+ end
24
+
4
25
  class ::VY7
5
26
  def foo(a)
6
27
  yield(a)
@@ -9,7 +30,7 @@ describe FastRuby, "fastruby" do
9
30
 
10
31
  fastruby "
11
32
  def bar(x,block)
12
- foo(x){|a|'44'} #,&block)
33
+ foo(x,&block)
13
34
  end
14
35
  "
15
36
  end
@@ -20,4 +41,51 @@ describe FastRuby, "fastruby" do
20
41
  block = proc do |a| "44" end
21
42
  vy7.bar(44,block).should be == "44"
22
43
  end
44
+
45
+
46
+ class ::VY8
47
+ def foo(a)
48
+ yield(a)
49
+ end
50
+
51
+
52
+ fastruby "
53
+ def bar(x,block)
54
+ foo(x,&block)
55
+ end
56
+ "
57
+ end
58
+
59
+ it "should allow single arguments with block calling ruby methods and read block arguments" do
60
+ vy8 = ::VY8.new
61
+
62
+ block = proc do |a| a.to_s end
63
+ vy8.bar(555,block).should be == "555"
64
+ end
65
+
66
+ it "should allow single arguments with block calling ruby methods and read array block arguments" do
67
+ vy8 = ::VY8.new
68
+
69
+ block = proc do |a| a end
70
+ vy8.bar([555],block).should be == [555]
71
+ end
72
+
73
+ class ::VY9
74
+ def foo(a)
75
+ yield(a)
76
+ end
77
+
78
+ fastruby "
79
+ def bar(vy9,x,block)
80
+ vy9.first.foo(x,&block)
81
+ end
82
+ "
83
+ end
84
+
85
+ it "should allow block as proc with no type inference of the receiver" do
86
+ vy9 = ::VY9.new
87
+
88
+ block = proc do |a| a end
89
+ vy9.bar([vy9],555,block).should be == 555
90
+ end
23
91
  end