[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]