fix identifiers, simplify Python string cnames
authorStefan Behnel <scoder@users.berlios.de>
Sun, 11 Oct 2009 08:23:28 +0000 (10:23 +0200)
committerStefan Behnel <scoder@users.berlios.de>
Sun, 11 Oct 2009 08:23:28 +0000 (10:23 +0200)
Cython/Compiler/Code.py
Cython/Compiler/ExprNodes.py

index fd482ad15f82e0841f875f44971e68ca3ecdd3ed..99e85689b6610a541d565f5d437abf4398b1d235 100644 (file)
@@ -318,7 +318,7 @@ class StringConst(object):
         else:
             if py_strings is None:
                 self.py_strings = {}
-            is_unicode = encoding is None
+            is_unicode = encoding is None and not is_str
             if identifier:
                 intern = True
             elif identifier is None:
@@ -332,10 +332,9 @@ class StringConst(object):
                 prefix = Naming.interned_str_prefix
             else:
                 prefix = Naming.py_const_prefix
-            pystring_cname = "%s%s%s_%s" % (
+            pystring_cname = "%s%s_%s" % (
                 prefix,
-                is_unicode and 'u' or 'b',
-                is_str and 's' or '',
+                (is_str and 's') or (is_unicode and 'u') or 'b',
                 self.cname[len(Naming.const_prefix):])
 
             py_string = PyStringConst(
index bd08d1adcaae9ae5af49b2aa38ec7263559c4938..ff0ad0673c6d08aba65f14713d7db31d4dd219dd 100644 (file)
@@ -919,10 +919,11 @@ class StringNode(PyConstNode):
             self.check_for_coercion_error(dst_type, fail=True)
 
         # this will be a unicode string in Py3, so make sure we can decode it
+        encoding = self.value.encoding or 'UTF-8'
         try:
-            self.value.decode(self.value.encoding)
+            self.value.decode(encoding)
         except UnicodeDecodeError:
-            error(self.pos, "String decoding as '%s' failed. Consider using a byte string or unicode string explicitly, or adjust the source code encoding." % self.value.encoding)
+            error(self.pos, "String decoding as '%s' failed. Consider using a byte string or unicode string explicitly, or adjust the source code encoding." % encoding)
 
         return self