Kazuki Ohta
mover****@hct*****
2005年 8月 22日 (月) 16:12:10 JST
太田です。 確か第三引数が'(())の場合に無限ループに陥っていました。しかしtest-uim-utils.scm でそれが動く事が保証されたので、問題はSigScheme側に有るという事が分かりました。 なので、一旦util.scmに以前のSRFI Proceduresを復活させようと思います。調査有難 う御座いました。 #################################################################### # 以下気づいた事。 #################################################################### 後もう一つバグっぽいコードを見付けたのですが、rkに詳しい方がいらっしゃいましたら調査 お願い出来ますでしょうか? ubuntu% svn diff anthy.scm Index: anthy.scm =================================================================== --- anthy.scm (リビジョン1265) +++ anthy.scm (作業コピー @@ -473,8 +473,8 @@ res) (ustr-insert-elem! (anthy-context-raw-ustr ac) key-str)) - (if (not (rk-pending rkc) - (anthy-commit-raw ac)))))))))) + (if (not (rk-pending rkc)) + (anthy-commit-raw ac))))))))) (define anthy-has-preedit? (lambda (ac) あと、letにおいて値の指定が無いコードが散見されます。例えば、skk.scm内のこのコード。 677 |(define skk-begin-completion 678 | (lambda (sc) 679 | (let ((res)) こういったコードが他にもまだ有るので気づいた時に修正して頂けると助かります。 また、andでnull listのチェックをしている箇所もあります。例えば、 custom-im-list-as-choice-recにおいて、imがnilかどうかをandでチェックしています。 34 |;; ugettext should be performed higher layer 35 |(define custom-im-list-as-choice-rec 36 | (lambda (lst) 37 | (filter-map (lambda (im) 38 | (and im 今のところこういったコードがR5RS互換で無いように思われます。 > > 予想以上にSIOD依存が激しいようですね。基本的な方針には賛成なので > > すが、util.scmのSRFI-1互換関数を復活させるのには少し躊躇しています。 > > iterate_listsが空リストをうまく扱えていないような気がします。以下のような > > バグも有ったり。こう変更すると動かなくなるのですがね...という訳でtrunkの方 > > のiterate_listsをもう一度見直して頂けると嬉しいです。 > > こりゃ恥ずかしいバグですね。r1274で修正しておきました。どうもです。 > > しかし、この修正は以下のようなリストが1つだけのケースを高速化す > るだけの影響しか与えません。 > > (filter positive? '(0 -1 2 -3 4)) > > 元の(uim_scm_length(lists) == 1)のコードではこの高速実行パスがい > つでも無効になっていただけで、実行自体は正常でなければおかしいで > す。コードを見直してtest-uim-utils.scmにもテストを追加してみまし > たが、特におかしなところは見つかりませんでした。 > > 確実におかしな結果になるテストケースはありますか? > > > Index: uim-util.c > > ============================================================ > >======= --- uim-util.c (リビジョン1271) > > +++ uim-util.c (作業コピー > > @@ -508,7 +508,7 @@ > > uim_lisp elms, rest, rests, mapped, res, termp, pair, > > form; uim_bool single_listp; > > > > - single_listp = (uim_scm_length(lists) == 1) ? UIM_TRUE : > > UIM_FALSE; > > + single_listp = (uim_scm_c_int(uim_scm_length(lists) == > > 1)) ? UIM_TRUE : UIM_FALSE; > > res = seed; > > if (single_listp) { > > rest = uim_scm_car(lists); > > ------------------------------- > ヤマケン yamak****@bp***** > _______________________________________________ > Anthy-dev mailing list > Anthy****@lists***** > http://lists.sourceforge.jp/mailman/listinfo/anthy-dev -- ------------------------------------------------- Kazuki Ohta : mover****@hct***** -------------------------------------------------