Jun 06, 2008 - IronPython2.0B2のScriptDomainManager.SetCommandDispatcherを復活させる (2)
前回の記事のパッチでは、コンソールで入力したスクリプトで例外が発生するとipy.exeが異常終了してしまうので、try-catchするように修正してみました。
diff -r -c -P PythonCommandLine.cs.orig PythonCommandLine.cs *** PythonCommandLine.cs.orig Fri Apr 25 12:04:24 2008 --- PythonCommandLine.cs Thu Jun 05 09:04:11 2008 *************** *** 13,18 **** --- 13,20 ---- * * ***************************************************************************/ + #define COMMANDDISPATCHER_PATCH + using System; using System.IO; using System.Reflection; *************** *** 331,337 **** --- 333,360 ---- PythonCompilerOptions pco = (PythonCompilerOptions)Language.GetCompilerOptions(Scope); pco.Module |= ModuleOptions.ExecOrEvalCode; + #if COMMANDDISPATCHER_PATCH + ScriptDomainManager domainManager = PythonContext.DomainManager; + if ( domainManager.GetCommandDispatcher() != null ) { + Exception excep = null; + CallTarget0 run_code = delegate() { + try { + su.Compile(pco, ErrorSink).Run(Scope); + } catch( Exception excep_ ) { + excep = excep_; + } + return null; + }; + domainManager.DispatchCommand( run_code ); + if ( excep != null ) { + throw excep; + } + } else { + su.Compile(pco, ErrorSink).Run(Scope); + } + #else su.Compile(pco, ErrorSink).Run(Scope); + #endif return null; }
まだ2.0B3出てないなあ...