From: matz@... (Yukihiro Matsumoto) Date: 1998-06-03T16:05:43+09:00 Subject: [ruby-dev:2804] Re: convert Perl's t/regexp.t to ruby まつもと ゆきひろです In message "[ruby-dev:2803] Re: convert Perl's t/regexp.t to ruby" on 98/06/03, Inaba Hiroto writes: |ちょっとソースを読んでみました。それで気がついた事を書きます。 |その前に、示してもらったパッチですが、 |このパッチをあてると、reg_raiseが呼ばれるようになりましたが、その |reg_raiseで | | if (rb_in_eval) | Raise(eRegxpError, "%s: %s", err, RSTRING(desc)->ptr); | else | Error("%s: %s", err, RSTRING(desc)->ptr); | |としています。スクリプトを普通に実行している状況ではrb_in_evalは0になっ |ているようで、単にエラーメッセージを表示する事しかしません。 ですね.これはrb_in_evalを参照しているのが間違いで,本当は rb_in_compileを参照する必要があります. --- re.c 1998/06/02 10:05:30 1.1.1.2.2.24 +++ re.c 1998/06/03 07:04:47 @@ -171,3 +171,3 @@ -extern int rb_in_eval; +extern int rb_in_compile; @@ -264,6 +264,6 @@ - if (rb_in_eval) - Raise(eRegxpError, "%s: %s", err, RSTRING(desc)->ptr); - else + if (rb_in_compile) Error("%s: %s", err, RSTRING(desc)->ptr); + else + Raise(eRegxpError, "%s: %s", err, RSTRING(desc)->ptr); } |それではソースを見て気がついた事ですが、スタックサイズのチェックという |のはregex.cにあるPUSH_FAILURE_POINTマクロ中の | | if (len > re_max_failures * MAX_NUM_FAILURE_ITEMS) \ | |だと思えます。この変数re_max_failuresの初期値は2000になっています。 |この変数の値をrubyスクリプトからassignできるようにする事には問題がある |でしょうか?(スレッド?) どうなんでしょう.問題と言えば * 現在使っているGNU regexに強く依存する仕様であり,なんか 実装をさらけだしているようで気分が良くない * なんかこのチェックそのものが必要ないような気が…. という点でしょうか.この変数はここでのチェックでしか使ってい ませんし,私としてはこのチェックを外そうかと考えているので. |ところで、本題ではありませんが、regex.cを読むと、実はrubyはPOSIXの |character classをサポートしているのですね。 | | % ruby -e '"+-123abcxyz" =~ /[[:xdigit:]]+/ and p $&' | "123abc" | |マニュアルには触れられてないのですが。 ええ.マニュアルに追加するのをすっかり忘れてました. まつもと ゆきひろ /:|) p.s. 反応が鈍いのはfj.comp.oopsにかまけているせいか,それとも 「ぽけぴか」をやっと手に入れて歩き回っているせいか ^^;;; # 原稿書けよ > 自分