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/