Commit 52e6c71b authored by Stefan Behnel's avatar Stefan Behnel

disable coercion from str->bytes, fix coercion from str->object

parent 852feeb7
...@@ -909,12 +909,13 @@ class StringNode(PyConstNode): ...@@ -909,12 +909,13 @@ class StringNode(PyConstNode):
def coerce_to(self, dst_type, env): def coerce_to(self, dst_type, env):
if dst_type is Builtin.str_type: if dst_type is Builtin.str_type:
return self return self
if dst_type is Builtin.bytes_type: # if dst_type is Builtin.bytes_type:
# special case: bytes = 'str literal' # # special case: bytes = 'str literal'
return BytesNode(self.pos, value=self.value) # return BytesNode(self.pos, value=self.value)
elif not dst_type.is_pyobject: if not dst_type.is_pyobject:
return BytesNode(self.pos, value=self.value).coerce_to(dst_type, env) 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 return self
def generate_evaluation_code(self, code): def generate_evaluation_code(self, code):
......
...@@ -2,15 +2,14 @@ ...@@ -2,15 +2,14 @@
# ok: # ok:
cdef char* c1 = "abc" cdef char* c1 = "abc"
cdef bytes b1 = "abc"
cdef str s1 = "abc" cdef str s1 = "abc"
cdef unicode u1 = u"abc" cdef unicode u1 = u"abc"
cdef bytes b2 = b"abc" cdef bytes b1 = b"abc"
cdef char* c2 = b"abc" cdef char* c2 = b"abc"
cdef bytes b3 = c1 cdef bytes b2 = c1
cdef char* c3 = b1 cdef char* c3 = b1
cdef object o1 = "abc" cdef object o1 = "abc"
...@@ -42,24 +41,35 @@ cdef unicode u_f3 = b"abc" ...@@ -42,24 +41,35 @@ cdef unicode u_f3 = b"abc"
cdef unicode u_f4 = b1 cdef unicode u_f4 = b1
cdef unicode u_f5 = c1 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""" _ERRORS = u"""
26:20: Unicode objects do not support coercion to C types. 25:20: Unicode objects do not support coercion to C types.
27:22: Unicode objects do not support coercion to C types. 26:22: Unicode objects do not support coercion to C types.
28:22: 'str' objects do not support coercion to C types. 27:22: 'str' objects do not support coercion to C types.
30:20: Cannot convert Unicode string to 'bytes' implicitly, encoding required. 29:20: Cannot convert Unicode string to 'bytes' implicitly, encoding required.
31:22: Cannot convert Unicode string to 'bytes' implicitly, encoding required. 30:22: Cannot convert Unicode string to 'bytes' implicitly, encoding required.
32:22: Cannot convert 'str' to 'bytes' implicitly. This is not portable. 31:22: Cannot convert 'str' to 'bytes' implicitly. This is not portable.
34:17: Cannot assign type 'char *' to 'str object' 33:17: Cannot assign type 'char *' to 'str object'
35:19: Cannot convert 'bytes' object to str implicitly. This is not portable to Py3. 34: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. 35: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. 36: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'') 38: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'') 39: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' 40:20: Cannot assign type 'char *' to 'unicode object'
42:22: Cannot convert 'bytes' object to unicode implicitly, decoding required 41:22: Cannot convert 'bytes' object to unicode implicitly, decoding required
43:22: Cannot convert 'char*' 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'
""" """
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment