From: "K.Kosako" Date: 2005-02-16T22:53:34+09:00 Subject: [ruby-dev:25705] Re: [Oniguruma 3.X] reggnu.c Kazuo Saito wrote: > 遅くなりましたが、作成してみました。動作は make test && make test-all、 > ruby -w -Ke test.rb で確認しました。 > 見よう見まねな部分もあるので、内容を確認して頂けると助かります。 > 大丈夫なようであればコミットします。 > > * gc.c, re.c: now ruby calls Oniguruma API directly, bypassing > GNU compatible APIs. これは私が最初にre.cを変更したときに 不完全なまま放置していたのが原因なのですが、 make_regexp()の中でonig_alloc_init()にflagsを 渡す必要があることに気づきました。 re_alloc_pattern()の使用を止めると、 reggnu.c全体が不要になると思います。 拡張ライブラリの中でGNU APIを利用している 可能性がないとは言えませんが、開発版なので なくしても良いのではないでしょうか? -- 小迫 --- re.c.x 2005-02-16 22:02:55.000000000 +0900 +++ re.c 2005-02-16 22:35:44.577182400 +0900 @@ -485,7 +485,10 @@ rb_reg_to_s(re) int r; Regexp *rp; kcode_set_option(re); - r = re_alloc_pattern(&rp); + r = onig_alloc_init(&rp, ONIG_OPTION_DEFAULT, + ONIGENC_AMBIGUOUS_MATCH_DEFAULT, + onigenc_get_default_encoding(), + OnigDefaultSyntax); if (r == 0) { ++ptr; len -= 2; @@ -637,15 +640,15 @@ make_regexp(s, len, flags, ce) from that. */ - r = re_alloc_pattern(&rp); + r = onig_alloc_init(&rp, flags, + ONIGENC_AMBIGUOUS_MATCH_DEFAULT, + onigenc_get_default_encoding(), + OnigDefaultSyntax); if (r) { onig_error_code_to_str((UChar* )err, r); rb_reg_raise(s, len, err, 0, ce); } - if (flags) { - rp->options = flags; - } r = onig_compile(rp, (UChar* )s, (UChar* )(s + len), &einfo); if (r != 0) {