ruby-changes:5287
From: shyouhei <ko1@a...>
Date: Tue, 3 Jun 2008 16:16:44 +0900 (JST)
Subject: [ruby-changes:5287] Ruby:r16786 (ruby_1_8_5): merge revision(s) 13513:
shyouhei 2008-06-03 16:15:05 +0900 (Tue, 03 Jun 2008)
New Revision: 16786
Modified files:
branches/ruby_1_8_5/ChangeLog
branches/ruby_1_8_5/parse.y
branches/ruby_1_8_5/regex.c
branches/ruby_1_8_5/version.h
Log:
merge revision(s) 13513:
* parse.y (yyerror): limit error message length. [ruby-dev:31848]
* regex.c (re_mbc_startpos): separated from re_adjust_startpos.
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8_5/regex.c?r1=16786&r2=16785&diff_format=u
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8_5/version.h?r1=16786&r2=16785&diff_format=u
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8_5/parse.y?r1=16786&r2=16785&diff_format=u
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8_5/ChangeLog?r1=16786&r2=16785&diff_format=u
Index: ruby_1_8_5/parse.y
===================================================================
--- ruby_1_8_5/parse.y (revision 16785)
+++ ruby_1_8_5/parse.y (revision 16786)
@@ -2521,7 +2521,9 @@
yyerror(msg)
const char *msg;
{
- char *p, *pe, *buf;
+ const int max_line_margin = 30;
+ const char *p, *pe;
+ char *buf;
int len, i;
rb_compile_error("%s", msg);
@@ -2540,17 +2542,32 @@
len = pe - p;
if (len > 4) {
+ char *p2;
+ const char *pre = "", *post = "";
+
+ if (len > max_line_margin * 2 + 10) {
+ int re_mbc_startpos _((const char *, int, int, int));
+ if ((len = lex_p - p) > max_line_margin) {
+ p = p + re_mbc_startpos(p, len, len - max_line_margin, 0);
+ pre = "...";
+ }
+ if ((len = pe - lex_p) > max_line_margin) {
+ pe = lex_p + re_mbc_startpos(lex_p, len, max_line_margin, 1);
+ post = "...";
+ }
+ len = pe - p;
+ }
buf = ALLOCA_N(char, len+2);
MEMCPY(buf, p, char, len);
buf[len] = '\0';
- rb_compile_error_append("%s", buf);
+ rb_compile_error_append("%s%s%s", pre, buf, post);
i = lex_p - p;
- p = buf; pe = p + len;
+ p2 = buf; pe = buf + len;
- while (p < pe) {
- if (*p != '\t') *p = ' ';
- p++;
+ while (p2 < pe) {
+ if (*p2 != '\t') *p2 = ' ';
+ p2++;
}
buf[i] = '^';
buf[i+1] = '\0';
Index: ruby_1_8_5/ChangeLog
===================================================================
--- ruby_1_8_5/ChangeLog (revision 16785)
+++ ruby_1_8_5/ChangeLog (revision 16786)
@@ -1,3 +1,9 @@
+Tue Jun 3 16:13:40 2008 Nobuyoshi Nakada <nobu@r...>
+
+ * parse.y (yyerror): limit error message length. [ruby-dev:31848]
+
+ * regex.c (re_mbc_startpos): separated from re_adjust_startpos.
+
Tue Jun 3 15:27:11 2008 Nobuyoshi Nakada <nobu@r...>
* gc.c (os_obj_of, os_each_obj): hide objects to be finalized.
Index: ruby_1_8_5/version.h
===================================================================
--- ruby_1_8_5/version.h (revision 16785)
+++ ruby_1_8_5/version.h (revision 16786)
@@ -2,7 +2,7 @@
#define RUBY_RELEASE_DATE "2008-06-03"
#define RUBY_VERSION_CODE 185
#define RUBY_RELEASE_CODE 20080603
-#define RUBY_PATCHLEVEL 123
+#define RUBY_PATCHLEVEL 124
#define RUBY_VERSION_MAJOR 1
#define RUBY_VERSION_MINOR 8
Index: ruby_1_8_5/regex.c
===================================================================
--- ruby_1_8_5/regex.c (revision 16785)
+++ ruby_1_8_5/regex.c (revision 16786)
@@ -3109,6 +3109,28 @@
/* adjust startpos value to the position between characters. */
int
+re_mbc_startpos(string, size, startpos, range)
+ const char *string;
+ int size, startpos, range;
+{
+ int i = mbc_startpos(string, startpos);
+
+ if (i < startpos) {
+ if (range > 0) {
+ startpos = i + mbclen(string[i]);
+ }
+ else {
+ int len = mbclen(string[i]);
+ if (i + len <= startpos)
+ startpos = i + len;
+ else
+ startpos = i;
+ }
+ }
+ return startpos;
+}
+
+int
re_adjust_startpos(bufp, string, size, startpos, range)
struct re_pattern_buffer *bufp;
const char *string;
@@ -3121,20 +3143,7 @@
/* Adjust startpos for mbc string */
if (current_mbctype && startpos>0 && !(bufp->options&RE_OPTIMIZE_BMATCH)) {
- int i = mbc_startpos(string, startpos);
-
- if (i < startpos) {
- if (range > 0) {
- startpos = i + mbclen(string[i]);
- }
- else {
- int len = mbclen(string[i]);
- if (i + len <= startpos)
- startpos = i + len;
- else
- startpos = i;
- }
- }
+ startpos = re_mbc_startpos(string, size, startpos, range);
}
return startpos;
}
--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/