[pypy-commit] pypy space-newtext: fix problem with tracebacks (space.wrap(w_obj-or-None) replaces the None with a
cfbolz
pypy.commits at gmail.com
Fri Nov 11 11:44:31 EST 2016
Author: Carl Friedrich Bolz <cfbolz at gmx.de>
Branch: space-newtext
Changeset: r88322:ba3fe6222638
Date: 2016-11-11 17:29 +0100
http://bitbucket.org/pypy/pypy/changeset/ba3fe6222638/
Log: fix problem with tracebacks (space.wrap(w_obj-or-None) replaces the
None with a w_None, which I had missed in this case)
diff --git a/pypy/interpreter/error.py b/pypy/interpreter/error.py
--- a/pypy/interpreter/error.py
+++ b/pypy/interpreter/error.py
@@ -241,7 +241,7 @@
if with_traceback:
w_t = self.w_type
w_v = self.get_w_value(space)
- w_tb = self.get_traceback()
+ w_tb = self.get_w_traceback(space)
space.appexec([space.newtext(where),
space.newtext(objrepr),
space.newtext(extra_line),
@@ -286,6 +286,13 @@
tb.frame.mark_as_escaped()
return tb
+ def get_w_traceback(self, space):
+ """Return a traceback or w_None. """
+ tb = self.get_traceback()
+ if tb is None:
+ return space.w_None
+ return tb
+
def set_traceback(self, traceback):
"""Set the current traceback."""
self._application_traceback = traceback
diff --git a/pypy/interpreter/executioncontext.py b/pypy/interpreter/executioncontext.py
--- a/pypy/interpreter/executioncontext.py
+++ b/pypy/interpreter/executioncontext.py
@@ -323,7 +323,7 @@
if operr is not None:
w_value = operr.get_w_value(space)
w_arg = space.newtuple([operr.w_type, w_value,
- operr.get_traceback()])
+ operr.get_w_traceback(space)])
d = frame.getorcreatedebug()
if d.w_locals is not None:
diff --git a/pypy/interpreter/main.py b/pypy/interpreter/main.py
--- a/pypy/interpreter/main.py
+++ b/pypy/interpreter/main.py
@@ -118,7 +118,7 @@
operationerr.normalize_exception(space)
w_type = operationerr.w_type
w_value = operationerr.get_w_value(space)
- w_traceback = space.wrap(operationerr.get_traceback())
+ w_traceback = operationerr.get_w_traceback(space)
# for debugging convenience we also insert the exception into
# the interpreter-level sys.last_xxx
diff --git a/pypy/interpreter/pyframe.py b/pypy/interpreter/pyframe.py
--- a/pypy/interpreter/pyframe.py
+++ b/pypy/interpreter/pyframe.py
@@ -443,7 +443,7 @@
w_tb = space.w_None
else:
w_exc_value = self.last_exception.get_w_value(space)
- w_tb = w(self.last_exception.get_traceback())
+ w_tb = self.last_exception.get_w_traceback(space)
d = self.getorcreatedebug()
tup_state = [
@@ -858,7 +858,7 @@
while f is not None and f.last_exception is None:
f = f.f_backref()
if f is not None:
- return f.last_exception.get_traceback()
+ return f.last_exception.get_w_traceback(space)
return space.w_None
def fget_f_restricted(self, space):
diff --git a/pypy/interpreter/pyopcode.py b/pypy/interpreter/pyopcode.py
--- a/pypy/interpreter/pyopcode.py
+++ b/pypy/interpreter/pyopcode.py
@@ -1148,7 +1148,7 @@
# app-level exception
operr = w_unroller.operr
self.last_exception = operr
- w_traceback = operr.get_traceback()
+ w_traceback = operr.get_w_traceback(self.space)
w_suppress = self.call_contextmanager_exit_function(
w_exitfunc,
operr.w_type,
diff --git a/pypy/module/__pypy__/interp_magic.py b/pypy/module/__pypy__/interp_magic.py
--- a/pypy/module/__pypy__/interp_magic.py
+++ b/pypy/module/__pypy__/interp_magic.py
@@ -73,7 +73,7 @@
frame hidden from applevel.
"""
operr = space.getexecutioncontext().sys_exc_info(for_hidden=True)
- return space.w_None if operr is None else operr.get_traceback()
+ return space.w_None if operr is None else operr.get_w_traceback(space)
@unwrap_spec(meth=str)
def lookup_special(space, w_obj, meth):
diff --git a/pypy/module/_cffi_backend/ccallback.py b/pypy/module/_cffi_backend/ccallback.py
--- a/pypy/module/_cffi_backend/ccallback.py
+++ b/pypy/module/_cffi_backend/ccallback.py
@@ -183,7 +183,7 @@
e.normalize_exception(space)
w_t = e.w_type
w_v = e.get_w_value(space)
- w_tb = space.wrap(e.get_traceback())
+ w_tb = e.get_w_traceback(space)
w_res = space.call_function(self.w_onerror, w_t, w_v, w_tb)
if not space.is_none(w_res):
self.convert_result(ll_res, w_res)
diff --git a/pypy/module/_rawffi/callback.py b/pypy/module/_rawffi/callback.py
--- a/pypy/module/_rawffi/callback.py
+++ b/pypy/module/_rawffi/callback.py
@@ -60,7 +60,7 @@
break
unwrap_value(space, write_ptr, ptr, 0, letter, w_res)
except OperationError as e:
- tbprint(space, e.get_traceback(),
+ tbprint(space, e.get_w_traceback(space),
space.newtext(e.errorstr(space)))
# force the result to be zero
if callback_ptr.result is not None:
diff --git a/pypy/module/cpyext/pyerrors.py b/pypy/module/cpyext/pyerrors.py
--- a/pypy/module/cpyext/pyerrors.py
+++ b/pypy/module/cpyext/pyerrors.py
@@ -58,7 +58,7 @@
if operror:
ptype[0] = make_ref(space, operror.w_type)
pvalue[0] = make_ref(space, operror.get_w_value(space))
- ptraceback[0] = make_ref(space, operror.get_traceback())
+ ptraceback[0] = make_ref(space, operror.get_w_traceback(space))
else:
ptype[0] = lltype.nullptr(PyObject.TO)
pvalue[0] = lltype.nullptr(PyObject.TO)
@@ -286,7 +286,7 @@
w_type = operror.w_type
w_value = operror.get_w_value(space)
- w_tb = operror.get_traceback()
+ w_tb = operror.get_w_traceback(space)
if rffi.cast(lltype.Signed, set_sys_last_vars):
space.sys.setdictvalue(space, "last_type", w_type)
@@ -373,7 +373,7 @@
if operror:
ptype[0] = make_ref(space, operror.w_type)
pvalue[0] = make_ref(space, operror.get_w_value(space))
- ptraceback[0] = make_ref(space, operror.get_traceback())
+ ptraceback[0] = make_ref(space, operror.get_w_traceback(space))
else:
ptype[0] = lltype.nullptr(PyObject.TO)
pvalue[0] = lltype.nullptr(PyObject.TO)
diff --git a/pypy/module/sys/__init__.py b/pypy/module/sys/__init__.py
--- a/pypy/module/sys/__init__.py
+++ b/pypy/module/sys/__init__.py
@@ -161,7 +161,7 @@
if operror is None:
return space.w_None
else:
- return operror.get_traceback()
+ return operror.get_w_traceback(space)
return None
def get_w_default_encoder(self):
diff --git a/pypy/module/sys/vm.py b/pypy/module/sys/vm.py
--- a/pypy/module/sys/vm.py
+++ b/pypy/module/sys/vm.py
@@ -98,7 +98,7 @@
return space.newtuple([space.w_None, space.w_None, space.w_None])
else:
return space.newtuple([operror.w_type, operror.get_w_value(space),
- operror.get_traceback()])
+ operror.get_w_traceback(space)])
def exc_info_without_tb(space, frame):
operror = frame.last_exception
More information about the pypy-commit
mailing list