From cc317d920817a169a8761c9e756082bcc126a1c1 Mon Sep 17 00:00:00 2001 From: akr Date: Wed, 8 Aug 2007 04:45:15 +0000 Subject: [PATCH] variable renaming refined. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@12904 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- test/ruby/sentgen.rb | 12 ++++++++++++ test/ruby/test_assignment.rb | 28 +++++++++++----------------- test/ruby/test_yield.rb | 16 ++-------------- 3 files changed, 25 insertions(+), 31 deletions(-) diff --git a/test/ruby/sentgen.rb b/test/ruby/sentgen.rb index 94cffdad7a..49eae5c4ae 100644 --- a/test/ruby/sentgen.rb +++ b/test/ruby/sentgen.rb @@ -243,5 +243,17 @@ class SentGen end nil end + + def SentGen.subst(obj, target, &b) + if obj.respond_to? :to_ary + a = [] + obj.each {|e| a << subst(e, target, &b) } + a + elsif target === obj + yield obj + else + obj + end + end end diff --git a/test/ruby/test_assignment.rb b/test/ruby/test_assignment.rb index 33c0be027c..055a6e8132 100644 --- a/test/ruby/test_assignment.rb +++ b/test/ruby/test_assignment.rb @@ -535,18 +535,14 @@ class TestAssignmentGen < Test::Unit::TestCase [:mlhs," = ",:mrhs]], } - def rename_var(obj, nbox=[0]) - if obj.respond_to? :to_ary - a = [] - obj.each {|e| a << rename_var(e, nbox) } - a - elsif obj == 'var' - n = nbox[0] - nbox[0] += 1 - "v#{n}" - else - obj - end + def rename_var(obj) + vars = [] + r = SentGen.subst(obj, 'var') { + var = "v#{vars.length}" + vars << var + var + } + return r, vars end def expand_except_paren(obj, r=[]) @@ -649,10 +645,8 @@ class TestAssignmentGen < Test::Unit::TestCase emu_assign_single(lhs, rv) end - def do_assign(assign) + def do_assign(assign, vars) assign = assign.join('') - vars = [] - vars = assign.scan(/v[0-9]+/) code = "#{assign}; [#{vars.join(",")}]" begin vals = eval(code) @@ -667,9 +661,9 @@ class TestAssignmentGen < Test::Unit::TestCase def test_assignment syntax = SentGen.expand_syntax(Syntax) SentGen.each_tree(syntax, :xassign, 3) {|assign| - assign[0] = rename_var(assign[0]) + assign[0], vars = rename_var(assign[0]) sent = [assign].join('') - bruby = do_assign(assign).to_a.sort + bruby = do_assign(assign, vars).to_a.sort bemu = emu_assign(assign).to_a.sort assert_equal(bemu, bruby, sent) } diff --git a/test/ruby/test_yield.rb b/test/ruby/test_yield.rb index c48120b329..85cff76263 100644 --- a/test/ruby/test_yield.rb +++ b/test/ruby/test_yield.rb @@ -157,21 +157,9 @@ class TestRubyYieldGen < Test::Unit::TestCase :test => [['def m(&b) b.yield', :command_args_noblock, ' end; r = m {', :block_param_def, 'vars', '}; undef m; r']] } - def subst(obj, target, &b) - if obj.respond_to? :to_ary - a = [] - obj.each {|e| a << subst(e, target, &b) } - a - elsif obj == target - yield obj - else - obj - end - end - def rename_var(obj) vars = [] - r = subst(obj, 'var') { + r = SentGen.subst(obj, 'var') { var = "v#{vars.length}" vars << var var @@ -181,7 +169,7 @@ class TestRubyYieldGen < Test::Unit::TestCase def check_nofork(t) t, vars = rename_var(t) - t = subst(t, 'vars') { " [#{vars.join(",")}]" } + t = SentGen.subst(t, 'vars') { " [#{vars.join(",")}]" } s = [t].join #print "#{s}\t\t" #STDOUT.flush