ruby-changes:15906
From: mame <ko1@a...>
Date: Sun, 16 May 2010 21:54:55 +0900 (JST)
Subject: [ruby-changes:15906] Ruby:r27847 (trunk): * parse.y (parser_read_escape, parser_tokadd_escape): allow a hex or
mame 2010-05-16 21:54:37 +0900 (Sun, 16 May 2010) New Revision: 27847 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=27847 Log: * parse.y (parser_read_escape, parser_tokadd_escape): allow a hex or octal encoded character after \c. This seemed to be prohibited at r13836, but its ChangeLog mentions nothing about this prohibition. So I assume this prohibition is not intended. [ruby-core:27229] Modified files: trunk/ChangeLog trunk/parse.y trunk/test/ruby/test_literal.rb Index: ChangeLog =================================================================== --- ChangeLog (revision 27846) +++ ChangeLog (revision 27847) @@ -1,3 +1,10 @@ +Sun May 16 21:51:04 2010 Yusuke Endoh <mame@t...> + + * parse.y (parser_read_escape, parser_tokadd_escape): allow a hex or + octal encoded character after \c. This seemed to be prohibited at + r13836, but its ChangeLog mentions nothing about this prohibition. + So I assume this prohibition is not intended. [ruby-core:27229] + Sun May 16 21:14:04 2010 Yuki Sonoda (Yugui) <yugui@y...> * ruby/test_rubyoptions.rb (TestRubyOptions#test_segv_test): Index: parse.y =================================================================== --- parse.y (revision 27846) +++ parse.y (revision 27847) @@ -5568,14 +5568,12 @@ case '0': case '1': case '2': case '3': /* octal constant */ case '4': case '5': case '6': case '7': - if (flags & (ESCAPE_CONTROL|ESCAPE_META)) goto eof; pushback(c); c = scan_oct(lex_p, 3, &numlen); lex_p += numlen; return c; case 'x': /* hex constant */ - if (flags & (ESCAPE_CONTROL|ESCAPE_META)) goto eof; c = tok_hex(&numlen); if (numlen == 0) return 0; return c; @@ -5648,7 +5646,6 @@ case '0': case '1': case '2': case '3': /* octal constant */ case '4': case '5': case '6': case '7': - if (flags & (ESCAPE_CONTROL|ESCAPE_META)) goto eof; { ruby_scan_oct(--lex_p, 3, &numlen); if (numlen == 0) goto eof; @@ -5658,7 +5655,6 @@ return 0; case 'x': /* hex constant */ - if (flags & (ESCAPE_CONTROL|ESCAPE_META)) goto eof; { tok_hex(&numlen); if (numlen == 0) goto eof; Index: test/ruby/test_literal.rb =================================================================== --- test/ruby/test_literal.rb (revision 27846) +++ test/ruby/test_literal.rb (revision 27847) @@ -54,11 +54,14 @@ assert_equal "\n", "\n" bug2500 = '[ruby-core:27228]' %w[c C- M-].each do |pre| - ["u", "x", %w[u{ }]].each do |open, close| + ["u", %w[u{ }]].each do |open, close| str = "\"\\#{pre}\\#{open}5555#{close}\"" assert_raise(SyntaxError, "#{bug2500} eval(#{str})") {eval(str)} end end + assert_equal "\x13", "\c\x33" + assert_equal "\x13", "\C-\x33" + assert_equal "\xB3", "\M-\x33" end def test_dstring -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/