melbourne 1.0.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.
Files changed (113) hide show
  1. data/HISTORY +3 -0
  2. data/LICENSE +27 -0
  3. data/README.rdoc +38 -0
  4. data/Rakefile +38 -0
  5. data/VERSION.yml +4 -0
  6. data/ext/melbourne/bstring-license.txt +29 -0
  7. data/ext/melbourne/bstrlib.c +2918 -0
  8. data/ext/melbourne/bstrlib.h +302 -0
  9. data/ext/melbourne/extconf.rb +76 -0
  10. data/ext/melbourne/grammar.cpp +11885 -0
  11. data/ext/melbourne/grammar.hpp +14 -0
  12. data/ext/melbourne/grammar.y +6013 -0
  13. data/ext/melbourne/internal.hpp +137 -0
  14. data/ext/melbourne/lex.c.tab +136 -0
  15. data/ext/melbourne/local_state.hpp +41 -0
  16. data/ext/melbourne/melbourne.cpp +37 -0
  17. data/ext/melbourne/node.hpp +262 -0
  18. data/ext/melbourne/node_types.cpp +245 -0
  19. data/ext/melbourne/node_types.hpp +135 -0
  20. data/ext/melbourne/node_types.rb +190 -0
  21. data/ext/melbourne/quark.cpp +52 -0
  22. data/ext/melbourne/quark.hpp +14 -0
  23. data/ext/melbourne/symbols.cpp +219 -0
  24. data/ext/melbourne/symbols.hpp +116 -0
  25. data/ext/melbourne/var_table.cpp +113 -0
  26. data/ext/melbourne/var_table.hpp +33 -0
  27. data/ext/melbourne/visitor.cpp +1052 -0
  28. data/ext/melbourne/visitor.hpp +20 -0
  29. data/lib/melbourne/ast/constants.rb +128 -0
  30. data/lib/melbourne/ast/control_flow.rb +382 -0
  31. data/lib/melbourne/ast/data.rb +19 -0
  32. data/lib/melbourne/ast/definitions.rb +561 -0
  33. data/lib/melbourne/ast/exceptions.rb +182 -0
  34. data/lib/melbourne/ast/file.rb +15 -0
  35. data/lib/melbourne/ast/grapher.rb +75 -0
  36. data/lib/melbourne/ast/literals.rb +268 -0
  37. data/lib/melbourne/ast/node.rb +21 -0
  38. data/lib/melbourne/ast/operators.rb +117 -0
  39. data/lib/melbourne/ast/self.rb +17 -0
  40. data/lib/melbourne/ast/sends.rb +451 -0
  41. data/lib/melbourne/ast/values.rb +74 -0
  42. data/lib/melbourne/ast/variables.rb +251 -0
  43. data/lib/melbourne/ast.rb +22 -0
  44. data/lib/melbourne/parser.rb +38 -0
  45. data/lib/melbourne/processor.rb +460 -0
  46. data/lib/melbourne.rb +46 -0
  47. data/spec/helpers/ast/node.rb +15 -0
  48. data/spec/helpers/ast/reduced_graph.rb +64 -0
  49. data/spec/lib/parser/alias_spec.rb +97 -0
  50. data/spec/lib/parser/and_spec.rb +63 -0
  51. data/spec/lib/parser/array_spec.rb +157 -0
  52. data/spec/lib/parser/attrasgn_spec.rb +401 -0
  53. data/spec/lib/parser/back_ref_spec.rb +20 -0
  54. data/spec/lib/parser/call_spec.rb +958 -0
  55. data/spec/lib/parser/case_spec.rb +577 -0
  56. data/spec/lib/parser/cdecl_spec.rb +108 -0
  57. data/spec/lib/parser/class_spec.rb +221 -0
  58. data/spec/lib/parser/colon2_spec.rb +13 -0
  59. data/spec/lib/parser/colon3_spec.rb +12 -0
  60. data/spec/lib/parser/const_spec.rb +12 -0
  61. data/spec/lib/parser/cvar_spec.rb +55 -0
  62. data/spec/lib/parser/cvasgn_spec.rb +71 -0
  63. data/spec/lib/parser/cvdecl_spec.rb +31 -0
  64. data/spec/lib/parser/defined_spec.rb +353 -0
  65. data/spec/lib/parser/defn_spec.rb +1409 -0
  66. data/spec/lib/parser/defs_spec.rb +247 -0
  67. data/spec/lib/parser/dot2_spec.rb +29 -0
  68. data/spec/lib/parser/dot3_spec.rb +29 -0
  69. data/spec/lib/parser/dregx_spec.rb +127 -0
  70. data/spec/lib/parser/dstr_spec.rb +453 -0
  71. data/spec/lib/parser/dsym_spec.rb +31 -0
  72. data/spec/lib/parser/dxstr_spec.rb +31 -0
  73. data/spec/lib/parser/ensure_spec.rb +279 -0
  74. data/spec/lib/parser/false_spec.rb +12 -0
  75. data/spec/lib/parser/flip2_spec.rb +138 -0
  76. data/spec/lib/parser/flip3_spec.rb +100 -0
  77. data/spec/lib/parser/for_spec.rb +279 -0
  78. data/spec/lib/parser/gasgn_spec.rb +34 -0
  79. data/spec/lib/parser/gvar_spec.rb +33 -0
  80. data/spec/lib/parser/hash_spec.rb +77 -0
  81. data/spec/lib/parser/iasgn_spec.rb +54 -0
  82. data/spec/lib/parser/if_spec.rb +439 -0
  83. data/spec/lib/parser/iter_spec.rb +2582 -0
  84. data/spec/lib/parser/lasgn_spec.rb +1066 -0
  85. data/spec/lib/parser/lit_spec.rb +75 -0
  86. data/spec/lib/parser/masgn_spec.rb +1970 -0
  87. data/spec/lib/parser/match2_spec.rb +47 -0
  88. data/spec/lib/parser/match3_spec.rb +54 -0
  89. data/spec/lib/parser/match_spec.rb +19 -0
  90. data/spec/lib/parser/module_spec.rb +102 -0
  91. data/spec/lib/parser/nil_spec.rb +13 -0
  92. data/spec/lib/parser/not_spec.rb +39 -0
  93. data/spec/lib/parser/nth_ref_spec.rb +12 -0
  94. data/spec/lib/parser/op_asgn_spec.rb +619 -0
  95. data/spec/lib/parser/or_spec.rb +155 -0
  96. data/spec/lib/parser/postexe_spec.rb +31 -0
  97. data/spec/lib/parser/regex_spec.rb +52 -0
  98. data/spec/lib/parser/rescue_spec.rb +1028 -0
  99. data/spec/lib/parser/return_spec.rb +151 -0
  100. data/spec/lib/parser/sclass_spec.rb +172 -0
  101. data/spec/lib/parser/str_spec.rb +162 -0
  102. data/spec/lib/parser/super_spec.rb +276 -0
  103. data/spec/lib/parser/true_spec.rb +12 -0
  104. data/spec/lib/parser/undef_spec.rb +222 -0
  105. data/spec/lib/parser/until_spec.rb +286 -0
  106. data/spec/lib/parser/valias_spec.rb +12 -0
  107. data/spec/lib/parser/while_spec.rb +458 -0
  108. data/spec/lib/parser/xstr_spec.rb +12 -0
  109. data/spec/lib/parser/yield_spec.rb +202 -0
  110. data/spec/lib/parser/zsuper_spec.rb +101 -0
  111. data/spec/matchers/parse_as.rb +27 -0
  112. data/spec/spec_helper.rb +10 -0
  113. metadata +168 -0
@@ -0,0 +1,279 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe Melbourne::Parser do
4
+
5
+ it 'should correctly parse "begin ... rescue ... ensure ..."' do
6
+ ruby = <<-ruby
7
+ begin
8
+ # do nothing
9
+ rescue
10
+ # do nothing
11
+ ensure
12
+ # do nothing
13
+ end
14
+ ruby
15
+ ast = {:begin=>
16
+ {:@rescue=>
17
+ {:ensure=>
18
+ {:@ensure=>{},
19
+ :@body=>
20
+ {:rescue=>
21
+ {:@body=>nil,
22
+ :@rescue=>
23
+ {:rescuecondition=>
24
+ {:@conditions=>
25
+ {:arrayliteral=>
26
+ {:@body=>[{:constfind=>{:@name=>:StandardError, :@line=>5}}],
27
+ :@line=>5}},
28
+ :@body=>{},
29
+ :@splat=>nil,
30
+ :@next=>nil,
31
+ :@line=>5,
32
+ :@assignment=>nil}},
33
+ :@else=>nil,
34
+ :@line=>7}},
35
+ :@line=>7}},
36
+ :@line=>1}}
37
+
38
+ ruby.should parse_as(ast)
39
+ end
40
+
41
+ it 'should correctly parse "begin ... rescue SyntaxError ... rescue Exception ..."' do
42
+ ruby = <<-ruby
43
+ begin
44
+ (1 + 1)
45
+ rescue SyntaxError => e1
46
+ 2
47
+ rescue Exception => e2
48
+ 3
49
+ else
50
+ 4
51
+ ensure
52
+ 5
53
+ end
54
+ ruby
55
+ ast = {:begin=>
56
+ {:@rescue=>
57
+ {:ensure=>
58
+ {:@ensure=>{:fixnumliteral=>{:@line=>10, :@value=>5}},
59
+ :@body=>
60
+ {:rescue=>
61
+ {:@body=>
62
+ {:sendwitharguments=>
63
+ {:@block=>nil,
64
+ :@name=>:+,
65
+ :@line=>2,
66
+ :@privately=>false,
67
+ :@receiver=>{:fixnumliteral=>{:@line=>2, :@value=>1}},
68
+ :@check_for_local=>false,
69
+ :@arguments=>
70
+ {:actualarguments=>
71
+ {:@array=>[{:fixnumliteral=>{:@line=>2, :@value=>1}}],
72
+ :@splat=>nil,
73
+ :@line=>2}}}},
74
+ :@rescue=>
75
+ {:rescuecondition=>
76
+ {:@conditions=>
77
+ {:arrayliteral=>
78
+ {:@body=>[{:constfind=>{:@name=>:SyntaxError, :@line=>3}}],
79
+ :@line=>3}},
80
+ :@body=>
81
+ {:block=>
82
+ {:@array=>[{:fixnumliteral=>{:@line=>4, :@value=>2}}],
83
+ :@line=>3}},
84
+ :@splat=>nil,
85
+ :@next=>
86
+ {:rescuecondition=>
87
+ {:@conditions=>
88
+ {:arrayliteral=>
89
+ {:@body=>[{:constfind=>{:@name=>:Exception, :@line=>5}}],
90
+ :@line=>5}},
91
+ :@body=>
92
+ {:block=>
93
+ {:@array=>[{:fixnumliteral=>{:@line=>6, :@value=>3}}],
94
+ :@line=>5}},
95
+ :@splat=>nil,
96
+ :@next=>nil,
97
+ :@line=>5,
98
+ :@assignment=>
99
+ {:localvariableassignment=>
100
+ {:@variable=>nil,
101
+ :@name=>:e2,
102
+ :@line=>5,
103
+ :@value=>
104
+ {:globalvariableaccess=>{:@name=>:$!, :@line=>7}}}}}},
105
+ :@line=>3,
106
+ :@assignment=>
107
+ {:localvariableassignment=>
108
+ {:@variable=>nil,
109
+ :@name=>:e1,
110
+ :@line=>3,
111
+ :@value=>
112
+ {:globalvariableaccess=>{:@name=>:$!, :@line=>7}}}}}},
113
+ :@else=>{:fixnumliteral=>{:@line=>8, :@value=>4}},
114
+ :@line=>11}},
115
+ :@line=>2}},
116
+ :@line=>1}}
117
+
118
+ ruby.should parse_as(ast)
119
+ end
120
+
121
+ it 'should correctly parse "begin ... a ... rescue ... ensure ..."' do
122
+ ruby = <<-ruby
123
+ begin
124
+ a
125
+ rescue
126
+ # do nothing
127
+ ensure
128
+ # do nothing
129
+ end
130
+ ruby
131
+ ast = {:begin=>
132
+ {:@rescue=>
133
+ {:ensure=>
134
+ {:@ensure=>{},
135
+ :@body=>
136
+ {:rescue=>
137
+ {:@body=>
138
+ {:send=>
139
+ {:@block=>nil,
140
+ :@name=>:a,
141
+ :@line=>2,
142
+ :@privately=>true,
143
+ :@receiver=>{:self=>{:@line=>2}},
144
+ :@check_for_local=>false}},
145
+ :@rescue=>
146
+ {:rescuecondition=>
147
+ {:@conditions=>
148
+ {:arrayliteral=>
149
+ {:@body=>[{:constfind=>{:@name=>:StandardError, :@line=>5}}],
150
+ :@line=>5}},
151
+ :@body=>{},
152
+ :@splat=>nil,
153
+ :@next=>nil,
154
+ :@line=>5,
155
+ :@assignment=>nil}},
156
+ :@else=>nil,
157
+ :@line=>7}},
158
+ :@line=>2}},
159
+ :@line=>1}}
160
+
161
+ ruby.should parse_as(ast)
162
+ end
163
+
164
+ it 'should correctly parse "begin ... return ... ensure"' do
165
+ ruby = <<-ruby
166
+ begin
167
+ 14
168
+ return 2
169
+ ensure
170
+ 13
171
+ end
172
+ ruby
173
+ ast = {:begin=>
174
+ {:@rescue=>
175
+ {:ensure=>
176
+ {:@ensure=>{:fixnumliteral=>{:@line=>5, :@value=>13}},
177
+ :@body=>
178
+ {:block=>
179
+ {:@array=>
180
+ [{:fixnumliteral=>{:@line=>2, :@value=>14}},
181
+ {:return=>
182
+ {:@splat=>nil,
183
+ :@line=>3,
184
+ :@value=>{:fixnumliteral=>{:@line=>3, :@value=>2}}}}],
185
+ :@line=>2}},
186
+ :@line=>2}},
187
+ :@line=>1}}
188
+
189
+ ruby.should parse_as(ast)
190
+ end
191
+
192
+ it 'should correctly parse "begin ... begin ... ensure ... ensure"' do
193
+ ruby = <<-ruby
194
+ begin
195
+ begin
196
+ 14
197
+ return 2
198
+ ensure
199
+ 13
200
+ end
201
+ ensure
202
+ 15
203
+ end
204
+ ruby
205
+ ast = {:begin=>
206
+ {:@rescue=>
207
+ {:ensure=>
208
+ {:@ensure=>{:fixnumliteral=>{:@line=>9, :@value=>15}},
209
+ :@body=>
210
+ {:begin=>
211
+ {:@rescue=>
212
+ {:ensure=>
213
+ {:@ensure=>{:fixnumliteral=>{:@line=>6, :@value=>13}},
214
+ :@body=>
215
+ {:block=>
216
+ {:@array=>
217
+ [{:fixnumliteral=>{:@line=>3, :@value=>14}},
218
+ {:return=>
219
+ {:@splat=>nil,
220
+ :@line=>4,
221
+ :@value=>{:fixnumliteral=>{:@line=>4, :@value=>2}}}}],
222
+ :@line=>3}},
223
+ :@line=>3}},
224
+ :@line=>2}},
225
+ :@line=>2}},
226
+ :@line=>1}}
227
+
228
+ ruby.should parse_as(ast)
229
+ end
230
+
231
+ it 'should correctly parse " begin ... return ... ensure ... begin ... return ... ensure"' do
232
+ ruby = <<-ruby
233
+ begin
234
+ 14
235
+ return 2
236
+ ensure
237
+ begin
238
+ 15
239
+ return 3
240
+ ensure
241
+ 16
242
+ end
243
+ end
244
+ ruby
245
+ ast = {:begin=>
246
+ {:@rescue=>
247
+ {:ensure=>
248
+ {:@ensure=>
249
+ {:begin=>
250
+ {:@rescue=>
251
+ {:ensure=>
252
+ {:@ensure=>{:fixnumliteral=>{:@line=>9, :@value=>16}},
253
+ :@body=>
254
+ {:block=>
255
+ {:@array=>
256
+ [{:fixnumliteral=>{:@line=>6, :@value=>15}},
257
+ {:return=>
258
+ {:@splat=>nil,
259
+ :@line=>7,
260
+ :@value=>{:fixnumliteral=>{:@line=>7, :@value=>3}}}}],
261
+ :@line=>6}},
262
+ :@line=>6}},
263
+ :@line=>5}},
264
+ :@body=>
265
+ {:block=>
266
+ {:@array=>
267
+ [{:fixnumliteral=>{:@line=>2, :@value=>14}},
268
+ {:return=>
269
+ {:@splat=>nil,
270
+ :@line=>3,
271
+ :@value=>{:fixnumliteral=>{:@line=>3, :@value=>2}}}}],
272
+ :@line=>2}},
273
+ :@line=>2}},
274
+ :@line=>1}}
275
+
276
+ ruby.should parse_as(ast)
277
+ end
278
+
279
+ end
@@ -0,0 +1,12 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe Melbourne::Parser do
4
+
5
+ it 'should correctly parse "false"' do
6
+ ruby = 'false'
7
+ ast = {:false=>{:@line=>1}}
8
+
9
+ ruby.should parse_as(ast)
10
+ end
11
+
12
+ end
@@ -0,0 +1,138 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe Melbourne::Parser do
4
+
5
+ it 'should correctly parse "... ((i % 4) == 0)..((i % 3) == 0) ..."' do
6
+ ruby = <<-ruby
7
+ x = if ((i % 4) == 0)..((i % 3) == 0) then
8
+ i
9
+ else
10
+ nil
11
+ end
12
+ ruby
13
+ ast = {:localvariableassignment=>
14
+ {:@variable=>nil,
15
+ :@name=>:x,
16
+ :@line=>1,
17
+ :@value=>
18
+ {:if=>
19
+ {:@body=>
20
+ {:send=>
21
+ {:@block=>nil,
22
+ :@name=>:i,
23
+ :@line=>2,
24
+ :@privately=>true,
25
+ :@receiver=>{:self=>{:@line=>2}},
26
+ :@check_for_local=>false}},
27
+ :@condition=>
28
+ {:flip2=>
29
+ {:@start=>
30
+ {:sendwitharguments=>
31
+ {:@block=>nil,
32
+ :@name=>:==,
33
+ :@line=>1,
34
+ :@privately=>false,
35
+ :@receiver=>
36
+ {:sendwitharguments=>
37
+ {:@block=>nil,
38
+ :@name=>:%,
39
+ :@line=>1,
40
+ :@privately=>false,
41
+ :@receiver=>
42
+ {:send=>
43
+ {:@block=>nil,
44
+ :@name=>:i,
45
+ :@line=>1,
46
+ :@privately=>true,
47
+ :@receiver=>{:self=>{:@line=>1}},
48
+ :@check_for_local=>false}},
49
+ :@check_for_local=>false,
50
+ :@arguments=>
51
+ {:actualarguments=>
52
+ {:@array=>[{:fixnumliteral=>{:@line=>1, :@value=>4}}],
53
+ :@splat=>nil,
54
+ :@line=>1}}}},
55
+ :@check_for_local=>false,
56
+ :@arguments=>
57
+ {:actualarguments=>
58
+ {:@array=>[{:fixnumliteral=>{:@line=>1, :@value=>0}}],
59
+ :@splat=>nil,
60
+ :@line=>1}}}},
61
+ :@finish=>
62
+ {:sendwitharguments=>
63
+ {:@block=>nil,
64
+ :@name=>:==,
65
+ :@line=>1,
66
+ :@privately=>false,
67
+ :@receiver=>
68
+ {:sendwitharguments=>
69
+ {:@block=>nil,
70
+ :@name=>:%,
71
+ :@line=>1,
72
+ :@privately=>false,
73
+ :@receiver=>
74
+ {:send=>
75
+ {:@block=>nil,
76
+ :@name=>:i,
77
+ :@line=>1,
78
+ :@privately=>true,
79
+ :@receiver=>{:self=>{:@line=>1}},
80
+ :@check_for_local=>false}},
81
+ :@check_for_local=>false,
82
+ :@arguments=>
83
+ {:actualarguments=>
84
+ {:@array=>[{:fixnumliteral=>{:@line=>1, :@value=>3}}],
85
+ :@splat=>nil,
86
+ :@line=>1}}}},
87
+ :@check_for_local=>false,
88
+ :@arguments=>
89
+ {:actualarguments=>
90
+ {:@array=>[{:fixnumliteral=>{:@line=>1, :@value=>0}}],
91
+ :@splat=>nil,
92
+ :@line=>1}}}},
93
+ :@line=>1}},
94
+ :@else=>{},
95
+ :@line=>1}}}}
96
+
97
+ ruby.should parse_as(ast)
98
+ end
99
+
100
+ it 'should correctly parse "... 1..2.a?(b) ..."' do
101
+ ruby = <<-ruby
102
+ if 1..2.a?(b) then
103
+ nil
104
+ end
105
+ ruby
106
+ ast = {:if=>
107
+ {:@body=>{},
108
+ :@condition=>
109
+ {:flip2=>
110
+ {:@start=>{:fixnumliteral=>{:@line=>1, :@value=>1}},
111
+ :@finish=>
112
+ {:sendwitharguments=>
113
+ {:@block=>nil,
114
+ :@name=>:a?,
115
+ :@line=>1,
116
+ :@privately=>false,
117
+ :@receiver=>{:fixnumliteral=>{:@line=>1, :@value=>2}},
118
+ :@check_for_local=>false,
119
+ :@arguments=>
120
+ {:actualarguments=>
121
+ {:@array=>
122
+ [{:send=>
123
+ {:@block=>nil,
124
+ :@name=>:b,
125
+ :@line=>1,
126
+ :@privately=>true,
127
+ :@receiver=>{:self=>{:@line=>1}},
128
+ :@check_for_local=>false}}],
129
+ :@splat=>nil,
130
+ :@line=>1}}}},
131
+ :@line=>1}},
132
+ :@else=>{},
133
+ :@line=>1}}
134
+
135
+ ruby.should parse_as(ast)
136
+ end
137
+
138
+ end
@@ -0,0 +1,100 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe Melbourne::Parser do
4
+
5
+ it 'should correctly parse "... ((i % 4) == 0)...((i % 3) == 0) ..."' do
6
+ ruby = <<-ruby
7
+ x = if ((i % 4) == 0)...((i % 3) == 0) then
8
+ i
9
+ else
10
+ nil
11
+ end
12
+ ruby
13
+ ast = {:localvariableassignment=>
14
+ {:@variable=>nil,
15
+ :@name=>:x,
16
+ :@line=>1,
17
+ :@value=>
18
+ {:if=>
19
+ {:@body=>
20
+ {:send=>
21
+ {:@block=>nil,
22
+ :@name=>:i,
23
+ :@line=>2,
24
+ :@privately=>true,
25
+ :@receiver=>{:self=>{:@line=>2}},
26
+ :@check_for_local=>false}},
27
+ :@condition=>
28
+ {:flip3=>
29
+ {:@start=>
30
+ {:sendwitharguments=>
31
+ {:@block=>nil,
32
+ :@name=>:==,
33
+ :@line=>1,
34
+ :@privately=>false,
35
+ :@receiver=>
36
+ {:sendwitharguments=>
37
+ {:@block=>nil,
38
+ :@name=>:%,
39
+ :@line=>1,
40
+ :@privately=>false,
41
+ :@receiver=>
42
+ {:send=>
43
+ {:@block=>nil,
44
+ :@name=>:i,
45
+ :@line=>1,
46
+ :@privately=>true,
47
+ :@receiver=>{:self=>{:@line=>1}},
48
+ :@check_for_local=>false}},
49
+ :@check_for_local=>false,
50
+ :@arguments=>
51
+ {:actualarguments=>
52
+ {:@array=>[{:fixnumliteral=>{:@line=>1, :@value=>4}}],
53
+ :@splat=>nil,
54
+ :@line=>1}}}},
55
+ :@check_for_local=>false,
56
+ :@arguments=>
57
+ {:actualarguments=>
58
+ {:@array=>[{:fixnumliteral=>{:@line=>1, :@value=>0}}],
59
+ :@splat=>nil,
60
+ :@line=>1}}}},
61
+ :@finish=>
62
+ {:sendwitharguments=>
63
+ {:@block=>nil,
64
+ :@name=>:==,
65
+ :@line=>1,
66
+ :@privately=>false,
67
+ :@receiver=>
68
+ {:sendwitharguments=>
69
+ {:@block=>nil,
70
+ :@name=>:%,
71
+ :@line=>1,
72
+ :@privately=>false,
73
+ :@receiver=>
74
+ {:send=>
75
+ {:@block=>nil,
76
+ :@name=>:i,
77
+ :@line=>1,
78
+ :@privately=>true,
79
+ :@receiver=>{:self=>{:@line=>1}},
80
+ :@check_for_local=>false}},
81
+ :@check_for_local=>false,
82
+ :@arguments=>
83
+ {:actualarguments=>
84
+ {:@array=>[{:fixnumliteral=>{:@line=>1, :@value=>3}}],
85
+ :@splat=>nil,
86
+ :@line=>1}}}},
87
+ :@check_for_local=>false,
88
+ :@arguments=>
89
+ {:actualarguments=>
90
+ {:@array=>[{:fixnumliteral=>{:@line=>1, :@value=>0}}],
91
+ :@splat=>nil,
92
+ :@line=>1}}}},
93
+ :@line=>1}},
94
+ :@else=>{},
95
+ :@line=>1}}}}
96
+
97
+ ruby.should parse_as(ast)
98
+ end
99
+
100
+ end