Commit 3d805058 authored by Kurt B. Kaiser's avatar Kurt B. Kaiser

1. RPC stack levels were not pruned from traceback unless IDLE was started

   from its source directory.
2. Replace final traceback '?' with '-toplevel-'
3. Remove duplicated import boolcheck
parent 5da514c2
...@@ -12,8 +12,6 @@ import traceback ...@@ -12,8 +12,6 @@ import traceback
import types import types
import exceptions import exceptions
import boolcheck
import linecache import linecache
from code import InteractiveInterpreter from code import InteractiveInterpreter
...@@ -217,7 +215,7 @@ class PyShellEditorWindow(EditorWindow): ...@@ -217,7 +215,7 @@ class PyShellEditorWindow(EditorWindow):
lineno += 1 lineno += 1
return lines return lines
# XXX 13 Dec 2020 KBK Not used currently # XXX 13 Dec 2002 KBK Not used currently
# def saved_change_hook(self): # def saved_change_hook(self):
# "Extend base method - clear breaks if module is modified" # "Extend base method - clear breaks if module is modified"
# if not self.get_saved(): # if not self.get_saved():
...@@ -395,15 +393,8 @@ class ModifiedInterpreter(InteractiveInterpreter): ...@@ -395,15 +393,8 @@ class ModifiedInterpreter(InteractiveInterpreter):
elif how == "EXCEPTION": elif how == "EXCEPTION":
mod, name, args, tb = what mod, name, args, tb = what
print >>file, 'Traceback (most recent call last):' print >>file, 'Traceback (most recent call last):'
while tb and tb[0][0] in ("run.py", "rpc.py"): exclude = ("run.py", "rpc.py")
del tb[0] self.cleanup_traceback(tb, exclude)
while tb and tb[-1][0] in ("run.py", "rpc.py"):
del tb[-1]
for i in range(len(tb)):
fn, ln, nm, line = tb[i]
if not line and fn.startswith("<pyshell#"):
line = linecache.getline(fn, ln)
tb[i] = fn, ln, nm, line
traceback.print_list(tb, file=file) traceback.print_list(tb, file=file)
# try to reinstantiate the exception, stuff in the args: # try to reinstantiate the exception, stuff in the args:
try: try:
...@@ -425,6 +416,30 @@ class ModifiedInterpreter(InteractiveInterpreter): ...@@ -425,6 +416,30 @@ class ModifiedInterpreter(InteractiveInterpreter):
print >>file, errmsg, what print >>file, errmsg, what
self.tkconsole.endexecuting() self.tkconsole.endexecuting()
def cleanup_traceback(self, tb, exclude):
"Remove excluded traces from beginning/end of tb; get cached lines"
while tb:
for rpcfile in exclude:
if tb[0][0].count(rpcfile):
break # found an exclude, break for: and delete tb[0]
else:
break # no excludes, have left RPC code, break while:
del tb[0]
while tb:
for rpcfile in exclude:
if tb[-1][0].count(rpcfile):
break
else:
break
del tb[-1]
for i in range(len(tb)):
fn, ln, nm, line = tb[i]
if nm == '?':
nm = "-toplevel-"
if not line and fn.startswith("<pyshell#"):
line = linecache.getline(fn, ln)
tb[i] = fn, ln, nm, line
def kill_subprocess(self): def kill_subprocess(self):
clt = self.rpcclt clt = self.rpcclt
self.rpcclt = None self.rpcclt = None
......
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