summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoryugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-05-11 21:23:24 +0000
committeryugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-05-11 21:23:24 +0000
commit5b0cef85ac90802cf7d0f9c8443c11054fc89d54 (patch)
treee20eafa8b27de4042de0a7ab0c3b93a7e6596b98
parentb7db271c021c6482ed619cfff2d613c0540eeca4 (diff)
merges r30805 and r30809 from trunk into ruby_1_9_2. fixes #4365
-- * parse.y (words, qwords): dispatch array events. based on a patch from Michael Edgar. [Bug #4365]. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_2@31510 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog5
-rw-r--r--parse.y10
-rw-r--r--test/ripper/dummyparser.rb46
-rw-r--r--test/ripper/test_parser_events.rb2
-rw-r--r--version.h2
5 files changed, 53 insertions, 12 deletions
diff --git a/ChangeLog b/ChangeLog
index ce3ad75e0e..0066c10447 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Sun Feb 6 12:18:25 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (words, qwords): dispatch array events. based on a
+ patch from Michael Edgar. [Bug #4365].
+
Sat Feb 5 21:47:09 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
* parse.y (mlhs_basic): include mlhs_post for ripper. a patch
diff --git a/parse.y b/parse.y
index f2c3ef27d9..7a0766d903 100644
--- a/parse.y
+++ b/parse.y
@@ -3938,11 +3938,16 @@ words : tWORDS_BEG ' ' tSTRING_END
$$ = NEW_ZARRAY();
/*%
$$ = dispatch0(words_new);
+ $$ = dispatch1(array, $$);
%*/
}
| tWORDS_BEG word_list tSTRING_END
{
+ /*%%%*/
$$ = $2;
+ /*%
+ $$ = dispatch1(array, $2);
+ %*/
}
;
@@ -3988,11 +3993,16 @@ qwords : tQWORDS_BEG ' ' tSTRING_END
$$ = NEW_ZARRAY();
/*%
$$ = dispatch0(qwords_new);
+ $$ = dispatch1(array, $$);
%*/
}
| tQWORDS_BEG qword_list tSTRING_END
{
+ /*%%%*/
$$ = $2;
+ /*%
+ $$ = dispatch1(array, $2);
+ %*/
}
;
diff --git a/test/ripper/dummyparser.rb b/test/ripper/dummyparser.rb
index 07a7eda023..8a706b558a 100644
--- a/test/ripper/dummyparser.rb
+++ b/test/ripper/dummyparser.rb
@@ -130,44 +130,44 @@ class DummyParser < Ripper
on_args_add_block(m.children, b)
m
end
-
+
def on_paren(params)
params
end
-
+
def on_brace_block(params, code)
Node.new('block', params, code)
end
-
+
def on_block_var(params, shadow)
params
end
-
+
def on_rest_param(var)
"*#{var}"
end
-
+
def on_blockarg(var)
"&#{var}"
end
-
+
def on_params(required, optional, rest, more, block)
args = NodeList.new
-
+
required.each do |req|
args.push(req)
end if required
-
+
optional.each do |var, val|
args.push("#{var}=#{val}")
end if optional
-
+
args.push(rest) if rest
-
+
more.each do |m|
args.push(m)
end if more
-
+
args.push(block) if block
args
end
@@ -184,6 +184,30 @@ class DummyParser < Ripper
Node.new('assocs', *a)
end
+ def on_word_new
+ ""
+ end
+
+ def on_word_add(word, w)
+ word << w
+ end
+
+ def on_words_new
+ NodeList.new
+ end
+
+ def on_words_add(words, word)
+ words.push word
+ end
+
+ def on_qwords_new
+ NodeList.new
+ end
+
+ def on_qwords_add(words, word)
+ words.push word
+ end
+
(Ripper::PARSER_EVENTS.map(&:to_s) - instance_methods(false).map {|n|n.to_s.sub(/^on_/, '')}).each do |event|
define_method(:"on_#{event}") do |*args|
Node.new(event, *args)
diff --git a/test/ripper/test_parser_events.rb b/test/ripper/test_parser_events.rb
index 3958213f77..99896b0d87 100644
--- a/test/ripper/test_parser_events.rb
+++ b/test/ripper/test_parser_events.rb
@@ -160,6 +160,8 @@ class TestRipper::ParserEvents < Test::Unit::TestCase
def test_array # array literal
assert_equal '[array([1,2,3])]', parse('[1,2,3]')
+ assert_equal '[array([abc,def])]', parse('%w[abc def]')
+ assert_equal '[array([abc,def])]', parse('%W[abc def]')
end
def test_assign # generic assignment
diff --git a/version.h b/version.h
index fd5990d7cd..d8eb2bb43b 100644
--- a/version.h
+++ b/version.h
@@ -1,5 +1,5 @@
#define RUBY_VERSION "1.9.2"
-#define RUBY_PATCHLEVEL 194
+#define RUBY_PATCHLEVEL 195
#define RUBY_VERSION_MAJOR 1
#define RUBY_VERSION_MINOR 9
#define RUBY_VERSION_TEENY 1