From: zaur Date: Tue, 19 Feb 2013 13:37:44 +0000 (+0300) Subject: Fix test unicode_slicing for compatibility between py2X/py3 X-Git-Tag: 0.19b1~138^2~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b12402fc61921a056cd5cb029cce85444b2d9cea;p=platform%2Fupstream%2Fpython-cython.git Fix test unicode_slicing for compatibility between py2X/py3 --- diff --git a/Cython/Compiler/ExprNodes.py b/Cython/Compiler/ExprNodes.py index b263380..cc063d5 100755 --- a/Cython/Compiler/ExprNodes.py +++ b/Cython/Compiler/ExprNodes.py @@ -3470,6 +3470,8 @@ class SliceIndexNode(ExprNode): if base_type.is_builtin_type: # slicing builtin types returns something of the same type self.type = base_type + self.base = self.base.as_none_safe_node("'NoneType' object is not subscriptable") + c_int = PyrexTypes.c_py_ssize_t_type if self.start: self.start = self.start.coerce_to(c_int, env) @@ -3486,10 +3488,6 @@ class SliceIndexNode(ExprNode): error(self.pos, "Slicing is not currently supported for '%s'." % self.type) return - - maybe_check = self.base.as_none_safe_node("'NoneType' object is not slicable") - if maybe_check.is_nonecheck: - maybe_check.generate_result_code(code) base_result = self.base.result() result = self.result() @@ -9786,9 +9784,7 @@ class NoneCheckNode(CoercionNode): code.putln( "if (unlikely(%s == Py_None)) {" % self.condition()) - in_nogil_context = getattr(self, "in_nogil_context", False) - - if in_nogil_context: + if self.in_nogil_context: code.put_ensure_gil() escape = StringEncoding.escape_byte_string @@ -9804,7 +9800,7 @@ class NoneCheckNode(CoercionNode): self.exception_type_cname, escape(self.exception_message.encode('UTF-8')))) - if in_nogil_context: + if self.in_nogil_context: code.put_release_ensured_gil() code.putln(code.error_goto(self.pos)) diff --git a/tests/run/unicode_slicing.pyx b/tests/run/unicode_slicing.pyx index 2ef2b1a..a3a7e4a 100644 --- a/tests/run/unicode_slicing.pyx +++ b/tests/run/unicode_slicing.pyx @@ -1,26 +1,110 @@ # coding: utf-8 __doc__ = u""" - >>> do_slice(u'abcdef', 2, 3) - (u'c', u'cdef', u'ab', u'abcdef', u'cdef', u'ab', u'abcdef') - >>> do_slice(u'abcdef', 0, 5) - (u'abcde', u'abcdef', u'', u'abcdef', u'abcdef', u'', u'abcdef') - >>> do_slice(u'aАbБcСdДeЕfФ', 2, 8) - (u'bБcСdД', u'bБcСdДeЕfФ', u'aА', u'aАbБcСdДeЕfФ', u'bБcСdДeЕfФ', u'aА', u'aАbБcСdДeЕfФ') - >>> do_slice(u'aАbБcСdДeЕfФ', 2, 8) - (u'bБcСdД', u'bБcСdДeЕfФ', u'aА', u'aАbБcСdДeЕfФ', u'bБcСdДeЕfФ', u'aА', u'aАbБcСdДeЕfФ') - >>> do_slice(u'АБСДЕФ', 2, 4) - (u'СД', u'СДЕФ', u'АБ', u'АБСДЕФ', u'СДЕФ', u'АБ', u'АБСДЕФ') - >>> do_slice(None, 2, 4) + >>> do_slice1(u'abcdef', 2, 3) + u'c' + >>> do_slice2(u'abcdef', 2, 3) + u'cdef' + >>> do_slice3(u'abcdef', 2, 3) + u'ab' + >>> do_slice4(u'abcdef', 2, 3) + u'abcdef' + >>> do_slice5(u'abcdef', 2, 3) + u'cdef' + >>> do_slice6(u'abcdef', 2, 3) + u'ab' + >>> do_slice7(u'abcdef', 2, 3) + u'abcdef' + >>> do_slice1(u'abcdef', 0, 5) + u'abcde' + >>> do_slice2(u'abcdef', 0, 5) + u'abcdef' + >>> do_slice3(u'abcdef', 0, 5) + u'' + >>> do_slice4(u'abcdef', 0, 5) + u'abcdef' + >>> do_slice5(u'abcdef', 0, 5) + u'abcdef' + >>> do_slice6(u'abcdef', 0, 5) + u'' + >>> do_slice7(u'abcdef', 0, 5) + u'abcdef' + >>> do_slice1(u'aАbБcСdДeЕfФ', 2, 8) + u'bБcСdД' + >>> do_slice2(u'aАbБcСdДeЕfФ', 2, 8) + u'bБcСdДeЕfФ' + >>> do_slice3(u'aАbБcСdДeЕfФ', 2, 8) + u'aА' + >>> do_slice4(u'aАbБcСdДeЕfФ', 2, 8) + u'aАbБcСdДeЕfФ' + >>> do_slice5(u'aАbБcСdДeЕfФ', 2, 8) + u'bБcСdДeЕfФ' + >>> do_slice6(u'aАbБcСdДeЕfФ', 2, 8) + u'aА' + >>> do_slice7(u'aАbБcСdДeЕfФ', 2, 8) + u'aАbБcСdДeЕfФ' + >>> do_slice1(u'АБСДЕФ', 2, 4) + u'СД' + >>> do_slice2(u'АБСДЕФ', 2, 4) + u'СДЕФ' + >>> do_slice3(u'АБСДЕФ', 2, 4) + u'АБ' + >>> do_slice4(u'АБСДЕФ', 2, 4) + u'АБСДЕФ' + >>> do_slice5(u'АБСДЕФ', 2, 4) + u'СДЕФ' + >>> do_slice6(u'АБСДЕФ', 2, 4) + u'АБ' + >>> do_slice7(u'АБСДЕФ', 2, 4) + u'АБСДЕФ' + >>> do_slice1(None, 2, 4) Traceback (most recent call last): - TypeError: 'NoneType' object is not slicable + TypeError: 'NoneType' object is not subscriptable + >>> do_slice2(None, 2, 4) + Traceback (most recent call last): + TypeError: 'NoneType' object is not subscriptable + >>> do_slice3(None, 2, 4) + Traceback (most recent call last): + TypeError: 'NoneType' object is not subscriptable + >>> do_slice4(None, 2, 4) + Traceback (most recent call last): + TypeError: 'NoneType' object is not subscriptable + >>> do_slice5(None, 2, 4) + Traceback (most recent call last): + TypeError: 'NoneType' object is not subscriptable + >>> do_slice6(None, 2, 4) + Traceback (most recent call last): + TypeError: 'NoneType' object is not subscriptable + >>> do_slice7(None, 2, 4) + Traceback (most recent call last): + TypeError: 'NoneType' object is not subscriptable """ import sys if sys.version_info[0] >= 3: __doc__ = __doc__.replace(u"(u'", u"('").replace(u" u'", u" '") + ss = "'" +else: + ss = "u'" + +def do_slice1(unicode s, int i, int j): + print(ss+s[i:j]+"'") + +def do_slice2(unicode s, int i, int j): + print(ss+s[i:]+"'") + +def do_slice3(unicode s, int i, int j): + print(ss+s[:i]+"'") + +def do_slice4(unicode s, int i, int j): + print(ss+s[:]+"'") + +def do_slice5(unicode s, int i, int j): + print(ss+s[i:None]+"'") -def do_slice(unicode s, int i, int j): - return s[i:j], s[i:], s[:i], s[:], s[i:None], s[None:i], s[None:None] +def do_slice6(unicode s, int i, int j): + print(ss+s[None:i]+"'") +def do_slice7(unicode s, int i, int j): + print(ss+s[None:None]+"'")