summaryrefslogtreecommitdiff
path: root/parse.y
diff options
context:
space:
mode:
authordavidflanagan <davidflanagan@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-11-07 22:17:58 +0000
committerdavidflanagan <davidflanagan@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-11-07 22:17:58 +0000
commit89397d2f6e158877ea72c3ceaeda59efad2c32e0 (patch)
tree82c4460d1e3a2fbeb5d461a52752c760668fb7c5 /parse.y
parentf6fb4b3e8ecede29d25e4b5577174ed6f98d88c8 (diff)
* 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. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@13835 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'parse.y')
-rw-r--r--parse.y16
1 files changed, 16 insertions, 0 deletions
diff --git a/parse.y b/parse.y
index 776fa03a0d..ff50c13a7e 100644
--- a/parse.y
+++ b/parse.y
@@ -8661,6 +8661,21 @@ rb_intern3(const char *name, long len, rb_encoding *enc)
}
}
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 @@ rb_intern3(const char *name, long len, rb_encoding *enc)
enc = rb_enc_from_index(0);
mbstr:;
}
+ */
new_id:
id |= ++global_symbols.last_id << ID_SCOPE_SHIFT;
id_register: