Giraffe+ 0.5.17.313
前リリースからの変化
- メインウインドウが非表示かつフォーカスの状況でWin+Spaceしても状況が変化しなかったのを修正
- メソッドのデフォルトパラメータとレストパラメータに対応
- スクリプト実行時のシステムエラーで強制終了しないようにした
- Object.undef(_safe)を、親オブジェクトも参照するようにした
- String.to_Regexにオプション(r/body/optのopt)を置けるようにした
メインウインドウが非表示かつフォーカスの状況でWin+Spaceしても状況が変化しなかったのを修正
Script\settings\hotkey\ShowGiraffe.giraffeを、フォーカス時は隠して、それ以外は表示&フォーカス、というのから、非表示時orフォーカスが無いときは表示&フォーカス、それ以外は隠す。というふうにしました。
非表示&フォーカスという状況は、非表示時にホットキーでエラーが発生した場合なんかに、メッセージボックスが出て、それが消えた後に非表示のメインウインドウにフォーカスが移り、なります。
メソッドのデフォルトパラメータとレストパラメータに対応
デフォルトパラメータはx.= default_value、レストパラメータはx.@です。
`x y.= 0[x.+ y].invoke(1) //1 `x y.= 0[x.+ y].invoke(1 2) //3 `x y.@[x.+ (y.accumulate)].invoke(1) //1 `x y.@[x.+ (y.accumulate)].invoke(1 2) //3 `x y.@[x.+ (y.accumulate)].invoke(1 2 3) //6
テストはGiraffeScriptTest.cppのdefault_argument_testとrest_argument_testです。テストに表現されるものが仕様です。
普通の高級言語にはこの2つに加えてキーワードパラメータがありますが、とりあえず非対応です。
スクリプト実行時のシステムエラーで強制終了しないようにした
システムエラーというのは、アクセスバイオレーション等、OSから発せられる例外のことです。ちょっと試しに書いたスクリプトでNULLオブジェクトを参照してGiraffe+が強制終了するというのがよくあるので、その対策です。
http://www.codeproject.com/cpp/exception.aspを使って普通の例外化してます。http://blogs.msdn.com/larryosterman/archive/2004/09/10/228068.aspxにあるとおり、システムエラーの無効化というのは、OSの安全装置を殺すようなもので、無思慮にやると痛い目をみる代物ですが、スクリプトの実行はそれなりに分離されてるので、その中でのみそうすることにしました。
実装的にはgs::try_and_get_err_msgでやっていますので、この関数を経由しないスクリプトの実行は無関係です(Giraffe+のイベントは全て経由します。) それから、スタックトレースはC++の関数に対してやってもあまり意味が無かったので無効にしてます。
Object.undef(_safe)を、親オブジェクトも参照するようにした
undefを実装した時は、親に勝手に影響すると困るだろうと思ってましたが、実際に使ってみると不便に感じたので、無駄な安全性より眼前の利便性を選びました。defined?は親も見るのに、undefは見ないというのも変ですし。