ruby-changes:2344
From: ko1@a...
Date: 8 Nov 2007 07:31:32 +0900
Subject: [ruby-changes:2344] davidflanagan - Ruby:r13835 (trunk): * parse.y (rb_intern3): commented out broken code that prevented
davidflanagan 2007-11-08 07:17:58 +0900 (Thu, 08 Nov 2007) New Revision: 13835 Modified files: trunk/ChangeLog trunk/parse.y Log: * parse.y (rb_intern3): commented out broken code that prevented correct interning of multi-byte symbols. Without this patch :x==:x is false when x is a multi-byte character. http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/parse.y?r1=13835&r2=13834 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=13835&r2=13834 Index: ChangeLog =================================================================== --- ChangeLog (revision 13834) +++ ChangeLog (revision 13835) @@ -1,3 +1,8 @@ +Thu Nov 8 07:14:37 UTC 2007 David Flanagan <davidflanagan@r...> + * parse.y (rb_intern3): commented out broken code that prevented + correct interning of multi-byte symbols. Without this patch + :x==:x is false when x is a multi-byte character. + Thu Nov 8 07:04:31 UTC 2007 David Flanagan <davidflanagan@r...> * string.c (tr_setup_table, tr_trans): fix test failures in test/ruby/test_string.rb Index: parse.y =================================================================== --- parse.y (revision 13834) +++ parse.y (revision 13835) @@ -8661,6 +8661,21 @@ } } if (m - name < len) id = ID_JUNK; + /* + * davidflanagan: commented out because this just doesn't make sense. + * + * If we were called with a non-ascii encoding, then change + * the encoding to ASCII, unless the symbol had multi-byte characters + * and there are trailing non-identifier characters that are + * outside of ASCII. But all multi-byte characters + * are identifier chars, so there will never be trailing characters + * so this clause always changes the encoding of the string. + * + * The upshot is that the symbol is placed in the hashtable with + * an ASCII encoding, but is queried (at the top of this function) + * with its real encoding. So :x == :x is false when x is a + * multi-byte character. + * if (enc != rb_enc_from_index(0)) { if (!mb) { for (; m <= name + len; ++m) { @@ -8670,6 +8685,7 @@ enc = rb_enc_from_index(0); mbstr:; } + */ new_id: id |= ++global_symbols.last_id << ID_SCOPE_SHIFT; id_register: -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml