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):
# 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"
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'
"""