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出てないなあ...