summaryrefslogtreecommitdiff
path: root/re.c
diff options
context:
space:
mode:
authorksaito <ksaito@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-03-05 15:40:36 +0000
committerksaito <ksaito@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-03-05 15:40:36 +0000
commitf353d89d8254a6b065cac4f77f1dc4760aad2b91 (patch)
treed33331925fdb770de55bc3826fb197e5eef2c721 /re.c
parent5770336f8be4ac6dbdff43587fda2b508d3786de (diff)
* 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.c34
1 files changed, 19 insertions, 15 deletions
diff --git a/re.c b/re.c
index cc2b5e16b6..bbf7f5ef41 100644
--- a/re.c
+++ b/re.c
@@ -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);
}
}