diff options
| author | Kurt B. Kaiser <kbk@shore.net> | 2002-12-24 00:57:22 +0000 | 
|---|---|---|
| committer | Kurt B. Kaiser <kbk@shore.net> | 2002-12-24 00:57:22 +0000 | 
| commit | 11220fad1d7eee24f1d9809c6d5023875099cb37 (patch) | |
| tree | 9803a7eacf67b20fc0d7fc17cde1f74659fa12d5 /Lib/idlelib/PyShell.py | |
| parent | d375abeb1af5bdca776d626dcd3ddf0b4c0139ac (diff) | |
| download | cpython-git-11220fad1d7eee24f1d9809c6d5023875099cb37.tar.gz | |
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
Diffstat (limited to 'Lib/idlelib/PyShell.py')
| -rw-r--r-- | Lib/idlelib/PyShell.py | 39 | 
1 files changed, 27 insertions, 12 deletions
diff --git a/Lib/idlelib/PyShell.py b/Lib/idlelib/PyShell.py index ffdde4ee85..d89802c5e6 100644 --- a/Lib/idlelib/PyShell.py +++ b/Lib/idlelib/PyShell.py @@ -12,8 +12,6 @@ import traceback  import types  import exceptions -import boolcheck -  import linecache  from code import InteractiveInterpreter @@ -217,7 +215,7 @@ class PyShellEditorWindow(EditorWindow):                  lineno += 1          return lines -# XXX 13 Dec 2020 KBK Not used currently +# XXX 13 Dec 2002 KBK Not used currently  #    def saved_change_hook(self):  #        "Extend base method - clear breaks if module is modified"  #        if not self.get_saved(): @@ -395,15 +393,8 @@ class ModifiedInterpreter(InteractiveInterpreter):              elif how == "EXCEPTION":                  mod, name, args, tb = what                  print >>file, 'Traceback (most recent call last):' -                while tb and tb[0][0] in ("run.py", "rpc.py"): -                    del tb[0] -                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 +                exclude = ("run.py", "rpc.py") +                self.cleanup_traceback(tb, exclude)                  traceback.print_list(tb, file=file)                  # try to reinstantiate the exception, stuff in the args:                  try: @@ -425,6 +416,30 @@ class ModifiedInterpreter(InteractiveInterpreter):                  print >>file, errmsg, what              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):          clt = self.rpcclt          self.rpcclt = None  | 
