ParseTree 2.1.1 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,32 @@
1
+ === 2.2.0 / 2008-06-09
2
+
3
+ * 18 minor enhancements:
4
+
5
+ * Added 1.9 and rubinius to multiruby skip list.
6
+ * Added 1.9 fixes for SexpProcessor.
7
+ * Added compatibility changes for regexp option values.
8
+ * Added custom compact since Array#compact is hostile to subclasses.
9
+ * Added some tests for wonky index edge cases. some commented out.
10
+ * Added test changes for 1.9 and r2r changes. Esp fixed regexp differences.
11
+ * Added tests for dasgn, proc arities,
12
+ * Added/updated some tests for ruby_parser.
13
+ * Changed tests to default to nil for verbose.
14
+ * Fixed all assertions deprecated in miniunit.
15
+ * Raises LoadError if incompatible ruby, allows fallback to ruby_parser.
16
+ * Removed Unified's rewrite_fbody and moved up into defn... not sure about that.
17
+ * Removed argscat rewriter from unified_ruby.rb
18
+ * Renamed shadowed variable name.
19
+ * Reworked parse_tree_for_(method|string) to take optional verbose arg.
20
+ * Started removing ending newlines from pt_testcase.rb.
21
+ * Uncommented all commented out tests. ruby_parser must not be a pansy.
22
+ * Updated rakefile for new hoe abilities.
23
+
24
+ * 3 bug fixes:
25
+
26
+ * Fixed 1.8.[45] wrt dasgn_curr declaration removal.
27
+ * Fixed pt_testcase bug.
28
+ * Fixes for colon2/3 in class/module/cdecls.
29
+
1
30
  === 2.1.1 / 2007-12-22
2
31
 
3
32
  * 1 bug fix:
data/README.txt CHANGED
@@ -1,7 +1,8 @@
1
- ParseTree
2
- http://rubyforge.org/projects/parsetree/
3
- http://www.zenspider.com/ZSS/Products/ParseTree/
4
- support@zenspider.com
1
+ = ParseTree
2
+
3
+ * http://rubyforge.org/projects/parsetree/
4
+ * http://www.zenspider.com/ZSS/Products/ParseTree/
5
+ * ryand-ruby@zenspider.com
5
6
 
6
7
  == DESCRIPTION:
7
8
 
data/Rakefile CHANGED
@@ -3,25 +3,23 @@
3
3
  require 'rubygems'
4
4
  require 'hoe'
5
5
 
6
- $: << "../../RubyInline/dev"
6
+ $: << "../../RubyInline/dev/lib"
7
7
  require './lib/parse_tree.rb'
8
8
 
9
- Hoe.new("ParseTree", ParseTree::VERSION) do |p|
10
- p.rubyforge_name = "parsetree"
11
- p.summary = "Extract and enumerate ruby parse trees."
12
- p.summary = p.paragraphs_of("README.txt", 2).join("\n\n")
13
- p.description = p.paragraphs_of("README.txt", 2..6, 8).join("\n\n")
14
- p.changes = p.paragraphs_of("History.txt", 0..2).join("\n\n")
15
- p.clean_globs << File.expand_path("~/.ruby_inline")
16
- p.extra_deps << ['RubyInline', '>= 3.6.0']
17
- p.spec_extras[:require_paths] = proc { |paths| paths << 'test' }
18
- end
9
+ Hoe.new("ParseTree", ParseTree::VERSION) do |pt|
10
+ pt.rubyforge_name = "parsetree"
11
+
12
+ pt.developer('Ryan Davis', 'ryand-ruby@zenspider.com')
13
+
14
+ pt.clean_globs << File.expand_path("~/.ruby_inline")
15
+ pt.extra_deps << ['RubyInline', '>= 3.6.0']
16
+ pt.spec_extras[:require_paths] = proc { |paths| paths << 'test' }
19
17
 
20
- desc 'Run against ruby 1.9 (from a multiruby install) with -d.'
21
- task :test19 do
22
- sh "~/.multiruby/install/1_9/bin/ruby -d #{Hoe::RUBY_FLAGS} test/test_all.rb #{Hoe::FILTER}"
18
+ pt.multiruby_skip << "1.9" << "rubinius"
23
19
  end
24
20
 
21
+ Hoe::RUBY_FLAGS.sub! /-I/, '-I../../RubyInline/dev/lib:test:'
22
+
25
23
  desc 'Run in gdb'
26
24
  task :debug do
27
25
  puts "RUN: r -d #{Hoe::RUBY_FLAGS} test/test_all.rb #{Hoe::FILTER}"
@@ -32,17 +30,3 @@ desc 'Run a very basic demo'
32
30
  task :demo do
33
31
  sh "echo 1+1 | ruby #{Hoe::RUBY_FLAGS} ./bin/parse_tree_show -f"
34
32
  end
35
-
36
- desc 'Show what tests are not sorted'
37
- task :sort do
38
- begin
39
- sh "pgrep '^ \\\"(\\w+)' test/pt_testcase.rb | cut -f 2 -d\\\" > x"
40
- sh "sort x > y"
41
- sh "diff x y"
42
-
43
- sh 'for f in lib/*.rb; do echo $f; grep "^ *def " $f | grep -v sort=skip > x; sort x > y; echo $f; echo; diff x y; done'
44
- sh 'for f in test/test_*.rb; do echo $f; grep "^ *def.test_" $f > x; sort x > y; echo $f; echo; diff x y; done'
45
- ensure
46
- sh 'rm -f x y'
47
- end
48
- end
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -1,10 +1,11 @@
1
1
  #!/usr/local/bin/ruby -w
2
2
 
3
- abort "*** Sorry, ParseTree doesn't work with ruby #{RUBY_VERSION}" if
3
+ raise LoadError, "ParseTree doesn't work with ruby #{RUBY_VERSION}" if
4
4
  RUBY_VERSION >= "1.9"
5
+ raise LoadError, "ParseTree isn't needed with rubinius" if
6
+ defined? RUBY_ENGINE and RUBY_ENGINE == "rbx"
5
7
 
6
- begin require 'rubygems'; rescue LoadError; end
7
-
8
+ require 'rubygems'
8
9
  require 'inline'
9
10
 
10
11
  class Module
@@ -41,7 +42,7 @@ end
41
42
 
42
43
  class ParseTree
43
44
 
44
- VERSION = '2.1.1'
45
+ VERSION = '2.2.0'
45
46
 
46
47
  ##
47
48
  # Front end translation method.
@@ -144,10 +145,13 @@ class ParseTree
144
145
  #
145
146
  # [:defn, :name, :body]
146
147
 
147
- def parse_tree_for_method(klass, method, is_cls_meth=false)
148
+ def parse_tree_for_method(klass, method, is_cls_meth=false, verbose = true)
148
149
  $stderr.puts "** parse_tree_for_method(#{klass}, #{method}):" if $DEBUG
150
+ old_verbose, $VERBOSE = $VERBOSE, verbose
149
151
  r = parse_tree_for_meth(klass, method.to_sym, is_cls_meth)
150
152
  r
153
+ ensure
154
+ $VERBOSE = old_verbose
151
155
  end
152
156
 
153
157
  ##
@@ -157,8 +161,9 @@ class ParseTree
157
161
  #
158
162
  # [[sexps] ... ]
159
163
 
160
- def parse_tree_for_string(source, filename = '(string)', line = 1)
161
- old_verbose, $VERBOSE = $VERBOSE, true
164
+ def parse_tree_for_string(source,
165
+ filename = '(string)', line = 1, verbose = true)
166
+ old_verbose, $VERBOSE = $VERBOSE, verbose
162
167
  return parse_tree_for_str0(source, filename, line)
163
168
  ensure
164
169
  $VERBOSE = old_verbose
@@ -252,6 +257,11 @@ class ParseTree
252
257
  builder.include '"st.h"'
253
258
  builder.include '"env.h"'
254
259
 
260
+ if RUBY_VERSION < "1.8.6" then
261
+ builder.prefix '#define RARRAY_PTR(s) (RARRAY(s)->ptr)'
262
+ builder.prefix '#define RARRAY_LEN(s) (RARRAY(s)->len)'
263
+ end
264
+
255
265
  if ENV['ANAL'] or ENV['DOMAIN'] =~ /zenspider/ then
256
266
  builder.add_compile_flags "-Wall"
257
267
  builder.add_compile_flags "-W"
@@ -337,6 +347,7 @@ void add_to_parse_tree(VALUE self, VALUE ary, NODE * n, ID * locals) {
337
347
  VALUE current;
338
348
  VALUE node_name;
339
349
  static VALUE node_names = Qnil;
350
+ static int masgn_level = 0;
340
351
 
341
352
  if (NIL_P(node_names)) {
342
353
  node_names = rb_const_get_at(rb_path2class("ParseTree"),rb_intern("NODE_NAMES"));
@@ -371,6 +382,11 @@ again:
371
382
  add_to_parse_tree(self, current, node->nd_head, locals);
372
383
  node = node->nd_next;
373
384
  }
385
+ if (!masgn_level && RARRAY_LEN(current) == 2) {
386
+ rb_ary_pop(ary);
387
+ rb_ary_push(ary, rb_ary_pop(current));
388
+ return;
389
+ }
374
390
  }
375
391
  break;
376
392
 
@@ -472,6 +488,7 @@ again:
472
488
  case NODE_ITER:
473
489
  case NODE_FOR:
474
490
  add_to_parse_tree(self, current, node->nd_iter, locals);
491
+ masgn_level++;
475
492
  if (node->nd_var != (NODE *)1
476
493
  && node->nd_var != (NODE *)2
477
494
  && node->nd_var != NULL) {
@@ -485,6 +502,7 @@ again:
485
502
  rb_ary_push(current, INT2FIX(0));
486
503
  }
487
504
  }
505
+ masgn_level--;
488
506
  add_to_parse_tree(self, current, node->nd_body, locals);
489
507
  break;
490
508
 
@@ -571,10 +589,11 @@ again:
571
589
  if (data->var == 0 || data->var == (NODE *)1 || data->var == (NODE *)2) {
572
590
  rb_ary_push(current, Qnil);
573
591
  } else {
592
+ masgn_level++;
574
593
  add_to_parse_tree(self, current, data->var, locals);
594
+ masgn_level--;
575
595
  }
576
596
  add_to_parse_tree(self, current, data->body, locals);
577
- break;
578
597
  }
579
598
  break;
580
599
 
@@ -645,6 +664,7 @@ again:
645
664
  break;
646
665
 
647
666
  case NODE_MASGN:
667
+ masgn_level++;
648
668
  add_to_parse_tree(self, current, node->nd_head, locals);
649
669
  if (node->nd_args) {
650
670
  if (node->nd_args != (NODE *)-1) {
@@ -654,13 +674,12 @@ again:
654
674
  }
655
675
  }
656
676
  add_to_parse_tree(self, current, node->nd_value, locals);
677
+ masgn_level--;
657
678
  break;
658
679
 
659
680
  case NODE_LASGN:
660
681
  case NODE_IASGN:
661
682
  case NODE_DASGN:
662
- case NODE_DASGN_CURR:
663
- case NODE_CDECL:
664
683
  case NODE_CVASGN:
665
684
  case NODE_CVDECL:
666
685
  case NODE_GASGN:
@@ -668,6 +687,32 @@ again:
668
687
  add_to_parse_tree(self, current, node->nd_value, locals);
669
688
  break;
670
689
 
690
+ case NODE_CDECL:
691
+ if (node->nd_vid) {
692
+ rb_ary_push(current, ID2SYM(node->nd_vid));
693
+ } else {
694
+ add_to_parse_tree(self, current, node->nd_else, locals);
695
+ }
696
+
697
+ add_to_parse_tree(self, current, node->nd_value, locals);
698
+ break;
699
+
700
+ case NODE_DASGN_CURR:
701
+ rb_ary_push(current, ID2SYM(node->nd_vid));
702
+ if (node->nd_value) {
703
+ add_to_parse_tree(self, current, node->nd_value, locals);
704
+ if (!masgn_level && RARRAY_LEN(current) == 2) {
705
+ rb_ary_pop(ary);
706
+ return;
707
+ }
708
+ } else {
709
+ if (!masgn_level) {
710
+ rb_ary_pop(ary);
711
+ return;
712
+ }
713
+ }
714
+ break;
715
+
671
716
  case NODE_VALIAS: /* u1 u2 (alias $global $global2) */
672
717
  #if RUBY_VERSION_CODE < 185
673
718
  rb_ary_push(current, ID2SYM(node->u2.id));
@@ -768,7 +813,12 @@ again:
768
813
 
769
814
  case NODE_CLASS:
770
815
  case NODE_MODULE:
771
- rb_ary_push(current, ID2SYM((ID)node->nd_cpath->nd_mid));
816
+ if (nd_type(node->nd_cpath) == NODE_COLON2 && ! node->nd_cpath->nd_vid) {
817
+ rb_ary_push(current, ID2SYM((ID)node->nd_cpath->nd_mid));
818
+ } else {
819
+ add_to_parse_tree(self, current, node->nd_cpath, locals);
820
+ }
821
+
772
822
  if (nd_type(node) == NODE_CLASS) {
773
823
  if (node->nd_super) {
774
824
  add_to_parse_tree(self, current, node->nd_super, locals);
@@ -794,6 +844,7 @@ again:
794
844
  }
795
845
 
796
846
  /* look for optional arguments */
847
+ masgn_level++;
797
848
  optnode = node->nd_opt;
798
849
  while (optnode) {
799
850
  rb_ary_push(current, ID2SYM(locals[i + 3]));
@@ -840,6 +891,7 @@ again:
840
891
  if (optnode) {
841
892
  add_to_parse_tree(self, current, node->nd_opt, locals);
842
893
  }
894
+ masgn_level--;
843
895
  } break;
844
896
 
845
897
  case NODE_LVAR:
@@ -27,8 +27,8 @@ class Sexp < Array # ZenTest FULL
27
27
  def self.for(klass, method = nil, walk_ancestors = false)
28
28
  require 'parse_tree'
29
29
  sexp = if walk_ancestors and method then
30
- klass.ancestors.each do |klass|
31
- sexp = ParseTree.translate klass, method
30
+ klass.ancestors.each do |kls|
31
+ sexp = ParseTree.translate kls, method
32
32
  break sexp unless sexp == [nil]
33
33
  end
34
34
  else
@@ -101,6 +101,10 @@ class Sexp < Array # ZenTest FULL
101
101
  @@array_types.include? type
102
102
  end
103
103
 
104
+ def compact # :nodoc:
105
+ self.delete_if { |o| o.nil? }
106
+ end
107
+
104
108
  ##
105
109
  # Enumeratates the sexp yielding to +b+ when the node_type == +t+.
106
110
 
@@ -194,7 +194,7 @@ class SexpProcessor
194
194
  return nil if exp.nil?
195
195
 
196
196
  unless @unsupported_checked then
197
- m = public_methods.grep(/^process_/) { |o| o.sub(/^process_/, '').intern }
197
+ m = public_methods.grep(/^process_/) { |o| o.to_s.sub(/^process_/, '').intern }
198
198
  supported = m - (m - @unsupported)
199
199
 
200
200
  raise UnsupportedNodeError, "#{supported.inspect} shouldn't be in @unsupported" unless supported.empty?
@@ -2,12 +2,6 @@
2
2
  $TESTING ||= false
3
3
 
4
4
  module UnifiedRuby
5
- def rewrite_argscat(exp)
6
- raise "unknown type #{exp.inspect}" unless exp[1][0] == :array
7
- exp[1][0] = :arglist
8
- exp
9
- end
10
-
11
5
  def rewrite_bmethod(exp)
12
6
  exp[0] = :scope
13
7
 
@@ -45,7 +39,7 @@ module UnifiedRuby
45
39
  when :argscat, :splat then
46
40
  # do nothing
47
41
  else
48
- raise "unknown type in call #{args.first.inspect}"
42
+ raise "unknown type in call #{args.first.inspect} in #{exp.inspect}"
49
43
  end
50
44
  return exp
51
45
  end
@@ -85,12 +79,13 @@ module UnifiedRuby
85
79
  #
86
80
  # s(:defn, :reader, s(:args), s(:ivar, :@name))
87
81
  #
88
- #
89
82
 
90
83
  def rewrite_defn(exp)
91
84
  weirdo = exp.ivar || exp.attrset
92
85
 
93
- # move args up
86
+ fbody = exp.fbody(true)
87
+ exp.push(fbody.scope) if fbody
88
+
94
89
  args = exp.scope.block.args(true) unless weirdo
95
90
  exp.insert 2, args if args
96
91
 
@@ -124,10 +119,6 @@ module UnifiedRuby
124
119
  exp.shift # scope / block / body
125
120
  end
126
121
 
127
- def rewrite_fbody(exp)
128
- return *exp.sexp_body
129
- end
130
-
131
122
  def rewrite_fcall(exp)
132
123
  exp[0] = :call
133
124
  exp.insert 1, nil
@@ -135,6 +135,15 @@ class ParseTreeTestCase < Test::Unit::TestCase
135
135
  "ParseTree" => [:attrasgn, [:vcall, :a], :[]=, [:array, [:lit, 42], [:lit, 24]]],
136
136
  },
137
137
 
138
+ "attrasgn_index_equals_space" => {
139
+ "Ruby" => "a = []; a [42] = 24",
140
+ "ParseTree" => [:block,
141
+ [:lasgn, :a, [:zarray]],
142
+ [:attrasgn, [:lvar, :a], :[]=,
143
+ [:array, [:lit, 42], [:lit, 24]]]],
144
+ "Ruby2Ruby" => "a = []\na[42] = 24\n",
145
+ },
146
+
138
147
  "attrset" => {
139
148
  "Ruby" => [Examples, :writer=],
140
149
  "ParseTree" => [:defn, :writer=, [:attrset, :@writer]],
@@ -145,8 +154,8 @@ class ParseTreeTestCase < Test::Unit::TestCase
145
154
  "Ruby" => "[$&, $`, $', $+]",
146
155
  "ParseTree" => [:array,
147
156
  [:back_ref, :&],
148
- [:back_ref, "`".intern], # symbol was fucking up emacs
149
- [:back_ref, "'".intern], # s->e
157
+ [:back_ref, :"`"],
158
+ [:back_ref, :"'"],
150
159
  [:back_ref, :+]],
151
160
  },
152
161
 
@@ -191,22 +200,20 @@ class ParseTreeTestCase < Test::Unit::TestCase
191
200
  },
192
201
 
193
202
  "block_mystery_block" => { # FIX: I don't like that extra return
194
- "Ruby" => "a(b) do\n if b then\n true\n else\n c = false\n d { |x| c = true }\n c\n \n end\nend",
203
+ "Ruby" => "a(b) do\n if b then\n true\n else\n c = false\n d { |x| c = true }\n c\n end\nend",
195
204
  "ParseTree" => [:iter,
196
205
  [:fcall, :a, [:array, [:vcall, :b]]],
197
206
  nil,
198
- [:block,
199
- [:dasgn_curr, :c],
200
- [:if,
201
- [:vcall, :b],
202
- [:true],
203
- [:block,
204
- [:dasgn_curr, :c, [:false]],
205
- [:iter,
206
- [:fcall, :d],
207
- [:dasgn_curr, :x],
208
- [:dasgn, :c, [:true]]],
209
- [:dvar, :c]]]]],
207
+ [:if,
208
+ [:vcall, :b],
209
+ [:true],
210
+ [:block,
211
+ [:dasgn_curr, :c, [:false]],
212
+ [:iter,
213
+ [:fcall, :d],
214
+ [:dasgn_curr, :x],
215
+ [:dasgn, :c, [:true]]],
216
+ [:dvar, :c]]]],
210
217
  },
211
218
 
212
219
  "block_pass_args_and_splat" => {
@@ -214,7 +221,7 @@ class ParseTreeTestCase < Test::Unit::TestCase
214
221
  "ParseTree" => [:defn, :blah,
215
222
  [:scope,
216
223
  [:block,
217
- [:args, "*args".intern],
224
+ [:args, :"*args"],
218
225
  [:block_arg, :block],
219
226
  [:block_pass,
220
227
  [:lvar, :block],
@@ -278,7 +285,7 @@ class ParseTreeTestCase < Test::Unit::TestCase
278
285
  "ParseTree" => [:defn, :blah,
279
286
  [:scope,
280
287
  [:block,
281
- [:args, "*args".intern],
288
+ [:args, :"*args"],
282
289
  [:block_arg, :block],
283
290
  [:block_pass,
284
291
  [:lvar, :block],
@@ -295,8 +302,7 @@ class ParseTreeTestCase < Test::Unit::TestCase
295
302
 
296
303
  "block_stmt_after" => {
297
304
  "Ruby" => "def f\n begin\n b\n rescue\n c\n end\n\n d\nend",
298
- "ParseTree" => [:defn,
299
- :f,
305
+ "ParseTree" => [:defn, :f,
300
306
  [:scope,
301
307
  [:block,
302
308
  [:args],
@@ -307,8 +313,7 @@ class ParseTreeTestCase < Test::Unit::TestCase
307
313
 
308
314
  "block_stmt_before" => {
309
315
  "Ruby" => "def f\n a\n begin\n b\n rescue\n c\n end\nend",
310
- "ParseTree" => [:defn,
311
- :f,
316
+ "ParseTree" => [:defn, :f,
312
317
  [:scope,
313
318
  [:block,
314
319
  [:args],
@@ -320,8 +325,7 @@ class ParseTreeTestCase < Test::Unit::TestCase
320
325
 
321
326
  "block_stmt_both" => {
322
327
  "Ruby" => "def f\n a\n begin\n b\n rescue\n c\n end\n d\nend",
323
- "ParseTree" => [:defn,
324
- :f,
328
+ "ParseTree" => [:defn, :f,
325
329
  [:scope,
326
330
  [:block,
327
331
  [:args],
@@ -333,8 +337,7 @@ class ParseTreeTestCase < Test::Unit::TestCase
333
337
 
334
338
  "bmethod" => {
335
339
  "Ruby" => [Examples, :unsplatted],
336
- "ParseTree" => [:defn,
337
- :unsplatted,
340
+ "ParseTree" => [:defn, :unsplatted,
338
341
  [:bmethod,
339
342
  [:dasgn_curr, :x],
340
343
  [:call, [:dvar, :x], :+, [:array, [:lit, 1]]]]],
@@ -343,11 +346,10 @@ class ParseTreeTestCase < Test::Unit::TestCase
343
346
 
344
347
  "bmethod_noargs" => {
345
348
  "Ruby" => [Examples, :bmethod_noargs],
346
- "ParseTree" => [:defn,
347
- :bmethod_noargs,
349
+ "ParseTree" => [:defn, :bmethod_noargs,
348
350
  [:bmethod,
349
351
  nil,
350
- [:call, [:vcall, :x], "+".intern, [:array, [:lit, 1]]]]],
352
+ [:call, [:vcall, :x], :"+", [:array, [:lit, 1]]]]],
351
353
  "Ruby2Ruby" => "def bmethod_noargs\n (x + 1)\nend"
352
354
  },
353
355
 
@@ -426,9 +428,11 @@ class ParseTreeTestCase < Test::Unit::TestCase
426
428
  :zero?],
427
429
  },
428
430
 
429
- "call_index" => { # see attrasgn_index_equals for opposite
430
- "Ruby" => "a[42]",
431
- "ParseTree" => [:call, [:vcall, :a], :[], [:array, [:lit, 42]]],
431
+ "call_index" => { # see attrasgn_index_equals and fcall_index_space
432
+ "Ruby" => "b = []\na[42]\n",
433
+ "ParseTree" => [:block,
434
+ [:lasgn, :b, [:zarray]],
435
+ [:call, [:vcall, :a], :[], [:array, [:lit, 42]]]],
432
436
  },
433
437
 
434
438
  "call_index_no_args" => {
@@ -436,6 +440,14 @@ class ParseTreeTestCase < Test::Unit::TestCase
436
440
  "ParseTree" => [:call, [:vcall, :a], :[]],
437
441
  },
438
442
 
443
+ "call_index_space" => {
444
+ "Ruby" => "a = []\na [42]\n",
445
+ "ParseTree" => [:block,
446
+ [:lasgn, :a, [:zarray]],
447
+ [:call, [:lvar, :a], :[], [:array, [:lit, 42]]]],
448
+ "Ruby2Ruby" => "a = []\na[42]\n",
449
+ },
450
+
439
451
  "call_unary_neg" => {
440
452
  "Ruby" => "-2**31",
441
453
  "ParseTree" => [:call,
@@ -544,14 +556,24 @@ class ParseTreeTestCase < Test::Unit::TestCase
544
556
  [:scope,
545
557
  [:block,
546
558
  [:fcall, :puts, [:array, [:call, [:lit, 1], :+, [:array, [:lit, 1]]]]],
547
- [:defn,
548
- :blah,
559
+ [:defn, :blah,
549
560
  [:scope,
550
561
  [:block,
551
562
  [:args],
552
563
  [:fcall, :puts, [:array, [:str, "hello"]]]]]]]]],
553
564
  },
554
565
 
566
+ "class_scoped" => {
567
+ "Ruby" => "class X::Y\n c\nend",
568
+ "ParseTree" => [:class, [:colon2, [:const, :X], :Y], nil,
569
+ [:scope, [:vcall, :c]]],
570
+ },
571
+
572
+ "class_scoped3" => {
573
+ "Ruby" => "class ::Y\n c\nend",
574
+ "ParseTree" => [:class, [:colon3, :Y], nil, [:scope, [:vcall, :c]]],
575
+ },
576
+
555
577
  "class_super_array" => {
556
578
  "Ruby" => "class X < Array\nend",
557
579
  "ParseTree" => [:class,
@@ -677,6 +699,21 @@ class ParseTreeTestCase < Test::Unit::TestCase
677
699
  "ParseTree" => [:const, :X],
678
700
  },
679
701
 
702
+ "constX" => {
703
+ "Ruby" => "X = 1",
704
+ "ParseTree" => [:cdecl, :X, [:lit, 1]],
705
+ },
706
+
707
+ "constY" => {
708
+ "Ruby" => "::X = 1",
709
+ "ParseTree" => [:cdecl, [:colon3, :X], [:lit, 1]],
710
+ },
711
+
712
+ "constZ" => {
713
+ "Ruby" => "X::Y = 1",
714
+ "ParseTree" => [:cdecl, [:colon2, [:const, :X], :Y], [:lit, 1]],
715
+ },
716
+
680
717
  "cvar" => {
681
718
  "Ruby" => "@@x",
682
719
  "ParseTree" => [:cvar, :@@x],
@@ -729,21 +766,30 @@ class ParseTreeTestCase < Test::Unit::TestCase
729
766
  },
730
767
 
731
768
  "dasgn_2" => { # WITH mystery block / dasgn_curr
732
- "Ruby" => "a.each do |x|\n if true then\n c = 0\n b.each { |y| c = (c + 1) }\n \n end\nend", # FIX: hate that extra newline!
769
+ "Ruby" => "a.each do |x|\n if true then\n c = 0\n b.each { |y| c = (c + 1) }\n end\nend", # FIX: hate that extra newline!
733
770
  "ParseTree" => [:iter,
734
771
  [:call, [:vcall, :a], :each],
735
772
  [:dasgn_curr, :x],
773
+ [:if, [:true],
774
+ [:block,
775
+ [:dasgn_curr, :c, [:lit, 0]],
776
+ [:iter,
777
+ [:call, [:vcall, :b], :each],
778
+ [:dasgn_curr, :y],
779
+ [:dasgn, :c,
780
+ [:call, [:dvar, :c], :+, [:array, [:lit, 1]]]]]],
781
+ nil]],
782
+ },
783
+
784
+ "dasgn_curr" => {
785
+ "Ruby" => "data.each do |x, y|\n a = 1\n b = a\n b = a = x\nend",
786
+ "ParseTree" => [:iter,
787
+ [:call, [:vcall, :data], :each],
788
+ [:masgn, [:array, [:dasgn_curr, :x], [:dasgn_curr, :y]]],
736
789
  [:block,
737
- [:dasgn_curr, :c],
738
- [:if, [:true],
739
- [:block,
740
- [:dasgn_curr, :c, [:lit, 0]],
741
- [:iter,
742
- [:call, [:vcall, :b], :each],
743
- [:dasgn_curr, :y],
744
- [:dasgn, :c,
745
- [:call, [:dvar, :c], :+, [:array, [:lit, 1]]]]]],
746
- nil]]],
790
+ [:dasgn_curr, :a, [:lit, 1]],
791
+ [:dasgn_curr, :b, [:dvar, :a]],
792
+ [:dasgn_curr, :b, [:dasgn_curr, :a, [:dvar, :x]]]]],
747
793
  },
748
794
 
749
795
  "dasgn_icky" => { # WITH mystery block / dasgn_curr
@@ -752,7 +798,6 @@ class ParseTreeTestCase < Test::Unit::TestCase
752
798
  [:fcall, :a],
753
799
  nil,
754
800
  [:block,
755
- [:dasgn_curr, :v],
756
801
  [:dasgn_curr, :v, [:nil]],
757
802
  [:iter,
758
803
  [:fcall, :assert_block,
@@ -766,17 +811,6 @@ class ParseTreeTestCase < Test::Unit::TestCase
766
811
  [:block, [:dasgn, :v, [:gvar, :$!]], [:break]]]]]]]],
767
812
  },
768
813
 
769
- "dasgn_curr" => {
770
- "Ruby" => "data.each do |x, y|\n a = 1\n b = a\n b = a = x\nend",
771
- "ParseTree" => [:iter,
772
- [:call, [:vcall, :data], :each],
773
- [:masgn, [:array, [:dasgn_curr, :x], [:dasgn_curr, :y]]],
774
- [:block,
775
- [:dasgn_curr, :a, [:lit, 1]],
776
- [:dasgn_curr, :b, [:dvar, :a]],
777
- [:dasgn_curr, :b, [:dasgn_curr, :a, [:dvar, :x]]]]],
778
- },
779
-
780
814
  "dasgn_mixed" => {
781
815
  "Ruby" => "t = 0\nns.each { |n| t += n }\n",
782
816
  "ParseTree" => [:block,
@@ -822,7 +856,7 @@ class ParseTreeTestCase < Test::Unit::TestCase
822
856
  "ParseTree" => [:defn, :x,
823
857
  [:scope,
824
858
  [:block,
825
- [:args, :a, :b, "*c".intern, # s->e
859
+ [:args, :a, :b, :"*c",
826
860
  [:block, [:lasgn, :b, [:lit, 42]]]],
827
861
  [:block_arg, :d],
828
862
  [:fcall, :p,
@@ -900,7 +934,7 @@ class ParseTreeTestCase < Test::Unit::TestCase
900
934
  "ParseTree" => [:defn, :x,
901
935
  [:scope,
902
936
  [:block,
903
- [:args, :a, "*args".intern],
937
+ [:args, :a, :"*args"],
904
938
  [:fcall, :p,
905
939
  [:array, [:lvar, :a], [:lvar, :args]]]]]],
906
940
  },
@@ -935,7 +969,7 @@ class ParseTreeTestCase < Test::Unit::TestCase
935
969
  "ParseTree" => [:defn, :x,
936
970
  [:scope,
937
971
  [:block,
938
- [:args, :a, "*".intern],
972
+ [:args, :a, :"*"],
939
973
  [:fcall, :p,
940
974
  [:array, [:lvar, :a]]]]]],
941
975
  },
@@ -982,8 +1016,7 @@ class ParseTreeTestCase < Test::Unit::TestCase
982
1016
 
983
1017
  "dmethod" => {
984
1018
  "Ruby" => [Examples, :dmethod_added],
985
- "ParseTree" => [:defn,
986
- :dmethod_added,
1019
+ "ParseTree" => [:defn, :dmethod_added,
987
1020
  [:dmethod,
988
1021
  :a_method,
989
1022
  [:scope,
@@ -1016,7 +1049,7 @@ class ParseTreeTestCase < Test::Unit::TestCase
1016
1049
 
1017
1050
  "dregx_n" => {
1018
1051
  "Ruby" => '/#{1}/n',
1019
- "ParseTree" => [:dregx, '', [:evstr, [:lit, 1]], 16], # TODO: use consts
1052
+ "ParseTree" => [:dregx, '', [:evstr, [:lit, 1]], /x/n.options],
1020
1053
  "Ruby2Ruby" => "/#\{1}/", # HACK - need to support regexp flags
1021
1054
  },
1022
1055
 
@@ -1028,7 +1061,7 @@ class ParseTreeTestCase < Test::Unit::TestCase
1028
1061
 
1029
1062
  "dregx_once_n_interp" => {
1030
1063
  "Ruby" => "/#\{IAC}#\{SB}/no",
1031
- "ParseTree" => [:dregx_once, '', [:evstr, [:const, :IAC]], [:evstr, [:const, :SB]], 16],
1064
+ "ParseTree" => [:dregx_once, '', [:evstr, [:const, :IAC]], [:evstr, [:const, :SB]], /x/n.options],
1032
1065
  "Ruby2Ruby" => "/#\{IAC}#\{SB}/o", # HACK
1033
1066
  },
1034
1067
 
@@ -1076,6 +1109,23 @@ class ParseTreeTestCase < Test::Unit::TestCase
1076
1109
  "Ruby2Ruby" => '"#{22}aacd#{44}55#{66}"',
1077
1110
  },
1078
1111
 
1112
+ "dstr_heredoc_expand" => {
1113
+ "Ruby" => "<<EOM\n blah\n#\{1 + 1}blah\nEOM\n",
1114
+ "ParseTree" => [:dstr, " blah\n",
1115
+ [:evstr, [:call, [:lit, 1], :+, [:array, [:lit, 1]]]],
1116
+ [:str, "blah\n"]],
1117
+ "Ruby2Ruby" => "\" blah\\n#\{(1 + 1)}blah\\n\"",
1118
+ },
1119
+
1120
+ "dstr_heredoc_windoze_sucks" => {
1121
+ "Ruby" => "<<-EOF\r\ndef test_#\{action}_valid_feed\r\n EOF\r\n",
1122
+ "ParseTree" => [:dstr,
1123
+ 'def test_',
1124
+ [:evstr, [:vcall, :action]],
1125
+ [:str, "_valid_feed\n"]],
1126
+ "Ruby2Ruby" => "\"def test_#\{action}_valid_feed\\n\"",
1127
+ },
1128
+
1079
1129
  "dstr_heredoc_yet_again" => {
1080
1130
  "Ruby" => "<<-EOF\ns1 '#\{RUBY_PLATFORM}' s2\n#\{__FILE__}\n EOF\n",
1081
1131
  "ParseTree" => [:dstr, "s1 '",
@@ -1204,6 +1254,12 @@ end",
1204
1254
  [:lit, :c]],
1205
1255
  },
1206
1256
 
1257
+ "fcall_index_space" => {
1258
+ "Ruby" => "a [42]",
1259
+ "ParseTree" => [:fcall, :a, [:array, [:array, [:lit, 42]]]],
1260
+ "Ruby2Ruby" => "a([42])",
1261
+ },
1262
+
1207
1263
  "fcall_keyword" => {
1208
1264
  "Ruby" => "42 if block_given?",
1209
1265
  "ParseTree" => [:if, [:fcall, :block_given?], [:lit, 42], nil],
@@ -1374,13 +1430,13 @@ end",
1374
1430
  "ParseTree" => [:block,
1375
1431
  [:lasgn, :argl, [:lit, 10]],
1376
1432
  [:while,
1377
- [:call, [:lvar, :argl], ">=".intern, [:array, [:lit, 1]]],
1433
+ [:call, [:lvar, :argl], :">=", [:array, [:lit, 1]]],
1378
1434
  [:block,
1379
1435
  [:fcall, :puts, [:array, [:str, "hello"]]],
1380
1436
  [:lasgn,
1381
1437
  :argl,
1382
1438
  [:call, [:lvar, :argl],
1383
- "-".intern, [:array, [:lit, 1]]]]], true]],
1439
+ :"-", [:array, [:lit, 1]]]]], true]],
1384
1440
  },
1385
1441
 
1386
1442
  "iteration6" => {
@@ -1540,10 +1596,11 @@ end",
1540
1596
  "Ruby" => 'str.split(//i)',
1541
1597
  "ParseTree" => [:call, [:vcall, :str], :split, [:array, [:lit, //i]]],
1542
1598
  },
1543
-
1599
+
1544
1600
  "lit_regexp_n" => {
1545
1601
  "Ruby" => "/x/n",
1546
1602
  "ParseTree" => [:lit, /x/n],
1603
+ "Ruby2Ruby" => /x/n.inspect, # HACK differs on 1.9 - this is easiest
1547
1604
  },
1548
1605
 
1549
1606
  "lit_regexp_once" => {
@@ -1566,8 +1623,7 @@ end",
1566
1623
  "Ruby" => "b = 42\ndef a\n c do\n begin\n rescue RuntimeError => b\n puts(b)\n end\n end\nend\n",
1567
1624
  "ParseTree" => [:block,
1568
1625
  [:lasgn, :b, [:lit, 42]],
1569
- [:defn,
1570
- :a,
1626
+ [:defn, :a,
1571
1627
  [:scope,
1572
1628
  [:block,
1573
1629
  [:args],
@@ -1610,7 +1666,7 @@ end",
1610
1666
  "masgn_iasgn" => {
1611
1667
  "Ruby" => "a, @b = c, d",
1612
1668
  "ParseTree" => [:masgn,
1613
- [:array, [:lasgn, :a], [:iasgn, "@b".intern]],
1669
+ [:array, [:lasgn, :a], [:iasgn, :"@b"]],
1614
1670
  [:array, [:vcall, :c], [:vcall, :d]]],
1615
1671
  },
1616
1672
 
@@ -1697,6 +1753,17 @@ end",
1697
1753
  [:defn, :y, [:scope, [:block, [:args], [:nil]]]]]],
1698
1754
  },
1699
1755
 
1756
+ "module_scoped" => {
1757
+ "Ruby" => "module X::Y\n c\nend",
1758
+ "ParseTree" => [:module, [:colon2, [:const, :X], :Y],
1759
+ [:scope, [:vcall, :c]]],
1760
+ },
1761
+
1762
+ "module_scoped3" => {
1763
+ "Ruby" => "module ::Y\n c\nend",
1764
+ "ParseTree" => [:module, [:colon3, :Y], [:scope, [:vcall, :c]]],
1765
+ },
1766
+
1700
1767
  "next" => {
1701
1768
  "Ruby" => "loop { next if false }",
1702
1769
  "ParseTree" => [:iter,
@@ -1728,13 +1795,25 @@ end",
1728
1795
  "ParseTree" => [:block,
1729
1796
  [:lasgn, :b, [:zarray]],
1730
1797
  [:op_asgn1, [:lvar, :b],
1731
- [:array, [:lit, 1]], "||".intern, [:lit, 10]], # s->e
1798
+ [:array, [:lit, 1]], :"||", [:lit, 10]],
1732
1799
  [:op_asgn1, [:lvar, :b],
1733
- [:array, [:lit, 2]], "&&".intern, [:lit, 11]], # s->e
1800
+ [:array, [:lit, 2]], :"&&", [:lit, 11]],
1734
1801
  [:op_asgn1, [:lvar, :b],
1735
1802
  [:array, [:lit, 3]], :+, [:lit, 12]]],
1736
1803
  },
1737
1804
 
1805
+ "op_asgn1" => {
1806
+ "Ruby" => "@b = []\n@b[1] ||= 10\n@b[2] &&= 11\n@b[3] += 12\n",
1807
+ "ParseTree" => [:block,
1808
+ [:iasgn, :@b, [:zarray]],
1809
+ [:op_asgn1, [:ivar, :@b],
1810
+ [:array, [:lit, 1]], :"||", [:lit, 10]],
1811
+ [:op_asgn1, [:ivar, :@b],
1812
+ [:array, [:lit, 2]], :"&&", [:lit, 11]],
1813
+ [:op_asgn1, [:ivar, :@b],
1814
+ [:array, [:lit, 3]], :+, [:lit, 12]]],
1815
+ },
1816
+
1738
1817
  "op_asgn2" => {
1739
1818
  "Ruby" => "s = Struct.new(:var)\nc = s.new(nil)\nc.var ||= 20\nc.var &&= 21\nc.var += 22\nc.d.e.f ||= 42\n",
1740
1819
  "ParseTree" => [:block,
@@ -1744,15 +1823,15 @@ end",
1744
1823
  [:lasgn, :c,
1745
1824
  [:call, [:lvar, :s], :new, [:array, [:nil]]]],
1746
1825
 
1747
- [:op_asgn2, [:lvar, :c], :var=, "||".intern, # s->e
1826
+ [:op_asgn2, [:lvar, :c], :var=, :"||",
1748
1827
  [:lit, 20]],
1749
- [:op_asgn2, [:lvar, :c], :var=, "&&".intern, # s->e
1828
+ [:op_asgn2, [:lvar, :c], :var=, :"&&",
1750
1829
  [:lit, 21]],
1751
1830
  [:op_asgn2, [:lvar, :c], :var=, :+, [:lit, 22]],
1752
1831
 
1753
1832
  [:op_asgn2,
1754
1833
  [:call,
1755
- [:call, [:lvar, :c], :d], :e], :f=, "||".intern,
1834
+ [:call, [:lvar, :c], :d], :e], :f=, :"||",
1756
1835
  [:lit, 42]]],
1757
1836
  },
1758
1837
 
@@ -1841,12 +1920,33 @@ end",
1841
1920
  "Ruby2Ruby" => "((a or b) or (c and d))",
1842
1921
  },
1843
1922
 
1923
+ "parse_floats_as_args" => {
1924
+ "Ruby" => "def x(a=0.0,b=0.0)\n a+b\nend",
1925
+ "ParseTree" => [:defn, :x,
1926
+ [:scope,
1927
+ [:block,
1928
+ [:args, :a, :b,
1929
+ [:block,
1930
+ [:lasgn, :a, [:lit, 0.0]],
1931
+ [:lasgn, :b, [:lit, 0.0]]]],
1932
+ [:call, [:lvar, :a], :+, [:array, [:lvar, :b]]]]]],
1933
+ "Ruby2Ruby" => "def x(a = 0.0, b = 0.0)\n (a + b)\nend",
1934
+ },
1935
+
1844
1936
  "postexe" => {
1845
1937
  "Ruby" => "END { 1 }",
1846
1938
  "ParseTree" => [:iter, [:postexe], nil, [:lit, 1]],
1847
1939
  },
1848
1940
 
1849
- "proc_args" => {
1941
+ "proc_args_0" => {
1942
+ "Ruby" => "proc { || (x + 1) }",
1943
+ "ParseTree" => [:iter,
1944
+ [:fcall, :proc],
1945
+ 0,
1946
+ [:call, [:vcall, :x], :+, [:array, [:lit, 1]]]],
1947
+ },
1948
+
1949
+ "proc_args_1" => {
1850
1950
  "Ruby" => "proc { |x| (x + 1) }",
1851
1951
  "ParseTree" => [:iter,
1852
1952
  [:fcall, :proc],
@@ -1854,19 +1954,19 @@ end",
1854
1954
  [:call, [:dvar, :x], :+, [:array, [:lit, 1]]]],
1855
1955
  },
1856
1956
 
1857
- "proc_no_args" => {
1858
- "Ruby" => "proc { (x + 1) }",
1957
+ "proc_args_2" => {
1958
+ "Ruby" => "proc { |x, y| (x + y) }",
1859
1959
  "ParseTree" => [:iter,
1860
1960
  [:fcall, :proc],
1861
- nil,
1862
- [:call, [:vcall, :x], :+, [:array, [:lit, 1]]]],
1961
+ [:masgn, [:array, [:dasgn_curr, :x], [:dasgn_curr, :y]]],
1962
+ [:call, [:dvar, :x], :+, [:array, [:dvar, :y]]]],
1863
1963
  },
1864
1964
 
1865
- "proc_zero_args" => {
1866
- "Ruby" => "proc { || (x + 1) }",
1965
+ "proc_args_no" => {
1966
+ "Ruby" => "proc { (x + 1) }",
1867
1967
  "ParseTree" => [:iter,
1868
1968
  [:fcall, :proc],
1869
- 0,
1969
+ nil,
1870
1970
  [:call, [:vcall, :x], :+, [:array, [:lit, 1]]]],
1871
1971
  },
1872
1972
 
@@ -1971,19 +2071,19 @@ end",
1971
2071
  },
1972
2072
 
1973
2073
  "str_heredoc" => {
1974
- "Ruby" => "<<'EOM'\n blah\nblah\nEOM\n",
2074
+ "Ruby" => "<<'EOM'\n blah\nblah\nEOM",
1975
2075
  "ParseTree" => [:str, " blah\nblah\n"],
1976
2076
  "Ruby2Ruby" => "\" blah\\nblah\\n\"",
1977
2077
  },
1978
2078
 
1979
2079
  "str_heredoc_call" => {
1980
- "Ruby" => "<<'EOM'.strip\n blah\nblah\nEOM\n",
2080
+ "Ruby" => "<<'EOM'.strip\n blah\nblah\nEOM",
1981
2081
  "ParseTree" => [:call, [:str, " blah\nblah\n"], :strip],
1982
2082
  "Ruby2Ruby" => "\" blah\\nblah\\n\".strip",
1983
2083
  },
1984
2084
 
1985
2085
  "str_heredoc_double" => {
1986
- "Ruby" => "a += <<-BEGIN + b + <<-END\n first\nBEGIN\n second\nEND",
2086
+ "Ruby" => "a += <<-H1 + b + <<-H2\n first\nH1\n second\nH2",
1987
2087
  "ParseTree" => [:lasgn, :a,
1988
2088
  [:call,
1989
2089
  [:lvar, :a],
@@ -1997,29 +2097,12 @@ end",
1997
2097
  "Ruby2Ruby" => "a = (a + ((\" first\\n\" + b) + \" second\\n\"))",
1998
2098
  },
1999
2099
 
2000
- "dstr_heredoc_expand" => {
2001
- "Ruby" => "<<EOM\n blah\n#\{1 + 1}blah\nEOM\n",
2002
- "ParseTree" => [:dstr, " blah\n",
2003
- [:evstr, [:call, [:lit, 1], :+, [:array, [:lit, 1]]]],
2004
- [:str, "blah\n"]],
2005
- "Ruby2Ruby" => "\" blah\\n#\{(1 + 1)}blah\\n\"",
2006
- },
2007
-
2008
2100
  "str_heredoc_indent" => {
2009
- "Ruby" => "<<-EOM\n blah\nblah\n\n EOM\n",
2101
+ "Ruby" => "<<-EOM\n blah\nblah\n\n EOM",
2010
2102
  "ParseTree" => [:str, " blah\nblah\n\n"],
2011
2103
  "Ruby2Ruby" => "\" blah\\nblah\\n\\n\"",
2012
2104
  },
2013
2105
 
2014
- "dstr_heredoc_windoze_sucks" => {
2015
- "Ruby" => "<<-EOF\r\ndef test_#\{action}_valid_feed\r\n EOF\r\n",
2016
- "ParseTree" => [:dstr,
2017
- 'def test_',
2018
- [:evstr, [:vcall, :action]],
2019
- [:str, "_valid_feed\n"]],
2020
- "Ruby2Ruby" => "\"def test_#\{action}_valid_feed\\n\"",
2021
- },
2022
-
2023
2106
  "str_interp_file" => {
2024
2107
  "Ruby" => '"file = #{__FILE__}
2025
2108
  "',
@@ -2028,21 +2111,19 @@ end",
2028
2111
  },
2029
2112
 
2030
2113
  "structure_extra_block_for_dvar_scoping" => {
2031
- "Ruby" => "a.b do |c, d|\n unless e.f(c) then\n g = false\n d.h { |x, i| g = true }\n \n end\nend", # FIX: don't like the extra return
2114
+ "Ruby" => "a.b do |c, d|\n unless e.f(c) then\n g = false\n d.h { |x, i| g = true }\n end\nend", # FIX: don't like the extra return
2032
2115
  "ParseTree" => [:iter,
2033
2116
  [:call, [:vcall, :a], :b],
2034
2117
  [:masgn, [:array, [:dasgn_curr, :c], [:dasgn_curr, :d]]],
2035
- [:block,
2036
- [:dasgn_curr, :g],
2037
- [:if,
2038
- [:call, [:vcall, :e], :f, [:array, [:dvar, :c]]],
2039
- nil,
2040
- [:block,
2041
- [:dasgn_curr, :g, [:false]],
2042
- [:iter,
2043
- [:call, [:dvar, :d], :h],
2044
- [:masgn, [:array, [:dasgn_curr, :x], [:dasgn_curr, :i]]],
2045
- [:dasgn, :g, [:true]]]]]]],
2118
+ [:if,
2119
+ [:call, [:vcall, :e], :f, [:array, [:dvar, :c]]],
2120
+ nil,
2121
+ [:block,
2122
+ [:dasgn_curr, :g, [:false]],
2123
+ [:iter,
2124
+ [:call, [:dvar, :d], :h],
2125
+ [:masgn, [:array, [:dasgn_curr, :x], [:dasgn_curr, :i]]],
2126
+ [:dasgn, :g, [:true]]]]]],
2046
2127
  },
2047
2128
 
2048
2129
  "structure_remove_begin_1" => {
@@ -2331,6 +2412,8 @@ end",
2331
2412
  end
2332
2413
 
2333
2414
  def self.inherited(c)
2415
+ super
2416
+
2334
2417
  output_name = c.name.to_s.sub(/^Test/, '')
2335
2418
  raise "Unknown class #{c} in @@testcase_order" unless
2336
2419
  @@testcase_order.include? output_name
@@ -2341,13 +2424,14 @@ end",
2341
2424
  next if [:skip, :unsupported].include? data[input_name]
2342
2425
  next if data[output_name] == :skip
2343
2426
 
2344
- c.send(:define_method, "test_#{node}".intern) do
2427
+ c.send(:define_method, :"test_#{node}") do
2345
2428
  flunk "Processor is nil" if processor.nil?
2346
2429
  assert data.has_key?(input_name), "Unknown input data"
2347
2430
  unless data.has_key?(output_name) then
2348
2431
  $stderr.puts "add_test(#{node.inspect}, :same)"
2349
2432
  end
2350
- assert data.has_key?(output_name), "Missing test data: #{self.class} #{node}"
2433
+ assert(data.has_key?(output_name),
2434
+ "Missing test data: #{self.class} #{node}")
2351
2435
  input = data[input_name].deep_clone
2352
2436
 
2353
2437
  expected = if data[output_name] == :same then
@@ -2365,14 +2449,17 @@ end",
2365
2449
  extra_expected = []
2366
2450
  extra_input = []
2367
2451
 
2368
- _, expected, extra_expected = *expected if Array === expected and expected.first == :defx
2369
- _, input, extra_input = *input if Array === input and input.first == :defx
2452
+ _, expected, extra_expected = *expected if
2453
+ Array === expected and expected.first == :defx
2454
+ _, input, extra_input = *input if
2455
+ Array === input and input.first == :defx
2370
2456
 
2371
2457
  debug = input.deep_clone
2372
- $-w = nil if node == "match"
2373
- assert_equal expected, processor.process(input), "failed on input: #{debug.inspect}"
2374
- $-w = true if node == "match"
2375
- extra_input.each do |input| processor.process(input) end
2458
+ assert_equal(expected, processor.process(input),
2459
+ "failed on input: #{debug.inspect}")
2460
+ extra_input.each do |extra|
2461
+ processor.process(extra)
2462
+ end
2376
2463
  extra = processor.extra_methods rescue []
2377
2464
  assert_equal extra_expected, extra
2378
2465
  end