diff options
author | ksaito <ksaito@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-03-05 15:40:36 +0000 |
---|---|---|
committer | ksaito <ksaito@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-03-05 15:40:36 +0000 |
commit | f353d89d8254a6b065cac4f77f1dc4760aad2b91 (patch) | |
tree | d33331925fdb770de55bc3826fb197e5eef2c721 /re.c | |
parent | 5770336f8be4ac6dbdff43587fda2b508d3786de (diff) | |
download | ruby-f353d89d8254a6b065cac4f77f1dc4760aad2b91.tar.gz |
* oniggnu.h: imported from Oniguruma library.
* oniguruma.h: ditto.
* regcomp.c: ditto.
* regenc.c: ditto.
* regenc.h: ditto.
* regerror.c: ditto.
* regex.c: ditto.
* regexec.c: ditto.
* reggnu.c: ditto.
* regint.h: ditto.
* regparse.c: ditto.
* regparse.h: ditto.
* ascii.c: ditto.
* euc_jp.c: ditto.
* sjis.c: ditto.
* utf8.c: ditto.
* MANIFEST: added Oniguruma files listed above.
* LEGAL: added Oniguruma license.
* regex.h: now includes oniggnu.h.
* re.c: applied Oniguruma patch.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@5896 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 're.c')
-rw-r--r-- | re.c | 34 |
1 files changed, 19 insertions, 15 deletions
@@ -483,11 +483,13 @@ rb_reg_to_s(re) goto again; } if (*ptr == ':' && ptr[len-1] == ')') { + int r; Regexp *rp; kcode_set_option(re); - rp = ALLOC(Regexp); - MEMZERO((char *)rp, Regexp, 1); - err = re_compile_pattern(++ptr, len -= 2, rp) != 0; + r = re_alloc_pattern(&rp); + if (r == 0) { + err = (re_compile_pattern(++ptr, len -= 2, rp, NULL) != 0); + } kcode_reset_option(); re_free_pattern(rp); } @@ -621,7 +623,8 @@ make_regexp(s, len, flags) int flags; { Regexp *rp; - char *err; + char err[ONIG_MAX_ERROR_MESSAGE_LEN]; + int r; /* Handle escaped characters first. */ @@ -630,17 +633,18 @@ make_regexp(s, len, flags) from that. */ - rp = ALLOC(Regexp); - MEMZERO((char *)rp, Regexp, 1); - rp->buffer = ALLOC_N(char, 16); - rp->allocated = 16; - rp->fastmap = ALLOC_N(char, 256); + r = re_alloc_pattern(&rp); + if (r) { + re_error_code_to_str((UChar* )err, r); + rb_reg_raise(s, len, err, 0); + } + if (flags) { rp->options = flags; } - err = re_compile_pattern(s, len, rp); + r = re_compile_pattern(s, len, rp, err); - if (err != NULL) { + if (r != 0) { rb_reg_raise(s, len, err, 0); } return rp; @@ -842,14 +846,14 @@ rb_reg_prepare_re(re) } if (need_recompile) { - char *err; + char err[ONIG_MAX_ERROR_MESSAGE_LEN]; + int r; if (FL_TEST(re, KCODE_FIXED)) kcode_set_option(re); rb_reg_check(re); - RREGEXP(re)->ptr->fastmap_accurate = 0; - err = re_compile_pattern(RREGEXP(re)->str, RREGEXP(re)->len, RREGEXP(re)->ptr); - if (err != NULL) { + r = re_recompile_pattern(RREGEXP(re)->str, RREGEXP(re)->len, RREGEXP(re)->ptr, err); + if (r != 0) { rb_reg_raise(RREGEXP(re)->str, RREGEXP(re)->len, err, re); } } |