rubinius-compiler 2.1.0 → 2.1.1

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 (91) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +8 -0
  3. data/lib/rubinius/compiler/compiled_file.rb +32 -32
  4. data/lib/rubinius/compiler/version.rb +2 -2
  5. data/rubinius-compiler.gemspec +6 -0
  6. data/spec/alias_spec.rb +39 -0
  7. data/spec/and_spec.rb +44 -0
  8. data/spec/array_spec.rb +110 -0
  9. data/spec/attrasgn_spec.rb +186 -0
  10. data/spec/back_ref_spec.rb +11 -0
  11. data/spec/call_spec.rb +580 -0
  12. data/spec/case_spec.rb +576 -0
  13. data/spec/cdecl_spec.rb +70 -0
  14. data/spec/class_spec.rb +120 -0
  15. data/spec/colon2_spec.rb +8 -0
  16. data/spec/colon3_spec.rb +8 -0
  17. data/spec/const_spec.rb +7 -0
  18. data/spec/custom/guards/profiler.rb +18 -0
  19. data/spec/custom/helpers/generator.rb +828 -0
  20. data/spec/custom/matchers/compile_as.rb +46 -0
  21. data/spec/custom/mspec.rb +15 -0
  22. data/spec/custom/runner/actions/debug.rb +10 -0
  23. data/spec/custom/runner/actions/gcstats.rb +17 -0
  24. data/spec/custom/runner/actions/memory.rb +11 -0
  25. data/spec/custom/runner/actions/parser.rb +14 -0
  26. data/spec/custom/runner/actions/profiler.rb +19 -0
  27. data/spec/custom/runner/relates.rb +86 -0
  28. data/spec/custom/utils/options.rb +40 -0
  29. data/spec/custom/utils/script.rb +50 -0
  30. data/spec/cvar_spec.rb +39 -0
  31. data/spec/cvasgn_spec.rb +33 -0
  32. data/spec/cvdecl_spec.rb +17 -0
  33. data/spec/defined_spec.rb +616 -0
  34. data/spec/defn_spec.rb +732 -0
  35. data/spec/defs_spec.rb +113 -0
  36. data/spec/dot2_spec.rb +16 -0
  37. data/spec/dot3_spec.rb +17 -0
  38. data/spec/dregx_spec.rb +160 -0
  39. data/spec/dstr_spec.rb +424 -0
  40. data/spec/dsym_spec.rb +18 -0
  41. data/spec/dxstr_spec.rb +24 -0
  42. data/spec/ensure_spec.rb +196 -0
  43. data/spec/false_spec.rb +7 -0
  44. data/spec/flip2_spec.rb +21 -0
  45. data/spec/flip3_spec.rb +12 -0
  46. data/spec/for_spec.rb +228 -0
  47. data/spec/gasgn_spec.rb +15 -0
  48. data/spec/generator/encode_spec.rb +34 -0
  49. data/spec/gvar_spec.rb +37 -0
  50. data/spec/hash_spec.rb +108 -0
  51. data/spec/iasgn_spec.rb +26 -0
  52. data/spec/if_spec.rb +415 -0
  53. data/spec/iter_spec.rb +1011 -0
  54. data/spec/lasgn_spec.rb +561 -0
  55. data/spec/lit_spec.rb +61 -0
  56. data/spec/masgn_spec.rb +1558 -0
  57. data/spec/match2_spec.rb +42 -0
  58. data/spec/match3_spec.rb +54 -0
  59. data/spec/match_spec.rb +29 -0
  60. data/spec/module_spec.rb +73 -0
  61. data/spec/nil_spec.rb +7 -0
  62. data/spec/not_spec.rb +47 -0
  63. data/spec/nth_ref_spec.rb +7 -0
  64. data/spec/op_asgn_spec.rb +563 -0
  65. data/spec/or_spec.rb +126 -0
  66. data/spec/postexe_spec.rb +11 -0
  67. data/spec/preexe_spec.rb +21 -0
  68. data/spec/regex_spec.rb +54 -0
  69. data/spec/rescue_spec.rb +763 -0
  70. data/spec/return_spec.rb +152 -0
  71. data/spec/sclass_spec.rb +138 -0
  72. data/spec/spec_helper.rb +12 -0
  73. data/spec/str_spec.rb +118 -0
  74. data/spec/super_spec.rb +170 -0
  75. data/spec/transforms/assembly_spec.rb +195 -0
  76. data/spec/transforms/block_given_spec.rb +75 -0
  77. data/spec/transforms/fast_coerce_spec.rb +112 -0
  78. data/spec/transforms/fast_new_spec.rb +255 -0
  79. data/spec/transforms/invoke_primitive_spec.rb +14 -0
  80. data/spec/transforms/kernel_methods_spec.rb +29 -0
  81. data/spec/transforms/primitive_spec.rb +33 -0
  82. data/spec/transforms/privately_spec.rb +24 -0
  83. data/spec/true_spec.rb +7 -0
  84. data/spec/undef_spec.rb +133 -0
  85. data/spec/until_spec.rb +254 -0
  86. data/spec/valias_spec.rb +11 -0
  87. data/spec/while_spec.rb +494 -0
  88. data/spec/xstr_spec.rb +10 -0
  89. data/spec/yield_spec.rb +92 -0
  90. data/spec/zsuper_spec.rb +63 -0
  91. metadata +258 -3
data/spec/dsym_spec.rb ADDED
@@ -0,0 +1,18 @@
1
+ describe "A Dsym node" do
2
+ relates ':"x#{(1 + 1)}y"' do
3
+ compile do |g|
4
+ g.push_literal "x"
5
+
6
+ g.push 1
7
+ g.push 1
8
+ g.send :+, 1, false
9
+ g.meta_to_s
10
+
11
+ g.push_literal "y"
12
+
13
+ g.string_build 3
14
+
15
+ g.send :to_sym, 0, true
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,24 @@
1
+ describe "A Dxstr node" do
2
+ relates <<-ruby do
3
+ t = 5
4
+ `touch \#{t}`
5
+ ruby
6
+
7
+ compile do |g|
8
+ g.push 5
9
+ g.set_local 0
10
+ g.pop
11
+
12
+ g.push :self
13
+
14
+ g.push_literal "touch "
15
+
16
+ g.push_local 0
17
+ g.meta_to_s
18
+
19
+ g.string_build 2
20
+
21
+ g.send :"`", 1, true
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,196 @@
1
+ describe "An Ensure node" do
2
+ relates <<-ruby do
3
+ begin
4
+ # do nothing
5
+ rescue
6
+ # do nothing
7
+ ensure
8
+ # do nothing
9
+ end
10
+ ruby
11
+
12
+ compile do |g|
13
+ g.for_ensure do |eb|
14
+ eb.body do
15
+ g.for_rescue do |rb|
16
+ rb.body do
17
+ g.push :nil
18
+ end
19
+
20
+ rb.condition :StandardError, true do
21
+ g.push :nil
22
+ end
23
+ end
24
+ end
25
+
26
+ eb.handler do
27
+ g.push :nil
28
+ g.pop
29
+ end
30
+ end
31
+ end
32
+ end
33
+
34
+ relates <<-ruby do
35
+ begin
36
+ (1 + 1)
37
+ rescue SyntaxError => e1
38
+ 2
39
+ rescue Exception => e2
40
+ 3
41
+ else
42
+ 4
43
+ ensure
44
+ 5
45
+ end
46
+ ruby
47
+
48
+ compile do |g|
49
+ g.for_ensure do |eb|
50
+ eb.body do
51
+ g.for_rescue do |rb|
52
+ rb.body do
53
+ g.push 1
54
+ g.push 1
55
+ g.send :+, 1, false
56
+ end
57
+
58
+ rb.condition :SyntaxError do
59
+ g.push_current_exception
60
+ g.set_local 0
61
+ g.pop
62
+ g.push 2
63
+ end
64
+
65
+ rb.condition :Exception do
66
+ g.push_current_exception
67
+ g.set_local 1
68
+ g.pop
69
+ g.push 3
70
+ end
71
+
72
+ rb.els do
73
+ g.pop # TODO: should this be built in?
74
+ g.push 4
75
+ end
76
+ end
77
+ end
78
+
79
+ eb.handler do
80
+ g.push 5
81
+ g.pop
82
+ end
83
+ end
84
+ end
85
+ end
86
+
87
+ relates <<-ruby do
88
+ begin
89
+ a
90
+ rescue
91
+ # do nothing
92
+ ensure
93
+ # do nothing
94
+ end
95
+ ruby
96
+
97
+ compile do |g|
98
+ g.for_ensure do |eb|
99
+ eb.body do
100
+ g.for_rescue do |rb|
101
+ rb.body do
102
+ g.push :self
103
+ g.send :a, 0, true
104
+ end
105
+
106
+ rb.condition :StandardError, true do
107
+ g.push :nil
108
+ end
109
+ end
110
+ end
111
+
112
+ eb.handler do
113
+ g.push :nil
114
+ g.pop
115
+ end
116
+ end
117
+ end
118
+ end
119
+
120
+ relates <<-ruby do
121
+ begin
122
+ 14
123
+ return 2
124
+ ensure
125
+ 13
126
+ end
127
+ ruby
128
+
129
+ compile do |g|
130
+ top = g.new_label
131
+ exc_lbl = g.new_label
132
+ noexc_lbl = g.new_label
133
+
134
+ g.setup_unwind exc_lbl
135
+
136
+ top.set!
137
+
138
+ saved = save_exception()
139
+
140
+ g.push 14
141
+ g.pop
142
+ g.push 2
143
+ g.ensure_return
144
+
145
+ g.pop_unwind
146
+ g.goto noexc_lbl
147
+
148
+ exc_lbl.set!
149
+ g.push_exception_state
150
+
151
+ g.push 13
152
+ g.pop
153
+
154
+ g.restore_exception_state
155
+ g.reraise
156
+
157
+ noexc_lbl.set!
158
+
159
+ g.push 13
160
+ g.pop
161
+ end
162
+ end
163
+
164
+ relates <<-ruby do
165
+ begin
166
+ begin
167
+ 14
168
+ return 2
169
+ ensure
170
+ 13
171
+ end
172
+ ensure
173
+ 15
174
+ end
175
+ ruby
176
+
177
+ # TODO
178
+ end
179
+
180
+ relates <<-ruby do
181
+ begin
182
+ 14
183
+ return 2
184
+ ensure
185
+ begin
186
+ 15
187
+ return 3
188
+ ensure
189
+ 16
190
+ end
191
+ end
192
+ ruby
193
+
194
+ # TODO
195
+ end
196
+ end
@@ -0,0 +1,7 @@
1
+ describe "A False node" do
2
+ relates "false" do
3
+ compile do |g|
4
+ g.push :false
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,21 @@
1
+ describe "A Flip2 node" do
2
+ relates <<-ruby do
3
+ x = if ((i % 4) == 0)..((i % 3) == 0) then
4
+ i
5
+ else
6
+ nil
7
+ end
8
+ ruby
9
+
10
+ # flip2
11
+ end
12
+
13
+ relates <<-ruby do
14
+ if 1..2.a?(b) then
15
+ nil
16
+ end
17
+ ruby
18
+
19
+ # flip2 method
20
+ end
21
+ end
@@ -0,0 +1,12 @@
1
+ describe "A Flip3 node" do
2
+ relates <<-ruby do
3
+ x = if ((i % 4) == 0)...((i % 3) == 0) then
4
+ i
5
+ else
6
+ nil
7
+ end
8
+ ruby
9
+
10
+ # flip3
11
+ end
12
+ end
data/spec/for_spec.rb ADDED
@@ -0,0 +1,228 @@
1
+ describe "A For node" do
2
+ relates <<-ruby do
3
+ for o in ary do
4
+ puts(o)
5
+ end
6
+ ruby
7
+
8
+ compile do |g|
9
+ g.push :self
10
+ g.send :ary, 0, true
11
+
12
+ d = new_block_generator(g)
13
+
14
+ ruby_version_is ""..."1.9" do
15
+ d.cast_for_single_block_arg
16
+ end
17
+
18
+ ruby_version_is "1.9" do
19
+ d.push_local 0
20
+ end
21
+
22
+ d.set_local_depth 1, 0
23
+
24
+ d.pop
25
+ d.push_modifiers
26
+ d.new_label.set!
27
+
28
+ d.push :self
29
+ d.push_local_depth 1, 0
30
+ d.send :puts, 1, true
31
+
32
+ d.pop_modifiers
33
+ d.ret
34
+
35
+ g.create_block(d)
36
+
37
+ g.send_with_block :each, 0, false
38
+ end
39
+ end
40
+
41
+ relates <<-ruby do
42
+ for i in (0..max) do
43
+ # do nothing
44
+ end
45
+ ruby
46
+
47
+ compile do |g|
48
+ g.push_cpath_top
49
+ g.find_const :Range
50
+ g.send :allocate, 0, true
51
+ g.dup
52
+ g.push 0
53
+ g.push :self
54
+ g.send :max, 0, true
55
+ g.send :initialize, 2, true
56
+ g.pop
57
+
58
+ d = new_block_generator(g)
59
+
60
+ ruby_version_is ""..."1.9" do
61
+ d.cast_for_single_block_arg
62
+ end
63
+
64
+ ruby_version_is "1.9" do
65
+ d.push_local 0
66
+ end
67
+
68
+ d.set_local_depth 1, 0
69
+
70
+ d.pop
71
+ d.push_modifiers
72
+ d.new_label.set!
73
+
74
+ d.push :nil
75
+
76
+ d.pop_modifiers
77
+ d.ret
78
+
79
+ g.create_block(d)
80
+
81
+ g.send_with_block :each, 0, false
82
+ end
83
+ end
84
+
85
+ relates <<-ruby do
86
+ for a, b in x do
87
+ 5
88
+ end
89
+ ruby
90
+
91
+ compile do |g|
92
+ d = new_block_generator(g)
93
+
94
+ ruby_version_is ""..."1.9" do
95
+ d.cast_for_multi_block_arg
96
+ end
97
+
98
+ d.push_literal Rubinius::ToolSets::Spec::Compiler::Runtime
99
+ d.push_local 0
100
+ d.send :unwrap_block_arg, 1
101
+ d.cast_array
102
+
103
+ d.shift_array
104
+ d.set_local_depth 1, 0
105
+ d.pop
106
+ d.shift_array
107
+ d.set_local_depth 1, 1
108
+ d.pop
109
+ d.pop
110
+ d.push_modifiers
111
+ d.new_label.set!
112
+ d.push 5
113
+ d.pop_modifiers
114
+ d.ret
115
+
116
+ g.push :self
117
+ g.send :x, 0, true
118
+ g.create_block d
119
+
120
+ g.send_with_block :each, 0, false
121
+ end
122
+ end
123
+
124
+ relates <<-ruby do
125
+ for i in ()
126
+ i
127
+ end
128
+ ruby
129
+
130
+ compile do |g|
131
+ g.push :nil
132
+
133
+ d = new_block_generator(g)
134
+
135
+ ruby_version_is ""..."1.9" do
136
+ d.cast_for_single_block_arg
137
+ end
138
+
139
+ ruby_version_is "1.9" do
140
+ d.push_local 0
141
+ end
142
+
143
+ d.set_local_depth 1, 0
144
+
145
+ d.pop
146
+ d.push_modifiers
147
+ d.new_label.set!
148
+
149
+ d.push_local_depth 1, 0
150
+
151
+ d.pop_modifiers
152
+ d.ret
153
+
154
+ g.create_block(d)
155
+
156
+ g.send_with_block :each, 0, false
157
+ end
158
+ end
159
+
160
+ relates <<-ruby do
161
+ c = 1
162
+ for i in a
163
+ for j in b
164
+ c
165
+ end
166
+ end
167
+ ruby
168
+
169
+ compile do |g|
170
+ g.push 1
171
+ g.set_local 0
172
+ g.pop
173
+
174
+ g.push :self
175
+ g.send :a, 0, true
176
+
177
+ # outer for
178
+ d = new_block_generator(g)
179
+
180
+ ruby_version_is ""..."1.9" do
181
+ d.cast_for_single_block_arg
182
+ end
183
+
184
+ ruby_version_is "1.9" do
185
+ d.push_local 0
186
+ end
187
+
188
+ d.set_local_depth 1, 1
189
+ d.pop
190
+
191
+ d.push_modifiers
192
+ d.new_label.set!
193
+
194
+ d.push :self
195
+ d.send :b, 0, true
196
+
197
+ # inner for
198
+ e = new_block_generator(g)
199
+
200
+ ruby_version_is ""..."1.9" do
201
+ e.cast_for_single_block_arg
202
+ end
203
+
204
+ ruby_version_is "1.9" do
205
+ e.push_local 0
206
+ end
207
+
208
+ e.set_local_depth 2, 2
209
+ e.pop
210
+
211
+ e.push_modifiers
212
+ e.new_label.set!
213
+ e.push_local_depth 2, 0
214
+
215
+ e.pop_modifiers
216
+ e.ret
217
+
218
+ d.create_block(e)
219
+ d.send_with_block :each, 0, false
220
+
221
+ d.pop_modifiers
222
+ d.ret
223
+
224
+ g.create_block(d)
225
+ g.send_with_block :each, 0, false
226
+ end
227
+ end
228
+ end