fastruby 0.0.19 → 0.0.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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