ParseTree 2.1.1 → 2.2.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.
@@ -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