sourcify 0.2.3 → 0.3.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.
- data/HISTORY.txt +4 -0
- data/README.rdoc +0 -3
- data/Rakefile +2 -0
- data/VERSION +1 -1
- data/ext/sourcify/extconf.rb +2 -0
- data/lib/sourcify.rb +8 -5
- data/lib/sourcify/proc.rb +21 -19
- data/lib/sourcify/proc/parser.rb +15 -9
- data/lib/sourcify/proc/scanner.rb +1508 -1282
- data/lib/sourcify/proc/scanner.rl +225 -49
- data/sourcify.gemspec +11 -2
- data/spec/proc/to_sexp_within_irb_spec.rb +146 -0
- data/spec/proc/to_source_within_irb_spec.rb +38 -0
- data/spec/spec_helper.rb +43 -0
- metadata +32 -9
@@ -91,6 +91,10 @@ module Sourcify
|
|
91
91
|
|
92
92
|
## MACHINE >> String
|
93
93
|
string := |*
|
94
|
+
|
95
|
+
sqm = '%q' | '%w';
|
96
|
+
dqm = '%Q' | '%W' | '%x' | '%r' | '%';
|
97
|
+
|
94
98
|
## == Single quote strings
|
95
99
|
sqs1 = "'" . ([^\']* | ([^\'\\]*[\\][\'][^\']*)*) . '\\\\'* . "'";
|
96
100
|
sqs2 = '~' . ([^\~]* | ([^\~\\]*[\\][\~][^\~]*)*) . '\\\\'* . '~';
|
@@ -121,8 +125,7 @@ module Sourcify
|
|
121
125
|
sqs27 = '(' . ([^\)]* | ([^\)\\]*[\\][\)][^\)]*)*) . '\\\\'* . ')';
|
122
126
|
sqs28 = '\\' . ([^\\]* | ([^\)]*[\\][\\][^\\]*)*) . '\\';
|
123
127
|
|
124
|
-
sqm
|
125
|
-
sqs1 | sqm . sqs1 | sqm . sqs2 | sqm . sqs3 | sqm . sqs4 |
|
128
|
+
( sqs1 | sqm . sqs1 | sqm . sqs2 | sqm . sqs3 | sqm . sqs4 |
|
126
129
|
sqm . sqs5 | sqm . sqs6 | sqm . sqs7 | sqm . sqs8 | sqm . sqs9 |
|
127
130
|
sqm . sqs10 | sqm . sqs11 | sqm . sqs12 | sqm . sqs13 | sqm . sqs14 |
|
128
131
|
sqm . sqs15 | sqm . sqs16 | sqm . sqs17 | sqm . sqs18 | sqm . sqs19 |
|
@@ -133,61 +136,234 @@ module Sourcify
|
|
133
136
|
};
|
134
137
|
|
135
138
|
## == Double quote strings
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
dqm = ('%Q' | '%W' | '%x' | '%r' | '%'); (
|
166
|
-
dqs1 | dqs2 | dqs3 | dqm . dqs1 | dqm . dqs2 |
|
167
|
-
dqm . dqs3 | dqm . dqs4 | dqm . dqs5 | dqm . dqs6 | dqm . dqs7 |
|
168
|
-
dqm . dqs8 | dqm . dqs9 | dqm . dqs10 | dqm . dqs11 | dqm . dqs12 |
|
169
|
-
dqm . dqs13 | dqm . dqs14 | dqm . dqs15 | dqm . dqs16 | dqm . dqs17 |
|
170
|
-
dqm . dqs18 | dqm . dqs19 | dqm . dqs20 | dqm . dqs21 | dqm . dqs22 |
|
171
|
-
dqm . dqs23 | dqm . dqs24 | dqm . dqs25 | dqm . dqs26 | dqm . dqs27 |
|
172
|
-
dqm . dqs28
|
173
|
-
) => {
|
174
|
-
if push_dstring(ts, te)
|
175
|
-
fgoto double_quote_str;
|
176
|
-
end
|
177
|
-
};
|
139
|
+
(dqm . '"') | '"' => { push_dstring(ts, te); fgoto dstring1; };
|
140
|
+
(dqm . "'") | "'" => { push_dstring(ts, te); fgoto dstring2; };
|
141
|
+
(dqm . '/') | '/' => { push_dstring(ts, te); fgoto dstring3; };
|
142
|
+
(dqm . '`') | '`' => { push_dstring(ts, te); fgoto dstring4; };
|
143
|
+
dqm . '~' => { push_dstring(ts, te); fgoto dstring5; };
|
144
|
+
dqm . '!' => { push_dstring(ts, te); fgoto dstring6; };
|
145
|
+
dqm . '@' => { push_dstring(ts, te); fgoto dstring7; };
|
146
|
+
dqm . '#' => { push_dstring(ts, te); fgoto dstring8; };
|
147
|
+
dqm . '$' => { push_dstring(ts, te); fgoto dstring9; };
|
148
|
+
dqm . '%' => { push_dstring(ts, te); fgoto dstring10; };
|
149
|
+
dqm . '^' => { push_dstring(ts, te); fgoto dstring11; };
|
150
|
+
dqm . '&' => { push_dstring(ts, te); fgoto dstring12; };
|
151
|
+
dqm . '*' => { push_dstring(ts, te); fgoto dstring13; };
|
152
|
+
dqm . '-' => { push_dstring(ts, te); fgoto dstring14; };
|
153
|
+
dqm . '_' => { push_dstring(ts, te); fgoto dstring15; };
|
154
|
+
dqm . '+' => { push_dstring(ts, te); fgoto dstring16; };
|
155
|
+
dqm . '=' => { push_dstring(ts, te); fgoto dstring17; };
|
156
|
+
dqm . '<' => { push_dstring(ts, te); fgoto dstring18; };
|
157
|
+
dqm . '|' => { push_dstring(ts, te); fgoto dstring19; };
|
158
|
+
dqm . ':' => { push_dstring(ts, te); fgoto dstring20; };
|
159
|
+
dqm . ';' => { push_dstring(ts, te); fgoto dstring21; };
|
160
|
+
dqm . ',' => { push_dstring(ts, te); fgoto dstring22; };
|
161
|
+
dqm . '.' => { push_dstring(ts, te); fgoto dstring23; };
|
162
|
+
dqm . '?' => { push_dstring(ts, te); fgoto dstring24; };
|
163
|
+
dqm . '{' => { push_dstring(ts, te); fgoto dstring25; };
|
164
|
+
dqm . '[' => { push_dstring(ts, te); fgoto dstring26; };
|
165
|
+
dqm . '(' => { push_dstring(ts, te); fgoto dstring27; };
|
166
|
+
dqm . '\\' => { push_dstring(ts, te); fgoto dstring28; };
|
178
167
|
|
179
168
|
## == Anything accidentally caught
|
180
169
|
any => {
|
181
170
|
push(:any, ts, te)
|
182
171
|
fgoto main;
|
183
172
|
};
|
184
|
-
|
185
173
|
*|;
|
186
174
|
|
187
|
-
##
|
188
|
-
|
189
|
-
|
190
|
-
|
175
|
+
## MACHINES >> Double quote strings
|
176
|
+
dstring1 := |*
|
177
|
+
[^\"]*[\"] => {
|
178
|
+
unless push_dstring(ts, te)
|
179
|
+
fgoto main;
|
180
|
+
end
|
181
|
+
};
|
182
|
+
*|;
|
183
|
+
dstring2 := |*
|
184
|
+
[^\']*[\'] => {
|
185
|
+
unless push_dstring(ts, te)
|
186
|
+
fgoto main;
|
187
|
+
end
|
188
|
+
};
|
189
|
+
*|;
|
190
|
+
dstring3 := |*
|
191
|
+
[^\/]*[\/] => {
|
192
|
+
unless push_dstring(ts, te)
|
193
|
+
fgoto main;
|
194
|
+
end
|
195
|
+
};
|
196
|
+
*|;
|
197
|
+
dstring4 := |*
|
198
|
+
[^\`]*[\`] => {
|
199
|
+
unless push_dstring(ts, te)
|
200
|
+
fgoto main;
|
201
|
+
end
|
202
|
+
};
|
203
|
+
*|;
|
204
|
+
dstring5 := |*
|
205
|
+
[^\~]*[\~] => {
|
206
|
+
unless push_dstring(ts, te)
|
207
|
+
fgoto main;
|
208
|
+
end
|
209
|
+
};
|
210
|
+
*|;
|
211
|
+
dstring6 := |*
|
212
|
+
[^\!]*[\!] => {
|
213
|
+
unless push_dstring(ts, te)
|
214
|
+
fgoto main;
|
215
|
+
end
|
216
|
+
};
|
217
|
+
*|;
|
218
|
+
dstring7 := |*
|
219
|
+
[^\@]*[\@] => {
|
220
|
+
unless push_dstring(ts, te)
|
221
|
+
fgoto main;
|
222
|
+
end
|
223
|
+
};
|
224
|
+
*|;
|
225
|
+
dstring8 := |*
|
226
|
+
[^\#]*[\#] => {
|
227
|
+
unless push_dstring(ts, te)
|
228
|
+
fgoto main;
|
229
|
+
end
|
230
|
+
};
|
231
|
+
*|;
|
232
|
+
dstring9 := |*
|
233
|
+
[^\$]*[\$] => {
|
234
|
+
unless push_dstring(ts, te)
|
235
|
+
fgoto main;
|
236
|
+
end
|
237
|
+
};
|
238
|
+
*|;
|
239
|
+
dstring10 := |*
|
240
|
+
[^\%]*[\%] => {
|
241
|
+
unless push_dstring(ts, te)
|
242
|
+
fgoto main;
|
243
|
+
end
|
244
|
+
};
|
245
|
+
*|;
|
246
|
+
dstring11 := |*
|
247
|
+
[^\^]*[\^] => {
|
248
|
+
unless push_dstring(ts, te)
|
249
|
+
fgoto main;
|
250
|
+
end
|
251
|
+
};
|
252
|
+
*|;
|
253
|
+
dstring12 := |*
|
254
|
+
[^\&]*[\&] => {
|
255
|
+
unless push_dstring(ts, te)
|
256
|
+
fgoto main;
|
257
|
+
end
|
258
|
+
};
|
259
|
+
*|;
|
260
|
+
dstring13 := |*
|
261
|
+
[^\*]*[\*] => {
|
262
|
+
unless push_dstring(ts, te)
|
263
|
+
fgoto main;
|
264
|
+
end
|
265
|
+
};
|
266
|
+
*|;
|
267
|
+
dstring14 := |*
|
268
|
+
[^\-]*[\-] => {
|
269
|
+
unless push_dstring(ts, te)
|
270
|
+
fgoto main;
|
271
|
+
end
|
272
|
+
};
|
273
|
+
*|;
|
274
|
+
dstring15 := |*
|
275
|
+
[^\_]*[\_] => {
|
276
|
+
unless push_dstring(ts, te)
|
277
|
+
fgoto main;
|
278
|
+
end
|
279
|
+
};
|
280
|
+
*|;
|
281
|
+
dstring16 := |*
|
282
|
+
[^\+]*[\+] => {
|
283
|
+
unless push_dstring(ts, te)
|
284
|
+
fgoto main;
|
285
|
+
end
|
286
|
+
};
|
287
|
+
*|;
|
288
|
+
dstring17 := |*
|
289
|
+
[^\=]*[\=] => {
|
290
|
+
unless push_dstring(ts, te)
|
291
|
+
fgoto main;
|
292
|
+
end
|
293
|
+
};
|
294
|
+
*|;
|
295
|
+
dstring18 := |*
|
296
|
+
[^\>]*[\>] => {
|
297
|
+
unless push_dstring(ts, te)
|
298
|
+
fgoto main;
|
299
|
+
end
|
300
|
+
};
|
301
|
+
*|;
|
302
|
+
dstring19 := |*
|
303
|
+
[^\|]*[\|] => {
|
304
|
+
unless push_dstring(ts, te)
|
305
|
+
fgoto main;
|
306
|
+
end
|
307
|
+
};
|
308
|
+
*|;
|
309
|
+
dstring20 := |*
|
310
|
+
[^\:]*[\:] => {
|
311
|
+
unless push_dstring(ts, te)
|
312
|
+
fgoto main;
|
313
|
+
end
|
314
|
+
};
|
315
|
+
*|;
|
316
|
+
dstring21 := |*
|
317
|
+
[^\;]*[\;] => {
|
318
|
+
unless push_dstring(ts, te)
|
319
|
+
fgoto main;
|
320
|
+
end
|
321
|
+
};
|
322
|
+
*|;
|
323
|
+
dstring22 := |*
|
324
|
+
[^\,]*[\,] => {
|
325
|
+
unless push_dstring(ts, te)
|
326
|
+
fgoto main;
|
327
|
+
end
|
328
|
+
};
|
329
|
+
*|;
|
330
|
+
dstring23 := |*
|
331
|
+
[^\.]*[\.] => {
|
332
|
+
unless push_dstring(ts, te)
|
333
|
+
fgoto main;
|
334
|
+
end
|
335
|
+
};
|
336
|
+
*|;
|
337
|
+
dstring24 := |*
|
338
|
+
[^\?]*[\?] => {
|
339
|
+
unless push_dstring(ts, te)
|
340
|
+
fgoto main;
|
341
|
+
end
|
342
|
+
};
|
343
|
+
*|;
|
344
|
+
dstring25 := |*
|
345
|
+
[^\}]*[\}] => {
|
346
|
+
unless push_dstring(ts, te)
|
347
|
+
fgoto main;
|
348
|
+
end
|
349
|
+
};
|
350
|
+
*|;
|
351
|
+
dstring26 := |*
|
352
|
+
[^\]]*[\]] => {
|
353
|
+
unless push_dstring(ts, te)
|
354
|
+
fgoto main;
|
355
|
+
end
|
356
|
+
};
|
357
|
+
*|;
|
358
|
+
dstring27 := |*
|
359
|
+
[^\)]*[\)] => {
|
360
|
+
unless push_dstring(ts, te)
|
361
|
+
fgoto main;
|
362
|
+
end
|
363
|
+
};
|
364
|
+
*|;
|
365
|
+
dstring28 := |*
|
366
|
+
[^\\]*[\\] => {
|
191
367
|
unless push_dstring(ts, te)
|
192
368
|
fgoto main;
|
193
369
|
end
|
data/sourcify.gemspec
CHANGED
@@ -5,13 +5,14 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{sourcify}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.3.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["NgTzeYang"]
|
12
|
-
s.date = %q{2010-09-
|
12
|
+
s.date = %q{2010-09-24}
|
13
13
|
s.description = %q{}
|
14
14
|
s.email = %q{ngty77@gmail.com}
|
15
|
+
s.extensions = ["ext/sourcify/extconf.rb"]
|
15
16
|
s.extra_rdoc_files = [
|
16
17
|
"LICENSE",
|
17
18
|
"README.rdoc"
|
@@ -41,6 +42,7 @@ Gem::Specification.new do |s|
|
|
41
42
|
"spec/proc/others_spec.rb",
|
42
43
|
"spec/proc/readme",
|
43
44
|
"spec/proc/to_sexp_variables_spec.rb",
|
45
|
+
"spec/proc/to_sexp_within_irb_spec.rb",
|
44
46
|
"spec/proc/to_source_from_braced_block_w_nested_braced_block_spec.rb",
|
45
47
|
"spec/proc/to_source_from_braced_block_w_nested_hash_spec.rb",
|
46
48
|
"spec/proc/to_source_from_braced_block_wo_nesting_complication_spec.rb",
|
@@ -63,6 +65,7 @@ Gem::Specification.new do |s|
|
|
63
65
|
"spec/proc/to_source_magic_file_var_spec.rb",
|
64
66
|
"spec/proc/to_source_magic_line_var_spec.rb",
|
65
67
|
"spec/proc/to_source_variables_spec.rb",
|
68
|
+
"spec/proc/to_source_within_irb_spec.rb",
|
66
69
|
"spec/proc_scanner/block_comment_spec.rb",
|
67
70
|
"spec/proc_scanner/double_colons_spec.rb",
|
68
71
|
"spec/proc_scanner/double_quote_str_w_interpolation_spec.rb",
|
@@ -78,6 +81,7 @@ Gem::Specification.new do |s|
|
|
78
81
|
s.homepage = %q{http://github.com/ngty/sourcify}
|
79
82
|
s.rdoc_options = ["--charset=UTF-8"]
|
80
83
|
s.require_paths = ["lib"]
|
84
|
+
s.required_ruby_version = Gem::Requirement.new(">= 1.8.6")
|
81
85
|
s.rubygems_version = %q{1.3.7}
|
82
86
|
s.summary = %q{Workarounds before ruby-core officially supports Proc#to_source (& friends)}
|
83
87
|
s.test_files = [
|
@@ -100,10 +104,12 @@ Gem::Specification.new do |s|
|
|
100
104
|
"spec/proc/to_source_from_multi_do_end_blocks_w_single_match_spec.rb",
|
101
105
|
"spec/proc/to_source_from_multi_blocks_w_many_matches_spec.rb",
|
102
106
|
"spec/proc/to_source_from_multi_blocks_w_single_match_spec.rb",
|
107
|
+
"spec/proc/to_sexp_within_irb_spec.rb",
|
103
108
|
"spec/proc/to_source_from_do_end_block_w_nested_module_spec.rb",
|
104
109
|
"spec/proc/to_source_from_do_end_block_w_nested_do_end_block_spec.rb",
|
105
110
|
"spec/proc/to_source_from_do_end_block_w_nested_method_spec.rb",
|
106
111
|
"spec/proc/to_source_from_do_end_block_w_nested_class_spec.rb",
|
112
|
+
"spec/proc/to_source_within_irb_spec.rb",
|
107
113
|
"spec/proc/to_source_from_do_end_block_w_nested_case_spec.rb",
|
108
114
|
"spec/proc/to_source_magic_line_var_spec.rb",
|
109
115
|
"spec/proc/to_source_from_do_end_block_w_nested_literal_keyword_spec.rb",
|
@@ -128,13 +134,16 @@ Gem::Specification.new do |s|
|
|
128
134
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
129
135
|
s.add_runtime_dependency(%q<ruby2ruby>, [">= 1.2.5"])
|
130
136
|
s.add_development_dependency(%q<bacon>, [">= 0"])
|
137
|
+
s.add_development_dependency(%q<otaku>, [">= 0.4.0"])
|
131
138
|
else
|
132
139
|
s.add_dependency(%q<ruby2ruby>, [">= 1.2.5"])
|
133
140
|
s.add_dependency(%q<bacon>, [">= 0"])
|
141
|
+
s.add_dependency(%q<otaku>, [">= 0.4.0"])
|
134
142
|
end
|
135
143
|
else
|
136
144
|
s.add_dependency(%q<ruby2ruby>, [">= 1.2.5"])
|
137
145
|
s.add_dependency(%q<bacon>, [">= 0"])
|
146
|
+
s.add_dependency(%q<otaku>, [">= 0.4.0"])
|
138
147
|
end
|
139
148
|
end
|
140
149
|
|
@@ -0,0 +1,146 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', 'spec_helper')
|
2
|
+
|
3
|
+
describe "Proc#to_sexp within IRB" do
|
4
|
+
|
5
|
+
class << self
|
6
|
+
|
7
|
+
def irb_eval(string)
|
8
|
+
irb_exec(string)[-1]
|
9
|
+
end
|
10
|
+
|
11
|
+
def equal_to(expected)
|
12
|
+
lambda {|found| found == expected }
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
should 'handle non var' do
|
18
|
+
expected = s(:iter, s(:call, nil, :proc, s(:arglist)), nil, s(:call, nil, :x, s(:arglist)))
|
19
|
+
irb_eval('lambda { x }.to_sexp').should.be equal_to(expected)
|
20
|
+
end
|
21
|
+
|
22
|
+
should 'handle local var' do
|
23
|
+
expected = s(:iter, s(:call, nil, :proc, s(:arglist)), nil, s(:lvar, :x))
|
24
|
+
irb_eval(%Q(
|
25
|
+
x = 'lx'
|
26
|
+
lambda { x }.to_sexp
|
27
|
+
)).should.be equal_to(expected)
|
28
|
+
end
|
29
|
+
|
30
|
+
should 'handle class_eval scoped local var' do
|
31
|
+
expected =
|
32
|
+
s(:iter,
|
33
|
+
s(:call, nil, :proc, s(:arglist)),
|
34
|
+
nil,
|
35
|
+
s(:iter,
|
36
|
+
s(:call, s(:const, :Object), :class_eval, s(:arglist)),
|
37
|
+
s(:lasgn, :x),
|
38
|
+
s(:lasgn, :y, s(:lvar, :x))))
|
39
|
+
irb_eval(%Q(
|
40
|
+
x = 1
|
41
|
+
lambda { Object.class_eval {|x| y = x } }.to_sexp
|
42
|
+
)).should.be equal_to(expected)
|
43
|
+
end
|
44
|
+
|
45
|
+
should 'handle instance_eval scoped local var' do
|
46
|
+
expected =
|
47
|
+
s(:iter,
|
48
|
+
s(:call, nil, :proc, s(:arglist)),
|
49
|
+
nil,
|
50
|
+
s(:iter,
|
51
|
+
s(:call, s(:str, "aa"), :instance_eval, s(:arglist)),
|
52
|
+
s(:lasgn, :x),
|
53
|
+
s(:lasgn, :y, s(:lvar, :x))))
|
54
|
+
irb_eval(%Q(
|
55
|
+
x = 1
|
56
|
+
lambda { 'aa'.instance_eval {|x| y = x } }.to_sexp
|
57
|
+
)).should.be equal_to(expected)
|
58
|
+
end
|
59
|
+
|
60
|
+
should 'handle define_method scoped local var' do
|
61
|
+
expected =
|
62
|
+
s(:iter,
|
63
|
+
s(:call, nil, :proc, s(:arglist)),
|
64
|
+
nil,
|
65
|
+
s(:iter,
|
66
|
+
s(:call,
|
67
|
+
s(:const, :Object),
|
68
|
+
:send,
|
69
|
+
s(:arglist, s(:lit, :define_method), s(:lit, :aa))),
|
70
|
+
s(:lasgn, :x),
|
71
|
+
s(:lasgn, :y, s(:lvar, :x))))
|
72
|
+
irb_eval(%Q(
|
73
|
+
x = 1
|
74
|
+
lambda { Object.send(:define_method, :aa) {|x| y = x } }.to_sexp
|
75
|
+
)).should.be equal_to(expected)
|
76
|
+
end
|
77
|
+
|
78
|
+
should 'not handle class scoped local var (simple)' do
|
79
|
+
expected =
|
80
|
+
s(:iter,
|
81
|
+
s(:call, nil, :proc, s(:arglist)),
|
82
|
+
nil,
|
83
|
+
s(:class, :AA, nil, s(:scope, s(:lasgn, :y, s(:call, nil, :x, s(:arglist))))))
|
84
|
+
irb_eval(%Q(
|
85
|
+
x = 1
|
86
|
+
lambda { class AA ; y = x ; end }.to_sexp
|
87
|
+
)).should.be equal_to(expected)
|
88
|
+
end
|
89
|
+
|
90
|
+
should 'not handle class scoped local var (w inheritance)' do
|
91
|
+
expected =
|
92
|
+
s(:iter,
|
93
|
+
s(:call, nil, :proc, s(:arglist)),
|
94
|
+
nil,
|
95
|
+
s(:class,
|
96
|
+
:AA,
|
97
|
+
s(:const, :Object),
|
98
|
+
s(:scope, s(:lasgn, :y, s(:call, nil, :x, s(:arglist))))))
|
99
|
+
irb_eval(%Q(
|
100
|
+
x = 1
|
101
|
+
lambda { class AA < Object; y = x ; end }.to_sexp
|
102
|
+
)).should.be equal_to(expected)
|
103
|
+
end
|
104
|
+
|
105
|
+
should 'not handle class scoped local var (w singleton)' do
|
106
|
+
expected =
|
107
|
+
s(:iter,
|
108
|
+
s(:call, nil, :proc, s(:arglist)),
|
109
|
+
nil,
|
110
|
+
s(:sclass,
|
111
|
+
s(:str, "AA"),
|
112
|
+
s(:scope, s(:lasgn, :y, s(:call, nil, :x, s(:arglist))))))
|
113
|
+
irb_eval(%Q(
|
114
|
+
x = 1
|
115
|
+
lambda { class << 'AA'; y = x ; end }.to_sexp
|
116
|
+
)).should.be equal_to(expected)
|
117
|
+
end
|
118
|
+
|
119
|
+
should 'not handle module scoped local var' do
|
120
|
+
expected =
|
121
|
+
s(:iter,
|
122
|
+
s(:call, nil, :proc, s(:arglist)),
|
123
|
+
nil,
|
124
|
+
s(:module, :AA, s(:scope, s(:lasgn, :y, s(:call, nil, :x, s(:arglist))))))
|
125
|
+
irb_eval(%Q(
|
126
|
+
x = 1
|
127
|
+
lambda { module AA ; y = x ; end }.to_sexp
|
128
|
+
)).should.be equal_to(expected)
|
129
|
+
end
|
130
|
+
|
131
|
+
should 'not handle method scoped local var' do
|
132
|
+
expected =
|
133
|
+
s(:iter,
|
134
|
+
s(:call, nil, :proc, s(:arglist)),
|
135
|
+
nil,
|
136
|
+
s(:defn,
|
137
|
+
:aa,
|
138
|
+
s(:args),
|
139
|
+
s(:scope, s(:block, s(:lasgn, :y, s(:call, nil, :x, s(:arglist)))))))
|
140
|
+
irb_eval(%Q(
|
141
|
+
x = 1
|
142
|
+
lambda { def aa ; y = x ; end }.to_sexp
|
143
|
+
)).should.be equal_to(expected)
|
144
|
+
end
|
145
|
+
|
146
|
+
end
|