diff options
Diffstat (limited to 'Lib/idlelib/ScriptBinding.py')
-rw-r--r-- | Lib/idlelib/ScriptBinding.py | 40 |
1 files changed, 23 insertions, 17 deletions
diff --git a/Lib/idlelib/ScriptBinding.py b/Lib/idlelib/ScriptBinding.py index a1d937b..8ad02a4 100644 --- a/Lib/idlelib/ScriptBinding.py +++ b/Lib/idlelib/ScriptBinding.py @@ -82,6 +82,9 @@ class ScriptBinding: return True def checksyntax(self, filename): + self.shell = shell = self.flist.open_shell() + saved_stream = shell.get_warning_stream() + shell.set_warning_stream(shell.stderr) f = open(filename, 'r') source = f.read() f.close() @@ -92,20 +95,23 @@ class ScriptBinding: text = self.editwin.text text.tag_remove("ERROR", "1.0", "end") try: - # If successful, return the compiled code - return compile(source, filename, "exec") - except (SyntaxError, OverflowError), err: try: - msg, (errorfilename, lineno, offset, line) = err - if not errorfilename: - err.args = msg, (filename, lineno, offset, line) - err.filename = filename - self.colorize_syntax_error(msg, lineno, offset) - except: - msg = "*** " + str(err) - self.errorbox("Syntax error", - "There's an error in your program:\n" + msg) - return False + # If successful, return the compiled code + return compile(source, filename, "exec") + except (SyntaxError, OverflowError), err: + try: + msg, (errorfilename, lineno, offset, line) = err + if not errorfilename: + err.args = msg, (filename, lineno, offset, line) + err.filename = filename + self.colorize_syntax_error(msg, lineno, offset) + except: + msg = "*** " + str(err) + self.errorbox("Syntax error", + "There's an error in your program:\n" + msg) + return False + finally: + shell.set_warning_stream(saved_stream) def colorize_syntax_error(self, msg, lineno, offset): text = self.editwin.text @@ -135,10 +141,7 @@ class ScriptBinding: code = self.checksyntax(filename) if not code: return - flist = self.editwin.flist - shell = flist.open_shell() - if not shell: - return # couldn't open the shell + shell = self.shell interp = shell.interp if PyShell.use_subprocess: shell.restart_shell() @@ -156,6 +159,9 @@ class ScriptBinding: del _filename, _sys, _basename, _os \n""" % (filename, dirname)) interp.prepend_syspath(filename) + # XXX KBK 03Jul04 When run w/o subprocess, runtime warnings still + # go to __stderr__. With subprocess, they go to the shell. + # Need to change streams in PyShell.ModifiedInterpreter. interp.runcode(code) def getfilename(self): |