Home - Summaries: (main) : (py3.11) : Everything - Nightly builds - Benchmarks - RPython - Builders - About

pypy/module/exceptions/test/test_exc.py::AppTestExc::()::test_str_unicode

self = <CallInfo when='call' exception: >
func = <function <lambda> at 0x00007f83a2f7f178>, when = 'call'

    def __init__(self, func, when):
        #: context of invocation: one of "setup", "call",
        #: "teardown", "memocollect"
        self.when = when
        self.start = time()
        try:
>           self.result = func()

../_pytest/runner.py:150: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   return CallInfo(lambda: ihook(item=item, **kwds), when=when)

../_pytest/runner.py:138: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <_HookCaller 'pytest_runtest_call'>
kwargs = {'__multicall__': <_MultiCall 0 results, 1 meths, kwargs={'item': <AppTestMethod 'test_str_unicode'>, '__multicall__': <_MultiCall 0 results, 1 meths, kwargs={...}>}>, 'item': <AppTestMethod 'test_str_unicode'>}

    def __call__(self, **kwargs):
        assert not self.is_historic()
>       return self._hookexec(self, self._nonwrappers + self._wrappers, kwargs)

../_pytest/vendored_packages/pluggy.py:724: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <_pytest.config.PytestPluginManager object at 0x00007f83c020e9c0>
hook = <_HookCaller 'pytest_runtest_call'>
methods = [<_pytest.vendored_packages.pluggy.HookImpl instance at 0x00007f83c06b46e0>]
kwargs = {'__multicall__': <_MultiCall 0 results, 1 meths, kwargs={'item': <AppTestMethod 'test_str_unicode'>, '__multicall__': <_MultiCall 0 results, 1 meths, kwargs={...}>}>, 'item': <AppTestMethod 'test_str_unicode'>}

    def _hookexec(self, hook, methods, kwargs):
        # called from all hookcaller instances.
        # enable_tracing will set its own wrapping function at self._inner_hookexec
>       return self._inner_hookexec(hook, methods, kwargs)

../_pytest/vendored_packages/pluggy.py:338: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

hook = <_HookCaller 'pytest_runtest_call'>
methods = [<_pytest.vendored_packages.pluggy.HookImpl instance at 0x00007f83c06b46e0>]
kwargs = {'__multicall__': <_MultiCall 0 results, 1 meths, kwargs={'item': <AppTestMethod 'test_str_unicode'>, '__multicall__': <_MultiCall 0 results, 1 meths, kwargs={...}>}>, 'item': <AppTestMethod 'test_str_unicode'>}

    self._inner_hookexec = lambda hook, methods, kwargs: \
>       _MultiCall(methods, kwargs, hook.spec_opts).execute()

../_pytest/vendored_packages/pluggy.py:333: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <_MultiCall 0 results, 1 meths, kwargs={'item': <AppTestMethod 'test_str_unicode'>, '__multicall__': <_MultiCall 0 results, 1 meths, kwargs={...}>}>

    def execute(self):
        all_kwargs = self.kwargs
        self.results = results = []
        firstresult = self.specopts.get("firstresult")
    
        while self.hook_impls:
            hook_impl = self.hook_impls.pop()
            args = [all_kwargs[argname] for argname in hook_impl.argnames]
            if hook_impl.hookwrapper:
>               return _wrapped_call(hook_impl.function(*args), self.execute)

../_pytest/vendored_packages/pluggy.py:595: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

wrap_controller = <generator object pytest_runtest_call at 0x00007f83a32e3e48>
func = <bound method _MultiCall.execute of <_MultiCall 0 results, 1 meths, kwargs={'i...tr_unicode'>, '__multicall__': <_MultiCall 0 results, 1 meths, kwargs={...}>}>>

    def _wrapped_call(wrap_controller, func):
        """ Wrap calling to a function with a generator which needs to yield
        exactly once.  The yield point will trigger calling the wrapped function
        and return its _CallOutcome to the yield point.  The generator then needs
        to finish (raise StopIteration) in order for the wrapped call to complete.
        """
        try:
            next(wrap_controller)   # first yield
        except StopIteration:
            _raise_wrapfail(wrap_controller, "did not yield")
        call_outcome = _CallOutcome(func)
        try:
            wrap_controller.send(call_outcome)
            _raise_wrapfail(wrap_controller, "has second yield")
        except StopIteration:
            pass
>       return call_outcome.get_result()

../_pytest/vendored_packages/pluggy.py:253: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <_pytest.vendored_packages.pluggy._CallOutcome instance at 0x00007f83a3396620>

    def get_result(self):
        if self.excinfo is None:
            return self.result
        else:
            ex = self.excinfo
            if _py3:
                raise ex[1].with_traceback(ex[2])
>           _reraise(*ex)  # noqa

../_pytest/vendored_packages/pluggy.py:279: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <_pytest.vendored_packages.pluggy._CallOutcome instance at 0x00007f83a3396620>
func = <bound method _MultiCall.execute of <_MultiCall 0 results, 1 meths, kwargs={'i...tr_unicode'>, '__multicall__': <_MultiCall 0 results, 1 meths, kwargs={...}>}>>

    def __init__(self, func):
        try:
>           self.result = func()

../_pytest/vendored_packages/pluggy.py:264: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <_MultiCall 0 results, 1 meths, kwargs={'item': <AppTestMethod 'test_str_unicode'>, '__multicall__': <_MultiCall 0 results, 1 meths, kwargs={...}>}>

    def execute(self):
        all_kwargs = self.kwargs
        self.results = results = []
        firstresult = self.specopts.get("firstresult")
    
        while self.hook_impls:
            hook_impl = self.hook_impls.pop()
            args = [all_kwargs[argname] for argname in hook_impl.argnames]
            if hook_impl.hookwrapper:
>               return _wrapped_call(hook_impl.function(*args), self.execute)

../_pytest/vendored_packages/pluggy.py:595: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

wrap_controller = <generator object pytest_runtest_call at 0x00007f83a32e3d80>
func = <bound method _MultiCall.execute of <_MultiCall 0 results, 1 meths, kwargs={'i...tr_unicode'>, '__multicall__': <_MultiCall 0 results, 1 meths, kwargs={...}>}>>

    def _wrapped_call(wrap_controller, func):
        """ Wrap calling to a function with a generator which needs to yield
        exactly once.  The yield point will trigger calling the wrapped function
        and return its _CallOutcome to the yield point.  The generator then needs
        to finish (raise StopIteration) in order for the wrapped call to complete.
        """
        try:
            next(wrap_controller)   # first yield
        except StopIteration:
            _raise_wrapfail(wrap_controller, "did not yield")
        call_outcome = _CallOutcome(func)
        try:
            wrap_controller.send(call_outcome)
            _raise_wrapfail(wrap_controller, "has second yield")
        except StopIteration:
            pass
>       return call_outcome.get_result()

../_pytest/vendored_packages/pluggy.py:253: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <_pytest.vendored_packages.pluggy._CallOutcome instance at 0x00007f83a33965e0>

    def get_result(self):
        if self.excinfo is None:
            return self.result
        else:
            ex = self.excinfo
            if _py3:
                raise ex[1].with_traceback(ex[2])
>           _reraise(*ex)  # noqa

../_pytest/vendored_packages/pluggy.py:279: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <_pytest.vendored_packages.pluggy._CallOutcome instance at 0x00007f83a33965e0>
func = <bound method _MultiCall.execute of <_MultiCall 0 results, 1 meths, kwargs={'i...tr_unicode'>, '__multicall__': <_MultiCall 0 results, 1 meths, kwargs={...}>}>>

    def __init__(self, func):
        try:
>           self.result = func()

../_pytest/vendored_packages/pluggy.py:264: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <_MultiCall 0 results, 1 meths, kwargs={'item': <AppTestMethod 'test_str_unicode'>, '__multicall__': <_MultiCall 0 results, 1 meths, kwargs={...}>}>

    def execute(self):
        all_kwargs = self.kwargs
        self.results = results = []
        firstresult = self.specopts.get("firstresult")
    
        while self.hook_impls:
            hook_impl = self.hook_impls.pop()
            args = [all_kwargs[argname] for argname in hook_impl.argnames]
            if hook_impl.hookwrapper:
                return _wrapped_call(hook_impl.function(*args), self.execute)
>           res = hook_impl.function(*args)

../_pytest/vendored_packages/pluggy.py:596: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

item = <AppTestMethod 'test_str_unicode'>

    def pytest_runtest_call(item):
        try:
>           item.runtest()

../_pytest/runner.py:91: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <AppTestMethod 'test_str_unicode'>

    def runtest(self):
        target = self.obj
        src = extract_docstring_if_empty_function(target.im_func)
        space = target.im_self.space
        if self.config.option.runappdirect:
            appexec_definitions = self.parent.obj.__dict__
            spaceconfig = getattr(self.parent.obj, 'spaceconfig', None)
            usemodules = spaceconfig.get('usemodules') if spaceconfig else None
            return run_with_python(self.config.option.python, src, usemodules,
                                   **appexec_definitions)
        filename = self._getdynfilename(target)
        func = app2interp_temp(src, filename=filename)
        w_instance = self.parent.w_instance
>       self.execute_appex(space, func, space, w_instance)

tool/pytest/apptest.py:331: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <AppTestMethod 'test_str_unicode'>, space = StdObjSpace
target = <function test_str_unicode at 0x00007f83a2f7f1f0>
args = (StdObjSpace, <pypy.interpreter.typedef.W_ObjectObjectUserDictWeakrefable object at 0x00007f83b27826b0>)

    def execute_appex(self, space, target, *args):
        self.space = space
        space.getexecutioncontext().set_sys_exc_info(None)
        try:
>           target(*args)

tool/pytest/apptest.py:267: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

space = StdObjSpace
args_w = (<pypy.interpreter.typedef.W_ObjectObjectUserDictWeakrefable object at 0x00007f83b27826b0>,)

    def appcaller(space, *args_w):
        if not isinstance(space, ObjSpace):
            raise TypeError("first argument must be a space instance.")
        # the last argument can be an Arguments
>       w_func = self.wget(space, name)

interpreter/gateway.py:1402: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <ApplevelClass filename='[/Users/matti/build-worker-x86_64/own-macos-x86-64/build/pypy/module/exceptions/test/test_exc.py:146]'>
space = StdObjSpace, name = 'test_str_unicode'

    def wget(self, space, name):
>       w_globals = self.getwdict(space)

interpreter/gateway.py:1393: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <ApplevelClass filename='[/Users/matti/build-worker-x86_64/own-macos-x86-64/build/pypy/module/exceptions/test/test_exc.py:146]'>
space = StdObjSpace

    def getwdict(self, space):    # no cache
>       return build_applevel_dict(self, space)

interpreter/gateway.py:1498: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <ApplevelClass filename='[/Users/matti/build-worker-x86_64/own-macos-x86-64/build/pypy/module/exceptions/test/test_exc.py:146]'>
space = StdObjSpace

    @not_rpython
    def build_applevel_dict(self, space):
        w_glob = space.newdict(module=True)
        space.setitem(w_glob, space.newtext('__name__'), space.newtext(self.modname))
        space.exec_(self.source, w_glob, w_glob,
                    hidden_applevel=self.hidden_applevel,
>                   filename=self.filename)

interpreter/gateway.py:1448: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = StdObjSpace
statement = "def test_str_unicode(self):\n        e = ValueError('\xc3\xa0\xc3\xa8\xc3\xac')\n        assert str(e) == '\xc3\xa0\xc3\xa8\xc3\xac'"
w_globals = W_ModuleDictObject(<pypy.objspace.std.celldict.ModuleDictStrategy object at 0x00007f83c3e0ab48>)
w_locals = W_ModuleDictObject(<pypy.objspace.std.celldict.ModuleDictStrategy object at 0x00007f83c3e0ab48>)
hidden_applevel = False
filename = '[/Users/matti/build-worker-x86_64/own-macos-x86-64/build/pypy/module/exceptions/test/test_exc.py:146]'

    @not_rpython
    def exec_(self, statement, w_globals, w_locals, hidden_applevel=False,
              filename=None):
        "For internal debugging."
        if filename is None:
            filename = '?'
        from pypy.interpreter.pycode import PyCode
        if isinstance(statement, str):
>           statement = self._cached_compile(filename, statement, 'exec', 0, hidden_applevel)

interpreter/baseobjspace.py:1399: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = StdObjSpace
filename = '[/Users/matti/build-worker-x86_64/own-macos-x86-64/build/pypy/module/exceptions/test/test_exc.py:146]'
source = "def test_str_unicode(self):\n        e = ValueError('\xc3\xa0\xc3\xa8\xc3\xac')\n        assert str(e) == '\xc3\xa0\xc3\xa8\xc3\xac'"
mode = 'exec', flags = 0, hidden_applevel = False, ast_transform = None

    @not_rpython
    def _cached_compile(self, filename, source, mode, flags, hidden_applevel, ast_transform=None):
        import os
        from hashlib import md5
        from rpython.config.translationoption import CACHE_DIR
        from rpython.tool.gcc_cache import try_atomic_write
        from pypy.module.marshal import interp_marshal
        from pypy.interpreter.pycode import default_magic
        h = md5(str(default_magic))
        h.update(filename)
        h.update(source)
        h.update(mode)
        h.update(str(flags))
        h.update(str(hidden_applevel))
        addition = ''
        if ast_transform:
            addition = ast_transform.func_name
    
        cachename = os.path.join(
            CACHE_DIR, "applevel_exec_%s_%s" % (addition, h.hexdigest()))
        try:
            if self.config.translating:
                raise IOError("don't use the cache when translating pypy")
            with open(cachename, 'rb') as f:
                w_bin = self.newbytes(f.read())
                w_code = interp_marshal._loads(self, w_bin, hidden_applevel)
        except IOError:
            # must (re)compile the source
            ec = self.getexecutioncontext()
            if ast_transform:
                c = self.createcompiler()
                tree = c.compile_to_ast(source, filename, "exec", 0)
                tree = ast_transform(self, tree)
                w_code = c.compile_ast(tree, filename, 'exec', 0)
            else:
                w_code = ec.compiler.compile(
>                   source, filename, mode, flags, hidden_applevel)

interpreter/baseobjspace.py:1444: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <pypy.interpreter.pycompiler.PythonAstCompiler object at 0x00007f83d1162c60>
source = "def test_str_unicode(self):\n        e = ValueError('\xc3\xa0\xc3\xa8\xc3\xac')\n        assert str(e) == '\xc3\xa0\xc3\xa8\xc3\xac'"
filename = '[/Users/matti/build-worker-x86_64/own-macos-x86-64/build/pypy/module/exceptions/test/test_exc.py:146]'
mode = 'exec', flags = 0, hidden_applevel = False, optimize = 0

    def compile(self, source, filename, mode, flags=0, hidden_applevel=False,
            optimize=-1):
        if optimize == -1:
            optimize = self.space.sys.get_optimize()
        assert optimize >= 0
        info = pyparse.CompileInfo(filename, mode, flags,
                hidden_applevel=hidden_applevel, optimize=optimize)
>       mod = self._compile_to_ast(source, info)

interpreter/pycompiler.py:180: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <pypy.interpreter.pycompiler.PythonAstCompiler object at 0x00007f83d1162c60>
source = "def test_str_unicode(self):\n        e = ValueError('\xc3\xa0\xc3\xa8\xc3\xac')\n        assert str(e) == '\xc3\xa0\xc3\xa8\xc3\xac'"
info = <pypy.interpreter.pyparser.pyparse.CompileInfo object at 0x00007f83b235a3d8>

    def _compile_to_ast(self, source, info):
        space = self.space
        self.parser.reset()
        try:
            mod = self.parser.parse_source(source, info)
        except parseerror.TabError as e:
            raise OperationError(space.w_TabError,
                                 e.find_sourceline_and_wrap_info(space, source, info.filename))
        except parseerror.IndentationError as e:
            raise OperationError(space.w_IndentationError, e.find_sourceline_and_wrap_info(space, source, info.filename))
        except parseerror.SyntaxError as e:
>           raise OperationError(space.w_SyntaxError, e.find_sourceline_and_wrap_info(space, source, info.filename))

interpreter/pycompiler.py:170: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = SyntaxError(), space = StdObjSpace
source = "def test_str_unicode(self):\n        e = ValueError('\xc3\xa0\xc3\xa8\xc3\xac')\n        assert str(e) == '\xc3\xa0\xc3\xa8\xc3\xac'"
filename = '[/Users/matti/build-worker-x86_64/own-macos-x86-64/build/pypy/module/exceptions/test/test_exc.py:146]'

    def find_sourceline_and_wrap_info(self, space, source=None, filename=None):
        """ search for the line of input that caused the error and then return
            a wrapped tuple that can be used to construct a wrapped SyntaxError.
            Optionally pass source, to get better error messages for the case where
            this instance was constructed without a source line (.text
            attribute)"""
        text = self.text
        if text is None and source is not None and self.lineno:
            lines = source.splitlines(True)
            text = lines[self.lineno - 1]
        w_text = w_filename = space.w_None
        w_lineno = space.newint(self.lineno)
        if filename is None:
            filename = self.filename
        if filename is not None:
            w_filename = space.newfilename(filename)
            if text is None:
                w_text = space.appexec([w_filename, w_lineno],
                    """(filename, lineno):
                        try:
                            with open(filename) as f:
                                for _ in range(lineno - 1):
                                    f.readline()
                                return f.readline()
                        except:  # we can't allow any exceptions here!
                            return None""")
        offset = self.offset
        end_offset = self.end_offset
        if text is not None:
            # text may not be UTF-8 in case of decoding errors.
            # adjust the encoded text offset to a decoded offset
            # XXX do the right thing about continuation lines, which
            # XXX are their own fun, sometimes giving offset >
            # XXX len(text) for example (right now, avoid crashing)
    
            # this also converts the byte-based self.offset to a
            # codepoint-based index into the decoded unicode-version of
            # self.text
    
            replacedtext, unilength, _ = _str_decode_utf8_slowpath(space,
>                   text, space.newbytes(text), 'replace', False, make_replace_error_handler(space), True)

interpreter/pyparser/error.py:93: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

space = StdObjSpace, s = "        e = ValueError('\xc3\xa0\xc3\xa8\xc3\xac')\n"
w_s = W_BytesObject("        e = ValueError('\xc3\xa0\xc3\xa8\xc3\xac')\n")
errors = 'replace', final = False
errorhandler = <function replace_error_handler at 0x00007f83a2f7f5b0>
allow_surrogates = True

    def _str_decode_utf8_slowpath(space, s, w_s, errors, final, errorhandler, allow_surrogates):
        """ Same as checking for the valid utf8, but we know the utf8 is not
        valid so we're trying to either raise or pack stuff with error handler.
        The key difference is that this is call_may_force.
    
        In CPython this is done in unicode_decode_utf8, which has no
        allow_surrogates. That argument is used in at least decode_utf8sp, in
        interpreter.error._compute_value.
        """
        if errors is None:
            errors = 'strict'
        result = StringBuilder(len(s))
        pos = 0
        while pos < len(s):
            ordch1 = ord(s[pos])
            # fast path for ASCII
            # XXX maybe use a while loop here
            if ordch1 <= 0x7F:
                pos += 1
                result.append(chr(ordch1))
                continue
    
            n = ord(runicode._utf8_code_length[ordch1 - 0x80])
            if pos + n > len(s):
                # argh, this obscure block of code is mostly a copy of
                # what follows :-(
                charsleft = len(s) - pos - 1 # either 0, 1, 2
                # note: when we get the 'unexpected end of data' we need
                # to care about the pos returned; it can be lower than len(s),
                # in case we need to continue running this loop
                if not charsleft:
                    # there's only the start byte and nothing else
                    if not final:
                        break
                    r, pos, rettype, s, w_s = errorhandler(errors, 'utf-8',
                                          'unexpected end of data',
                                          w_s, pos, pos+1)
                    result.append(r)
                    continue
                ordch2 = ord(s[pos+1])
                if n == 3:
                    # 3-bytes seq with only a continuation byte
                    if rutf8._invalid_byte_2_of_3(ordch1, ordch2, allow_surrogates):
                        # second byte invalid, take the first and continue
                        r, pos, rettype, s, w_s = errorhandler(errors, 'utf-8',
                                              'invalid continuation byte',
                                              w_s, pos, pos+1)
                        result.append(r)
                        continue
                    else:
                        # second byte valid, but third byte missing
                        if not final:
                            break
                        r, pos, rettype, s, w_s = errorhandler(errors, 'utf-8',
                                          'unexpected end of data',
                                          w_s, pos, pos+2)
                        result.append(r)
                        continue
                elif n == 4:
                    # 4-bytes seq with 1 or 2 continuation bytes
                    if rutf8._invalid_byte_2_of_4(ordch1, ordch2):
                        # second byte invalid, take the first and continue
                        r, pos, rettype, s, w_s = errorhandler(errors, 'utf-8',
                                              'invalid continuation byte',
                                              w_s, pos, pos+1)
                        result.append(r)
                        continue
                    elif charsleft == 2 and rutf8._invalid_byte_3_of_4(ord(s[pos+2])):
                        # third byte invalid, take the first two and continue
                        r, pos, rettype, s, w_s = errorhandler(errors, 'utf-8',
                                              'invalid continuation byte',
                                              w_s, pos, pos+2)
                        result.append(r)
                        continue
                    else:
                        # there's only 1 or 2 valid cb, but the others are missing
                        if not final:
                            break
                        r, pos, rettype, s, w_s = errorhandler(errors, 'utf-8',
                                          'unexpected end of data',
                                          w_s, pos, pos+charsleft+1)
                        result.append(r)
                        continue
                raise AssertionError("unreachable")
    
            if n == 0:
                r, pos, rettype, s, w_s = errorhandler(errors, 'utf-8',
                                      'invalid start byte',
                                      w_s, pos, pos+1)
                result.append(r)
    
            elif n == 1:
                assert 0, "ascii should have gone through the fast path"
    
            elif n == 2:
                ordch2 = ord(s[pos+1])
                if rutf8._invalid_byte_2_of_2(ordch2):
                    r, pos, rettype, s, w_s = errorhandler(errors, 'utf-8',
                                          'invalid continuation byte',
                                          w_s, pos, pos+1)
                    result.append(r)
                    continue
                # 110yyyyy 10zzzzzz -> 00000000 00000yyy yyzzzzzz
                result.append(chr(ordch1))
                result.append(chr(ordch2))
                pos += 2
    
            elif n == 3:
                ordch2 = ord(s[pos+1])
                ordch3 = ord(s[pos+2])
                if rutf8._invalid_byte_2_of_3(ordch1, ordch2, allow_surrogates):
                    r, pos, rettype, s, w_s = errorhandler(errors, 'utf-8',
                                          'invalid continuation byte',
                                          w_s, pos, pos+1)
                    result.append(r)
                    continue
                elif rutf8._invalid_byte_3_of_3(ordch3):
                    r, pos, rettype, s, w_s = errorhandler(errors, 'utf-8',
                                          'invalid continuation byte',
                                          w_s, pos, pos+2)
                    result.append(r)
                    continue
                # 1110xxxx 10yyyyyy 10zzzzzz -> 00000000 xxxxyyyy yyzzzzzz
                result.append(chr(ordch1))
                result.append(chr(ordch2))
                result.append(chr(ordch3))
                pos += 3
    
            elif n == 4:
                ordch2 = ord(s[pos+1])
                ordch3 = ord(s[pos+2])
                ordch4 = ord(s[pos+3])
                if rutf8._invalid_byte_2_of_4(ordch1, ordch2):
                    r, pos, rettype, s, w_s = errorhandler(errors, 'utf-8',
                                          'invalid continuation byte',
                                          w_s, pos, pos+1)
                    result.append(r)
                    continue
                elif rutf8._invalid_byte_3_of_4(ordch3):
                    r, pos, rettype, s, w_s = errorhandler(errors, 'utf-8',
                                          'invalid continuation byte',
                                          w_s, pos, pos+2)
                    result.append(r)
                    continue
                elif rutf8._invalid_byte_4_of_4(ordch4):
                    r, pos, rettype, s, w_s = errorhandler(errors, 'utf-8',
                                          'invalid continuation byte',
                                          w_s, pos, pos+3)
                    result.append(r)
                    continue
                # 11110www 10xxxxxx 10yyyyyy 10zzzzzz -> 000wwwxx xxxxyyyy yyzzzzzz
                result.append(chr(ordch1))
                result.append(chr(ordch2))
                result.append(chr(ordch3))
                result.append(chr(ordch4))
                pos += 4
    
        r = result.build()
        # XXX can keep track of the resulting length without calling check_utf8
        # here
>       return r, rutf8.check_utf8(r, True), pos

interpreter/unicodehelper.py:537: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

s = "        e = ValueError('\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd')\n"
allow_surrogates = True, start = 0, stop = -1

    def check_utf8(s, allow_surrogates, start=0, stop=-1):
        """Check that 's' is a utf-8-encoded byte string.
    
        Returns the length (number of chars) or raise CheckError.
        If allow_surrogates is False, then also raise if we see any.
        Note also codepoints_in_utf8(), which also computes the length
        faster by assuming that 's' is valid utf-8.
        """
        res = _check_utf8(s, allow_surrogates, start, stop)
        if res >= 0:
            return res
>       raise CheckError(~res)
E       CheckError

../rpython/rlib/rutf8.py:362: CheckError
builder: own-macos-x86-64 build #1206
test: pypy/module/exceptions/test/test_exc/py/AppTestExc/()/test_str_unicode