sourcify 0.2.3 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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 = ('%q' | '%w'); (
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
- dqs1 = '"' . (([^\"]* | ([^\"\\]*[\\][\"][^\"]*)*) -- '#{') . '\\\\'* . ('"' | '#{');
137
- dqs2 = '`' . (([^\`]* | ([^\`\\]*[\\][\`][^\`]*)*) -- '#{') . '\\\\'* . ('`' | '#{');
138
- dqs3 = '/' . (([^\/]* | ([^\/\\]*[\\][\/][^\/]*)*) -- '#{') . '\\\\'* . ('/' | '#{');
139
- dqs4 = "'" . (([^\']* | ([^\'\\]*[\\][\'][^\']*)*) -- '#{') . '\\\\'* . ("'" | '#{');
140
- dqs5 = '~' . (([^\~]* | ([^\~\\]*[\\][\~][^\~]*)*) -- '#{') . '\\\\'* . ('~' | '#{');
141
- dqs6 = '!' . (([^\!]* | ([^\!\\]*[\\][\!][^\!]*)*) -- '#{') . '\\\\'* . ('!' | '#{');
142
- dqs7 = '@' . (([^\@]* | ([^\@\\]*[\\][\@][^\@]*)*) -- '#{') . '\\\\'* . ('@' | '#{');
143
- dqs8 = '#' . (([^\#]* | ([^\#\\]*[\\][\#][^\#]*)*) -- '#{') . '\\\\'* . ('#' | '#{');
144
- dqs9 = '$' . (([^\$]* | ([^\$\\]*[\\][\$][^\$]*)*) -- '#{') . '\\\\'* . ('$' | '#{');
145
- dqs10 = '%' . (([^\%]* | ([^\%\\]*[\\][\%][^\%]*)*) -- '#{') . '\\\\'* . ('%' | '#{');
146
- dqs11 = '^' . (([^\^]* | ([^\^\\]*[\\][\^][^\^]*)*) -- '#{') . '\\\\'* . ('^' | '#{');
147
- dqs12 = '&' . (([^\&]* | ([^\&\\]*[\\][\&][^\&]*)*) -- '#{') . '\\\\'* . ('&' | '#{');
148
- dqs13 = '*' . (([^\*]* | ([^\*\\]*[\\][\*][^\*]*)*) -- '#{') . '\\\\'* . ('*' | '#{');
149
- dqs14 = '-' . (([^\-]* | ([^\-\\]*[\\][\-][^\-]*)*) -- '#{') . '\\\\'* . ('-' | '#{');
150
- dqs15 = '_' . (([^\_]* | ([^\_\\]*[\\][\_][^\_]*)*) -- '#{') . '\\\\'* . ('_' | '#{');
151
- dqs16 = '+' . (([^\+]* | ([^\+\\]*[\\][\+][^\+]*)*) -- '#{') . '\\\\'* . ('+' | '#{');
152
- dqs17 = '=' . (([^\=]* | ([^\=\\]*[\\][\=][^\=]*)*) -- '#{') . '\\\\'* . ('=' | '#{');
153
- dqs18 = '<' . (([^\>]* | ([^\>\\]*[\\][\>][^\>]*)*) -- '#{') . '\\\\'* . ('>' | '#{');
154
- dqs19 = '|' . (([^\|]* | ([^\|\\]*[\\][\|][^\|]*)*) -- '#{') . '\\\\'* . ('|' | '#{');
155
- dqs20 = ':' . (([^\:]* | ([^\:\\]*[\\][\:][^\:]*)*) -- '#{') . '\\\\'* . (':' | '#{');
156
- dqs21 = ';' . (([^\;]* | ([^\;\\]*[\\][\;][^\;]*)*) -- '#{') . '\\\\'* . (';' | '#{');
157
- dqs22 = ',' . (([^\,]* | ([^\,\\]*[\\][\,][^\,]*)*) -- '#{') . '\\\\'* . (',' | '#{');
158
- dqs23 = '.' . (([^\.]* | ([^\.\\]*[\\][\.][^\.]*)*) -- '#{') . '\\\\'* . ('.' | '#{');
159
- dqs24 = '?' . (([^\?]* | ([^\?\\]*[\\][\?][^\?]*)*) -- '#{') . '\\\\'* . ('?' | '#{');
160
- dqs25 = '{' . (([^\}]* | ([^\}\\]*[\\][\}][^\}]*)*) -- '#{') . '\\\\'* . ('}' | '#{');
161
- dqs26 = '[' . (([^\]]* | ([^\]\\]*[\\][\]][^\]]*)*) -- '#{') . '\\\\'* . (']' | '#{');
162
- dqs27 = '(' . (([^\)]* | ([^\)\\]*[\\][\)][^\)]*)*) -- '#{') . '\\\\'* . (')' | '#{');
163
- dqs28 = '\\' . (([^\\]* | ([^\\]*[\\][\\][^\\]*)*) -- '#{') . ('\\' | '#{');
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
- ## MACHINE >> Double quote string
188
- double_quote_str := |*
189
- delimiter = [\~\`\!\@\#\$\%\^\&\*\)\-\_\+\=\}\]\:\;\'\"\>\,\.\?\/\|\\];
190
- (^delimiter* . delimiter) -- ('\\' . delimiter) => {
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
@@ -5,13 +5,14 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{sourcify}
8
- s.version = "0.2.3"
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-15}
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