disable coercion from str->bytes, fix coercion from str->object
authorStefan Behnel <scoder@users.berlios.de>
Sat, 10 Oct 2009 19:45:42 +0000 (21:45 +0200)
committerStefan Behnel <scoder@users.berlios.de>
Sat, 10 Oct 2009 19:45:42 +0000 (21:45 +0200)
Cython/Compiler/ExprNodes.py
tests/errors/string_assignments.pyx

index bd5912dcd352a20a731e99aa72451e454d9d74ea..b4149a34d3c739fa9e5c53016326359c4f62133a 100644 (file)
@@ -909,12 +909,13 @@ class StringNode(PyConstNode):
     def coerce_to(self, dst_type, env):
         if dst_type is Builtin.str_type:
             return self
-        if dst_type is Builtin.bytes_type:
-            # special case: bytes = 'str literal'
-            return BytesNode(self.pos, value=self.value)
-        elif not dst_type.is_pyobject:
+#        if dst_type is Builtin.bytes_type:
+#            # special case: bytes = 'str literal'
+#            return BytesNode(self.pos, value=self.value)
+        if not dst_type.is_pyobject:
             return BytesNode(self.pos, value=self.value).coerce_to(dst_type, env)
-        self.check_for_coercion_error(dst_type)
+        if dst_type is not py_object_type:
+            self.check_for_coercion_error(dst_type, fail=True)
         return self
 
     def generate_evaluation_code(self, code):
index 5a906396b2426508354b18188e13143a6786e109..aaccef0e476e05c0dfef2d7b162f15111eefe67c 100644 (file)
@@ -2,15 +2,14 @@
 
 # ok:
 cdef char* c1   =  "abc"
-cdef bytes b1   =  "abc"
 cdef str s1     =  "abc"
 
 cdef unicode u1 = u"abc"
 
-cdef bytes b2 = b"abc"
+cdef bytes b1 = b"abc"
 cdef char* c2 = b"abc"
 
-cdef bytes b3 = c1
+cdef bytes b2 = c1
 cdef char* c3 = b1
 
 cdef object o1  =  "abc"
@@ -42,24 +41,35 @@ cdef unicode u_f3 = b"abc"
 cdef unicode u_f4 = b1
 cdef unicode u_f5 = c1
 
+cdef tuple t_f1 =  "abc"
+cdef tuple t_f2 = u"abc"
+cdef tuple t_f3 = b"abc"
+
+cdef list  l_f1 = s1
+cdef list  l_f2 = b1
+cdef list  l_f3 = u1
 
 _ERRORS = u"""
-26:20: Unicode objects do not support coercion to C types.
-27:22: Unicode objects do not support coercion to C types.
-28:22: 'str' objects do not support coercion to C types.
-
-30:20: Cannot convert Unicode string to 'bytes' implicitly, encoding required.
-31:22: Cannot convert Unicode string to 'bytes' implicitly, encoding required.
-32:22: Cannot convert 'str' to 'bytes' implicitly. This is not portable.
-
-34:17: Cannot assign type 'char *' to 'str object'
-35:19: Cannot convert 'bytes' object to str implicitly. This is not portable to Py3.
-36:17: Cannot convert Unicode string to 'str' implicitly. This is not portable and requires explicit encoding.
-37:19: Cannot convert Unicode string to 'str' implicitly. This is not portable and requires explicit encoding.
-
-39:20: str objects do not support coercion to unicode, use a unicode string literal instead (u'')
-40:22: str objects do not support coercion to unicode, use a unicode string literal instead (u'')
-41:20: Cannot assign type 'char *' to 'unicode object'
-42:22: Cannot convert 'bytes' object to unicode implicitly, decoding required
-43:22: Cannot convert 'char*' to unicode implicitly, decoding required
+25:20: Unicode objects do not support coercion to C types.
+26:22: Unicode objects do not support coercion to C types.
+27:22: 'str' objects do not support coercion to C types.
+
+29:20: Cannot convert Unicode string to 'bytes' implicitly, encoding required.
+30:22: Cannot convert Unicode string to 'bytes' implicitly, encoding required.
+31:22: Cannot convert 'str' to 'bytes' implicitly. This is not portable.
+
+33:17: Cannot assign type 'char *' to 'str object'
+34:19: Cannot convert 'bytes' object to str implicitly. This is not portable to Py3.
+35:17: Cannot convert Unicode string to 'str' implicitly. This is not portable and requires explicit encoding.
+36:19: Cannot convert Unicode string to 'str' implicitly. This is not portable and requires explicit encoding.
+
+38:20: str objects do not support coercion to unicode, use a unicode string literal instead (u'')
+39:22: str objects do not support coercion to unicode, use a unicode string literal instead (u'')
+40:20: Cannot assign type 'char *' to 'unicode object'
+41:22: Cannot convert 'bytes' object to unicode implicitly, decoding required
+42:22: Cannot convert 'char*' to unicode implicitly, decoding required
+
+44:19: Cannot assign type 'str object' to 'tuple object'
+45:18: Cannot assign type 'unicode object' to 'tuple object'
+46:18: Cannot assign type 'char *' to 'tuple object'
 """