mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
merge revision(s) 13513:
* parse.y (yyerror): limit error message length. [ruby-dev:31848] * regex.c (re_mbc_startpos): separated from re_adjust_startpos. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_5@16786 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
4a8544e2be
commit
dcdffdb03b
4 changed files with 53 additions and 21 deletions
|
|
@ -1,3 +1,9 @@
|
|||
Tue Jun 3 16:13:40 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* 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@ruby-lang.org>
|
||||
|
||||
* gc.c (os_obj_of, os_each_obj): hide objects to be finalized.
|
||||
|
|
|
|||
29
parse.y
29
parse.y
|
|
@ -2521,7 +2521,9 @@ static int
|
|||
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 @@ yyerror(msg)
|
|||
|
||||
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';
|
||||
|
|
|
|||
37
regex.c
37
regex.c
|
|
@ -3108,6 +3108,28 @@ re_compile_fastmap(bufp)
|
|||
}
|
||||
|
||||
/* 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;
|
||||
|
|
@ -3121,20 +3143,7 @@ re_adjust_startpos(bufp, string, size, startpos, range)
|
|||
|
||||
/* 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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue