SOURCES: ruby-oniguruma-258-186.patch (NEW) - added
aredridel
aredridel at pld-linux.org
Tue Feb 20 06:25:00 CET 2007
Author: aredridel Date: Tue Feb 20 05:25:00 2007 GMT
Module: SOURCES Tag: HEAD
---- Log message:
- added
---- Files affected:
SOURCES:
ruby-oniguruma-258-186.patch (NONE -> 1.1) (NEW)
---- Diffs:
================================================================
Index: SOURCES/ruby-oniguruma-258-186.patch
diff -u /dev/null SOURCES/ruby-oniguruma-258-186.patch:1.1
--- /dev/null Tue Feb 20 06:25:00 2007
+++ SOURCES/ruby-oniguruma-258-186.patch Tue Feb 20 06:24:55 2007
@@ -0,0 +1,338 @@
+diff -urN oniguruma-185/Makefile.in oniguruma/Makefile.in
+--- oniguruma-185/Makefile.in 2006-11-07 22:45:50.000000000 -0700
++++ oniguruma/Makefile.in 2007-02-19 22:21:41.000000000 -0700
+@@ -214,7 +214,10 @@
+ 185: cpruby
+ patch -d $(RUBYDIR) -p0 < $(srcdir)/ruby185.patch
+
+-18: 185
++186: cpruby
++ patch -d $(RUBYDIR) -p0 < $(srcdir)/ruby186.patch
++
++18: 186
+
+ # backup file suffix
+ SORIG = ruby_orig
+diff -urN oniguruma-185/ruby186.patch oniguruma/ruby186.patch
+--- oniguruma-185/ruby186.patch 1969-12-31 17:00:00.000000000 -0700
++++ oniguruma/ruby186.patch 2007-02-19 22:21:18.000000000 -0700
+@@ -0,0 +1,319 @@
++--- gc.c.ruby_orig 2006-08-25 17:12:46.000000000 +0900
+++++ gc.c 2006-11-08 14:11:06.000000000 +0900
++@@ -968,6 +968,7 @@ gc_mark_children(ptr, lev)
++ break;
++
++ case T_MATCH:
+++ gc_mark(obj->as.match.regexp, lev);
++ if (obj->as.match.str) {
++ ptr = obj->as.match.str;
++ goto again;
++--- re.h.ruby_orig 2003-03-04 23:12:19.000000000 +0900
+++++ re.h 2006-11-08 14:11:06.000000000 +0900
++@@ -24,13 +24,14 @@ struct RMatch {
++ struct RBasic basic;
++ VALUE str;
++ struct re_registers *regs;
+++ VALUE regexp; /* RRegexp */
++ };
++
++ #define RMATCH(obj) (R_CAST(RMatch)(obj))
++
++ VALUE rb_reg_regcomp _((VALUE));
++ long rb_reg_search _((VALUE, VALUE, long, long));
++-VALUE rb_reg_regsub _((VALUE, VALUE, struct re_registers *));
+++VALUE rb_reg_regsub _((VALUE, VALUE, struct re_registers *, VALUE));
++ long rb_reg_adjust_startpos _((VALUE, VALUE, long, long));
++ void rb_match_busy _((VALUE));
++ VALUE rb_reg_quote _((VALUE));
++--- re.c.orig 2007-02-12 16:01:19.000000000 -0700
+++++ re.c 2007-02-19 22:13:28.000000000 -0700
++@@ -487,9 +487,10 @@
++ if (*ptr == ':' && ptr[len-1] == ')') {
++ Regexp *rp;
++ rb_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);
+++ }
++ rb_kcode_reset_option();
++ re_free_pattern(rp);
++ }
++@@ -623,7 +624,9 @@
++ int flags;
++ {
++ Regexp *rp;
++- char *err;
+++ char err[ONIG_MAX_ERROR_MESSAGE_LEN];
+++ int r;
+++
++
++ /* Handle escaped characters first. */
++
++@@ -632,17 +635,18 @@
++ 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) {
++ re_free_pattern(rp);
++ rb_reg_raise(s, len, err, 0);
++ return 0;
++@@ -676,6 +680,7 @@
++
++ match->str = 0;
++ match->regs = 0;
+++ match->regexp = 0;
++ match->regs = ALLOC(struct re_registers);
++ MEMZERO(match->regs, struct re_registers, 1);
++
++@@ -693,6 +698,7 @@
++ rb_raise(rb_eTypeError, "wrong argument class");
++ }
++ RMATCH(obj)->str = RMATCH(orig)->str;
+++ RMATCH(obj)->regexp = RMATCH(orig)->regexp;
++ re_free_registers(RMATCH(obj)->regs);
++ RMATCH(obj)->regs->allocated = 0;
++ re_copy_registers(RMATCH(obj)->regs, RMATCH(orig)->regs);
++@@ -846,14 +852,15 @@
++ }
++
++ if (need_recompile) {
++- char *err;
+++ char err[ONIG_MAX_ERROR_MESSAGE_LEN];
+++ int r;
+++
++
++ if (FL_TEST(re, KCODE_FIXED))
++ rb_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);
++ }
++ }
++@@ -920,14 +927,16 @@
++ if (FL_TEST(re, KCODE_FIXED))
++ rb_kcode_reset_option();
++
++- if (result == -2) {
++- rb_reg_raise(RREGEXP(re)->str, RREGEXP(re)->len,
++- "Stack overflow in regexp matcher", re);
++- }
++-
++ if (result < 0) {
++- rb_backref_set(Qnil);
++- return result;
+++ if (result == ONIG_MISMATCH) {
+++ rb_backref_set(Qnil);
+++ return result;
+++ }
+++ else {
+++ char err[ONIG_MAX_ERROR_MESSAGE_LEN];
+++ re_error_code_to_str((UChar* )err, result);
+++ rb_reg_raise(RREGEXP(re)->str, RREGEXP(re)->len, err, 0);
+++ }
++ }
++
++ match = rb_backref_get();
++@@ -943,6 +952,7 @@
++
++ re_copy_registers(RMATCH(match)->regs, ®s);
++ RMATCH(match)->str = rb_str_new4(str);
+++ RMATCH(match)->regexp = re;
++ rb_backref_set(match);
++
++ OBJ_INFECT(match, re);
++@@ -1170,6 +1180,23 @@
++ }
++
++
+++static int
+++name_to_backref_number(struct re_registers *regs, VALUE regexp, const char* name, const char* name_end)
+++{
+++ int num;
+++
+++ num = onig_name_to_backref_number(RREGEXP(regexp)->ptr,
+++ (unsigned char* )name, (unsigned char* )name_end, regs);
+++ if (num >= 1) {
+++ return num;
+++ }
+++ else {
+++ VALUE s = rb_str_new(name, (long )(name_end - name));
+++ rb_raise(rb_eRuntimeError, "undefined group name reference: %s",
+++ StringValuePtr(s));
+++ }
+++}
+++
++ /*
++ * call-seq:
++ * mtch[i] => obj
++@@ -1199,10 +1226,37 @@
++
++ rb_scan_args(argc, argv, "11", &idx, &rest);
++
++- if (!NIL_P(rest) || !FIXNUM_P(idx) || FIX2INT(idx) < 0) {
++- return rb_ary_aref(argc, argv, match_to_a(match));
+++ if (NIL_P(rest)) {
+++ if (FIXNUM_P(idx)) {
+++ if (FIX2INT(idx) >= 0) {
+++ return rb_reg_nth_match(FIX2INT(idx), match);
+++ }
+++ }
+++ else {
+++ const char *p;
+++ int num;
+++
+++ switch (TYPE(idx)) {
+++ case T_SYMBOL:
+++ p = rb_id2name(SYM2ID(idx));
+++ goto name_to_backref;
+++ break;
+++ case T_STRING:
+++ p = StringValuePtr(idx);
+++
+++ name_to_backref:
+++ num = name_to_backref_number(RMATCH(match)->regs,
+++ RMATCH(match)->regexp, p, p + strlen(p));
+++ return rb_reg_nth_match(num, match);
+++ break;
+++
+++ default:
+++ break;
+++ }
+++ }
++ }
++- return rb_reg_nth_match(FIX2INT(idx), match);
+++
+++ return rb_ary_aref(argc, argv, match_to_a(match));
++ }
++
++ static VALUE match_entry _((VALUE, long));
++@@ -2001,12 +2055,14 @@
++ }
++
++ VALUE
++-rb_reg_regsub(str, src, regs)
+++rb_reg_regsub(str, src, regs, regexp)
++ VALUE str, src;
++ struct re_registers *regs;
+++ VALUE regexp;
++ {
++ VALUE val = 0;
++- char *p, *s, *e, c;
+++ char *p, *s, *e;
+++ unsigned char uc;
++ int no;
++
++ p = s = RSTRING(str)->ptr;
++@@ -2015,12 +2071,12 @@
++ while (s < e) {
++ char *ss = s;
++
++- c = *s++;
++- if (ismbchar(c)) {
++- s += mbclen(c) - 1;
+++ uc = (unsigned char )*s++;
+++ if (ismbchar(uc)) {
+++ s += mbclen(uc) - 1;
++ continue;
++ }
++- if (c != '\\' || s == e) continue;
+++ if (uc != '\\' || s == e) continue;
++
++ if (!val) {
++ val = rb_str_buf_new(ss-p);
++@@ -2030,13 +2086,38 @@
++ rb_str_buf_cat(val, p, ss-p);
++ }
++
++- c = *s++;
+++ uc = (unsigned char )*s++;
++ p = s;
++- switch (c) {
++- case '0': case '1': case '2': case '3': case '4':
+++ switch (uc) {
+++ case '1': case '2': case '3': case '4':
++ case '5': case '6': case '7': case '8': case '9':
++- no = c - '0';
+++ no = uc - '0';
++ break;
+++
+++ case 'k':
+++ if (s < e && *s == '<') {
+++ char *name, *name_end;
+++
+++ name_end = name = s + 1;
+++ while (name_end < e) {
+++ if (*name_end == '>') break;
+++ uc = (unsigned char)*name_end;
+++ name_end += mbclen(uc);
+++ }
+++ if (name_end < e) {
+++ no = name_to_backref_number(regs, regexp, name, name_end);
+++ p = s = name_end + 1;
+++ break;
+++ }
+++ else {
+++ rb_raise(rb_eRuntimeError, "invalid group name reference format");
+++ }
+++ }
+++
+++ rb_str_buf_cat(val, s-2, 2);
+++ continue;
+++
+++ case '0':
++ case '&':
++ no = 0;
++ break;
++@@ -2282,6 +2363,7 @@
++ rb_define_const(rb_cRegexp, "IGNORECASE", INT2FIX(RE_OPTION_IGNORECASE));
++ rb_define_const(rb_cRegexp, "EXTENDED", INT2FIX(RE_OPTION_EXTENDED));
++ rb_define_const(rb_cRegexp, "MULTILINE", INT2FIX(RE_OPTION_MULTILINE));
+++ rb_define_const(rb_cRegexp, "ENGINE", rb_obj_freeze(rb_str_new2("Oniguruma")));
++
++ rb_global_variable(®_cache);
++
++--- string.c.ruby_orig 2006-07-31 15:34:10.000000000 +0900
+++++ string.c 2006-11-08 14:11:06.000000000 +0900
++@@ -1977,7 +1977,7 @@ rb_str_sub_bang(argc, argv, str)
++ rb_backref_set(match);
++ }
++ else {
++- repl = rb_reg_regsub(repl, str, regs);
+++ repl = rb_reg_regsub(repl, str, regs, pat);
++ }
++ if (OBJ_TAINTED(repl)) tainted = 1;
++ plen = END(0) - BEG(0);
++@@ -2100,7 +2100,7 @@ str_gsub(argc, argv, str, bang)
++ rb_backref_set(match);
++ }
++ else {
++- val = rb_reg_regsub(repl, str, regs);
+++ val = rb_reg_regsub(repl, str, regs, pat);
++ }
++ if (OBJ_TAINTED(val)) tainted = 1;
++ len = (bp - buf) + (beg - offset) + RSTRING(val)->len + 3;
================================================================
More information about the pld-cvs-commit
mailing list