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

ruby-changes:31006

From: nobu <ko1@a...>
Date: Sun, 29 Sep 2013 23:45:53 +0900 (JST)
Subject: [ruby-changes:31006] nobu:r43085 (trunk): parse.y: allow junk attrset

nobu	2013-09-29 23:45:46 +0900 (Sun, 29 Sep 2013)

  New Revision: 43085

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=43085

  Log:
    parse.y: allow junk attrset
    
    * parse.y (rb_id_attrset, intern_str): allow junk attrset ID for
      Struct.

  Modified files:
    trunk/ChangeLog
    trunk/parse.y
    trunk/test/-ext-/symbol/test_type.rb
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 43084)
+++ ChangeLog	(revision 43085)
@@ -1,4 +1,7 @@ https://github.com/ruby/ruby/blob/trunk/ChangeLog#L1
-Sun Sep 29 22:56:31 2013  Nobuyoshi Nakada  <nobu@r...>
+Sun Sep 29 23:45:42 2013  Nobuyoshi Nakada  <nobu@r...>
+
+	* parse.y (rb_id_attrset, intern_str): allow junk attrset ID for
+	  Struct.
 
 	* parse.y (rb_id_attrset): fix inconsistency with literals, allow
 	  ID_ATTRSET and return it itself, but ID_JUNK cannot make ID_ATTRSET.
Index: parse.y
===================================================================
--- parse.y	(revision 43084)
+++ parse.y	(revision 43085)
@@ -8895,7 +8895,7 @@ rb_id_attrset(ID id) https://github.com/ruby/ruby/blob/trunk/parse.y#L8895
 	int scope = (int)(id & ID_SCOPE_MASK);
 	switch (scope) {
 	  case ID_LOCAL: case ID_INSTANCE: case ID_GLOBAL:
-	  case ID_CONST: case ID_CLASS:
+	  case ID_CONST: case ID_CLASS: case ID_JUNK:
 	    break;
 	  case ID_ATTRSET:
 	    return id;
@@ -10541,7 +10541,7 @@ intern_str(VALUE str) https://github.com/ruby/ruby/blob/trunk/parse.y#L10541
     }
     if (name[last] == '=') {
 	/* attribute assignment */
-	if (!rb_enc_symname2_p(name, last, enc))
+	if (last > 1 && name[last-1] == '=')
 	    goto junk;
 	id = rb_intern3(name, last, enc);
 	if (id > tLAST_OP_ID && !is_attrset_id(id)) {
Index: test/-ext-/symbol/test_type.rb
===================================================================
--- test/-ext-/symbol/test_type.rb	(revision 43084)
+++ test/-ext-/symbol/test_type.rb	(revision 43085)
@@ -82,16 +82,16 @@ module Test_Symbol https://github.com/ruby/ruby/blob/trunk/test/-ext-/symbol/test_type.rb#L82
       assert_symtype("@foo=", :attrset?)
       assert_symtype("@@foo=", :attrset?)
       assert_symtype("$foo=", :attrset?)
-      assert_not_symtype("0=", :attrset?)
-      assert_not_symtype("@=", :attrset?)
-      assert_not_symtype("@@=", :attrset?)
+      assert_symtype("0=", :attrset?)
+      assert_symtype("@=", :attrset?)
+      assert_symtype("@@=", :attrset?)
       assert_not_symtype("foo", :attrset?)
       assert_not_symtype("Foo", :attrset?)
       assert_not_symtype("@foo", :attrset?)
       assert_not_symtype("@@foo", :attrset?)
       assert_not_symtype("$foo", :attrset?)
       assert_not_symtype("[foo]", :attrset?)
-      assert_not_symtype("[foo]=", :attrset?)
+      assert_symtype("[foo]=", :attrset?)
       assert_equal(:"foo=", Bug::Symbol.attrset("foo"))
       assert_symtype(Bug::Symbol.attrset("foo"), :attrset?)
       assert_equal(:"Foo=", Bug::Symbol.attrset("Foo"))
@@ -102,7 +102,8 @@ module Test_Symbol https://github.com/ruby/ruby/blob/trunk/test/-ext-/symbol/test_type.rb#L102
       assert_symtype(Bug::Symbol.attrset("@@foo"), :attrset?)
       assert_equal(:"$foo=", Bug::Symbol.attrset("$foo"))
       assert_symtype(Bug::Symbol.attrset("$foo"), :attrset?)
-      assert_raise(NameError) {Bug::Symbol.attrset("[foo]")}
+      assert_equal(:"[foo]=", Bug::Symbol.attrset("[foo]"))
+      assert_symtype(Bug::Symbol.attrset("[foo]"), :attrset?)
       assert_equal(:[]=, Bug::Symbol.attrset(:[]))
     end
   end

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

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