読者です 読者をやめる 読者になる 読者になる

鬼車は本当に wide character 方式か

Ruby や鬼車の stateful encoding の「鬼車も wide character 方式」だけど、なんか違うような気がしてきたので見直してみたら全然違いました。鬼車においてコードポイントを格納している OnigCodePoint が実際に現れるのは最終的に正規表現とマッチさせる時で、それまではずっと UChar。つまり、wchar_tなregex(3)が内部で動くのと全然違う。

鬼車の正規表現マッチの本体は regexec.c の match_at なんですが、

static int
match_at(regex_t* reg, const UChar* str, const UChar* end,
#ifdef USE_MATCH_RANGE_MUST_BE_INSIDE_OF_SPECIFIED_RANGE
const UChar* right_range,
#endif
const UChar* sstart, UChar* sprev, OnigMatchArg* msa)
{

どうみても unsigned char 単位です、本当に(ry