rubinius-melbourne 2.0.0.19 → 2.0.1.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 (75) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.travis.yml +14 -0
  4. data/Gemfile +4 -0
  5. data/Rakefile +31 -0
  6. data/ext/rubinius/melbourne/extconf.rb +9 -2
  7. data/lib/rubinius/melbourne.rb +1 -1
  8. data/lib/rubinius/melbourne/version.rb +1 -1
  9. data/rubinius-melbourne.gemspec +5 -3
  10. data/spec/alias_spec.rb +40 -0
  11. data/spec/and_spec.rb +19 -0
  12. data/spec/array_spec.rb +81 -0
  13. data/spec/attrasgn_spec.rb +112 -0
  14. data/spec/back_ref_spec.rb +11 -0
  15. data/spec/call_spec.rb +298 -0
  16. data/spec/case_spec.rb +234 -0
  17. data/spec/cdecl_spec.rb +45 -0
  18. data/spec/class_spec.rb +83 -0
  19. data/spec/colon2_spec.rb +7 -0
  20. data/spec/colon3_spec.rb +7 -0
  21. data/spec/const_spec.rb +7 -0
  22. data/spec/custom/matchers/parse_as.rb +27 -0
  23. data/spec/custom/runner/relates.rb +83 -0
  24. data/spec/cvar_spec.rb +29 -0
  25. data/spec/cvasgn_spec.rb +30 -0
  26. data/spec/cvdecl_spec.rb +12 -0
  27. data/spec/default.mspec +4 -0
  28. data/spec/defined_spec.rb +117 -0
  29. data/spec/defn_spec.rb +554 -0
  30. data/spec/defs_spec.rb +81 -0
  31. data/spec/dot2_spec.rb +7 -0
  32. data/spec/dot3_spec.rb +7 -0
  33. data/spec/dregx_spec.rb +52 -0
  34. data/spec/dstr_spec.rb +169 -0
  35. data/spec/dsym_spec.rb +10 -0
  36. data/spec/dxstr_spec.rb +11 -0
  37. data/spec/ensure_spec.rb +117 -0
  38. data/spec/false_spec.rb +7 -0
  39. data/spec/flip2_spec.rb +43 -0
  40. data/spec/flip3_spec.rb +27 -0
  41. data/spec/for_spec.rb +61 -0
  42. data/spec/gasgn_spec.rb +13 -0
  43. data/spec/gvar_spec.rb +25 -0
  44. data/spec/hash_spec.rb +31 -0
  45. data/spec/iasgn_spec.rb +25 -0
  46. data/spec/if_spec.rb +131 -0
  47. data/spec/iter_spec.rb +613 -0
  48. data/spec/lasgn_spec.rb +377 -0
  49. data/spec/lit_spec.rb +61 -0
  50. data/spec/masgn_spec.rb +406 -0
  51. data/spec/match2_spec.rb +19 -0
  52. data/spec/match3_spec.rb +24 -0
  53. data/spec/match_spec.rb +7 -0
  54. data/spec/module_spec.rb +47 -0
  55. data/spec/nil_spec.rb +7 -0
  56. data/spec/not_spec.rb +17 -0
  57. data/spec/nth_ref_spec.rb +7 -0
  58. data/spec/op_asgn_spec.rb +246 -0
  59. data/spec/or_spec.rb +35 -0
  60. data/spec/postexe_spec.rb +7 -0
  61. data/spec/regex_spec.rb +28 -0
  62. data/spec/rescue_spec.rb +359 -0
  63. data/spec/return_spec.rb +57 -0
  64. data/spec/sclass_spec.rb +55 -0
  65. data/spec/str_spec.rb +97 -0
  66. data/spec/super_spec.rb +93 -0
  67. data/spec/true_spec.rb +7 -0
  68. data/spec/undef_spec.rb +98 -0
  69. data/spec/until_spec.rb +140 -0
  70. data/spec/valias_spec.rb +7 -0
  71. data/spec/while_spec.rb +192 -0
  72. data/spec/xstr_spec.rb +7 -0
  73. data/spec/yield_spec.rb +65 -0
  74. data/spec/zsuper_spec.rb +45 -0
  75. metadata +171 -13
@@ -0,0 +1,19 @@
1
+ describe "A Match2 node" do
2
+ relates '/x/ =~ "blah"' do
3
+ parse do
4
+ [:match2, [:regex, "x", 0], [:str, "blah"]]
5
+ end
6
+ end
7
+
8
+ relates <<-ruby do
9
+ x = "x"
10
+ /\#{x}/ =~ x
11
+ ruby
12
+
13
+ parse do
14
+ [:block,
15
+ [:lasgn, :x, [:str, "x"]],
16
+ [:match2, [:dregx, "", [:evstr, [:lvar, :x]]], [:lvar, :x]]]
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,24 @@
1
+ describe "A Match3 node" do
2
+ relates '"blah" =~ /x/' do
3
+ parse do
4
+ [:match3, [:regex, "x", 0], [:str, "blah"]]
5
+ end
6
+ end
7
+
8
+ relates <<-ruby do
9
+ a = 'abc'
10
+ if a =~ /\#{a}/
11
+ 1
12
+ end
13
+ ruby
14
+
15
+ parse do
16
+ [:block,
17
+ [:lasgn, :a, [:str, "abc"]],
18
+ [:if,
19
+ [:match3, [:dregx, "", [:evstr, [:lvar, :a]]], [:lvar, :a]],
20
+ [:lit, 1],
21
+ nil]]
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,7 @@
1
+ describe "A Match node" do
2
+ relates "1 if /x/" do
3
+ parse do
4
+ [:if, [:match, [:regex, "x", 0]], [:lit, 1], nil]
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,47 @@
1
+ describe "A Module node" do
2
+ relates <<-ruby do
3
+ module X
4
+ def y
5
+ end
6
+ end
7
+ ruby
8
+
9
+ parse do
10
+ [:module, :X, [:scope, [:defn, :y, [:args], [:scope, [:block, [:nil]]]]]]
11
+ end
12
+ end
13
+
14
+ relates <<-ruby do
15
+ module ::Y
16
+ c
17
+ end
18
+ ruby
19
+
20
+ parse do
21
+ [:module, [:colon3, :Y], [:scope, [:call, nil, :c, [:arglist]]]]
22
+ end
23
+ end
24
+
25
+ relates <<-ruby do
26
+ module X::Y
27
+ c
28
+ end
29
+ ruby
30
+
31
+ parse do
32
+ [:module, [:colon2, [:const, :X], :Y], [:scope, [:call, nil, :c, [:arglist]]]]
33
+ end
34
+ end
35
+
36
+ relates <<-ruby do
37
+ "prevent the above from infecting rdoc"
38
+
39
+ module Graffle
40
+ end
41
+ ruby
42
+
43
+ parse do
44
+ [:module, :Graffle, [:scope]]
45
+ end
46
+ end
47
+ end
data/spec/nil_spec.rb ADDED
@@ -0,0 +1,7 @@
1
+ describe "A Nil node" do
2
+ relates "nil" do
3
+ parse do
4
+ [:nil]
5
+ end
6
+ end
7
+ end
data/spec/not_spec.rb ADDED
@@ -0,0 +1,17 @@
1
+ describe "A Not node" do
2
+ relates "(not true)" do
3
+ parse do
4
+ [:not, [:true]]
5
+ end
6
+ end
7
+
8
+ relates <<-ruby do
9
+ a = 1
10
+ b = !a
11
+ ruby
12
+
13
+ parse do
14
+ [:block, [:lasgn, :a, [:lit, 1]], [:lasgn, :b, [:not, [:lvar, :a]]]]
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,7 @@
1
+ describe "An Nth_ref node" do
2
+ relates "$1" do
3
+ parse do
4
+ [:nth_ref, 1]
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,246 @@
1
+ describe "An Op_asgn1 node" do
2
+ relates "a &&= 8" do
3
+ parse do
4
+ [:op_asgn_and, [:lvar, :a], [:lasgn, :a, [:lit, 8]]]
5
+ end
6
+ end
7
+
8
+ relates "hsh[:blah] ||= 8" do
9
+ parse do
10
+ [:op_asgn1,
11
+ [:call, nil, :hsh, [:arglist]],
12
+ [:arglist, [:lit, :blah]],
13
+ :"||",
14
+ [:lit, 8]]
15
+ end
16
+ end
17
+
18
+ relates <<-ruby do
19
+ x = 1
20
+ hsh[x] ||= 8
21
+ ruby
22
+
23
+ parse do
24
+ [:block,
25
+ [:lasgn, :x, [:lit, 1]],
26
+ [:op_asgn1,
27
+ [:call, nil, :hsh, [:arglist]],
28
+ [:arglist, [:lvar, :x]],
29
+ :"||",
30
+ [:lit, 8]]]
31
+ end
32
+ end
33
+
34
+ relates "hsh[:blah] &&= 8" do
35
+ parse do
36
+ [:op_asgn1,
37
+ [:call, nil, :hsh, [:arglist]],
38
+ [:arglist, [:lit, :blah]],
39
+ :"&&",
40
+ [:lit, 8]]
41
+ end
42
+ end
43
+
44
+ relates "hsh[:blah] ^= 8" do
45
+ parse do
46
+ [:op_asgn1,
47
+ [:call, nil, :hsh, [:arglist]],
48
+ [:arglist, [:lit, :blah]],
49
+ :^,
50
+ [:lit, 8]]
51
+ end
52
+ end
53
+
54
+ relates "ary[0,1] += [4]" do
55
+ parse do
56
+ [:op_asgn1,
57
+ [:call, nil, :ary, [:arglist]],
58
+ [:arglist, [:lit, 0], [:lit, 1]],
59
+ :+,
60
+ [:array, [:lit, 4]]]
61
+ end
62
+ end
63
+
64
+ relates "x.val ||= 6" do
65
+ parse do
66
+ [:op_asgn2, [:call, nil, :x, [:arglist]], :val=, :"||", [:lit, 6]]
67
+ end
68
+ end
69
+
70
+ relates "x.val &&= 7" do
71
+ parse do
72
+ [:op_asgn2, [:call, nil, :x, [:arglist]], :val=, :"&&", [:lit, 7]]
73
+ end
74
+ end
75
+
76
+ relates <<-ruby do
77
+ @b = []
78
+ @b[1] ||= 10
79
+ @b[2] &&= 11
80
+ @b[3] += 12
81
+ ruby
82
+
83
+ parse do
84
+ [:block,
85
+ [:iasgn, :@b, [:array]],
86
+ [:op_asgn1, [:ivar, :@b], [:arglist, [:lit, 1]], :"||", [:lit, 10]],
87
+ [:op_asgn1, [:ivar, :@b], [:arglist, [:lit, 2]], :"&&", [:lit, 11]],
88
+ [:op_asgn1, [:ivar, :@b], [:arglist, [:lit, 3]], :+, [:lit, 12]]]
89
+ end
90
+ end
91
+
92
+ relates <<-ruby do
93
+ b = []
94
+ b[1] ||= 10
95
+ b[2] &&= 11
96
+ b[3] += 12
97
+ ruby
98
+
99
+ parse do
100
+ [:block,
101
+ [:lasgn, :b, [:array]],
102
+ [:op_asgn1, [:lvar, :b], [:arglist, [:lit, 1]], :"||", [:lit, 10]],
103
+ [:op_asgn1, [:lvar, :b], [:arglist, [:lit, 2]], :"&&", [:lit, 11]],
104
+ [:op_asgn1, [:lvar, :b], [:arglist, [:lit, 3]], :+, [:lit, 12]]]
105
+ end
106
+ end
107
+ end
108
+
109
+ describe "An Op_asgn2 node" do
110
+ relates "x.val ^= 8" do
111
+ parse do
112
+ [:op_asgn2, [:call, nil, :x, [:arglist]], :val=, :^, [:lit, 8]]
113
+ end
114
+ end
115
+
116
+ relates "self.Bag ||= Bag.new" do
117
+ parse do
118
+ [:op_asgn2,
119
+ [:self],
120
+ :"Bag=", :"||", [:call, [:const, :Bag], :new, [:arglist]]]
121
+ end
122
+ end
123
+
124
+ relates <<-ruby do
125
+ s = Struct.new(:var)
126
+ c = s.new(nil)
127
+ c.var ||= 20
128
+ c.var &&= 21
129
+ c.var += 22
130
+ c.d.e.f ||= 42
131
+ ruby
132
+
133
+ parse do
134
+ [:block,
135
+ [:lasgn, :s, [:call, [:const, :Struct], :new, [:arglist, [:lit, :var]]]],
136
+ [:lasgn, :c, [:call, [:lvar, :s], :new, [:arglist, [:nil]]]],
137
+ [:op_asgn2, [:lvar, :c], :var=, :"||", [:lit, 20]],
138
+ [:op_asgn2, [:lvar, :c], :var=, :"&&", [:lit, 21]],
139
+ [:op_asgn2, [:lvar, :c], :var=, :+, [:lit, 22]],
140
+ [:op_asgn2,
141
+ [:call, [:call, [:lvar, :c], :d, [:arglist]], :e, [:arglist]],
142
+ :f=,
143
+ :"||",
144
+ [:lit, 42]]]
145
+ end
146
+ end
147
+ end
148
+
149
+ describe "An Op_asgn_and node" do
150
+ relates "@fetcher &&= new(Gem.configuration[:http_proxy])" do
151
+ parse do
152
+ [:op_asgn_and,
153
+ [:ivar, :@fetcher],
154
+ [:iasgn,
155
+ :@fetcher,
156
+ [:call,
157
+ nil,
158
+ :new,
159
+ [:arglist,
160
+ [:call,
161
+ [:call, [:const, :Gem], :configuration, [:arglist]],
162
+ :[],
163
+ [:arglist, [:lit, :http_proxy]]]]]]]
164
+ end
165
+ end
166
+
167
+ relates <<-ruby do
168
+ a = 0
169
+ a &&= 2
170
+ ruby
171
+
172
+ parse do
173
+ [:block,
174
+ [:lasgn, :a, [:lit, 0]],
175
+ [:op_asgn_and, [:lvar, :a], [:lasgn, :a, [:lit, 2]]]]
176
+ end
177
+ end
178
+ end
179
+
180
+ describe "An Op_asgn_or node" do
181
+ relates "@@var ||= 3" do
182
+ parse do
183
+ [:op_asgn_or, [:cvar, :@@var], [:cvdecl, :@@var, [:lit, 3]]]
184
+ end
185
+ end
186
+
187
+ relates "a ||= 8" do
188
+ parse do
189
+ [:op_asgn_or, [:lvar, :a], [:lasgn, :a, [:lit, 8]]]
190
+ end
191
+ end
192
+
193
+ relates <<-ruby do
194
+ a ||= begin
195
+ b
196
+ rescue
197
+ c
198
+ end
199
+ ruby
200
+
201
+ parse do
202
+ [:op_asgn_or,
203
+ [:lvar, :a],
204
+ [:lasgn,
205
+ :a,
206
+ [:rescue,
207
+ [:call, nil, :b, [:arglist]],
208
+ [:resbody, [:array], [:call, nil, :c, [:arglist]]]]]]
209
+ end
210
+ end
211
+
212
+ relates "@fetcher ||= new(Gem.configuration[:http_proxy])" do
213
+ parse do
214
+ [:op_asgn_or,
215
+ [:ivar, :@fetcher],
216
+ [:iasgn,
217
+ :@fetcher,
218
+ [:call,
219
+ nil,
220
+ :new,
221
+ [:arglist,
222
+ [:call,
223
+ [:call, [:const, :Gem], :configuration, [:arglist]],
224
+ :[],
225
+ [:arglist, [:lit, :http_proxy]]]]]]]
226
+ end
227
+ end
228
+
229
+ relates "@v ||= { }" do
230
+ parse do
231
+ [:op_asgn_or, [:ivar, :@v], [:iasgn, :@v, [:hash]]]
232
+ end
233
+ end
234
+
235
+ relates <<-ruby do
236
+ a = 0
237
+ a ||= 1
238
+ ruby
239
+
240
+ parse do
241
+ [:block,
242
+ [:lasgn, :a, [:lit, 0]],
243
+ [:op_asgn_or, [:lvar, :a], [:lasgn, :a, [:lit, 1]]]]
244
+ end
245
+ end
246
+ end
data/spec/or_spec.rb ADDED
@@ -0,0 +1,35 @@
1
+ describe "An Or node" do
2
+ relates "(a or b)" do
3
+ parse do
4
+ [:or, [:call, nil, :a, [:arglist]], [:call, nil, :b, [:arglist]]]
5
+ end
6
+ end
7
+
8
+ relates "((a || b) || (c && d))" do
9
+ parse do
10
+ [:or,
11
+ [:or, [:call, nil, :a, [:arglist]], [:call, nil, :b, [:arglist]]],
12
+ [:and, [:call, nil, :c, [:arglist]], [:call, nil, :d, [:arglist]]]]
13
+ end
14
+ end
15
+
16
+ relates "((a or b) or (c and d))" do
17
+ parse do
18
+ [:or,
19
+ [:or, [:call, nil, :a, [:arglist]], [:call, nil, :b, [:arglist]]],
20
+ [:and, [:call, nil, :c, [:arglist]], [:call, nil, :d, [:arglist]]]]
21
+ end
22
+ end
23
+
24
+ relates "() or a" do
25
+ parse do
26
+ [:or, [:nil], [:call, nil, :a, [:arglist]]]
27
+ end
28
+ end
29
+
30
+ relates "a or ()" do
31
+ parse do
32
+ [:or, [:call, nil, :a, [:arglist]], [:nil]]
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,7 @@
1
+ describe "A Postexe node" do
2
+ relates "END { 1 }" do
3
+ parse do
4
+ [:iter, [:postexe], nil, [:lit, 1]]
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,28 @@
1
+ describe "A Regex node" do
2
+ relates "str.split(//i)" do
3
+ parse do
4
+ [:call,
5
+ [:call, nil, :str, [:arglist]],
6
+ :split,
7
+ [:arglist, [:regex, "", 1]]]
8
+ end
9
+ end
10
+
11
+ relates "/x/n" do
12
+ parse do
13
+ [:regex, "x", 16]
14
+ end
15
+ end
16
+
17
+ relates "/x/o" do
18
+ parse do
19
+ [:regex, "x", 0]
20
+ end
21
+ end
22
+
23
+ relates "/x/" do
24
+ parse do
25
+ [:regex, "x", 0]
26
+ end
27
+ end
28
+ end