aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--parse.y18
-rw-r--r--version.h6
3 files changed, 24 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index 04dfe6e135..cecbe4fd37 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Wed Sep 26 05:12:17 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (parser_yyerror): limit error message length.
+ [ruby-dev:31848]
+
Tue Sep 25 15:11:32 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
* io.c (io_ungetc): reallocate internal buffer if pushing data
diff --git a/parse.y b/parse.y
index 4511a64e15..1b28727bea 100644
--- a/parse.y
+++ b/parse.y
@@ -4572,6 +4572,7 @@ static int
parser_yyerror(struct parser_params *parser, const char *msg)
{
#ifndef RIPPER
+ const int max_line_margin = 30;
const char *p, *pe;
char *buf;
int len, i;
@@ -4593,10 +4594,23 @@ parser_yyerror(struct parser_params *parser, const char *msg)
len = pe - p;
if (len > 4) {
char *p2;
+ const char *pre = "", *post = "";
+
+ if (len > max_line_margin * 2 + 10) {
+ if (lex_p - p > max_line_margin) {
+ p = rb_enc_prev_char(p, lex_p - max_line_margin, rb_enc_get(lex_lastline));
+ pre = "...";
+ }
+ if (pe - lex_p > max_line_margin) {
+ pe = rb_enc_prev_char(lex_p, lex_p + max_line_margin, rb_enc_get(lex_lastline));
+ 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;
p2 = buf; pe = buf + len;
@@ -4607,7 +4621,7 @@ parser_yyerror(struct parser_params *parser, const char *msg)
}
buf[i] = '^';
buf[i+1] = '\0';
- rb_compile_error_append("%s", buf);
+ rb_compile_error_append("%s%s", pre, buf);
}
#else
dispatch1(parse_error, STR_NEW2(msg));
diff --git a/version.h b/version.h
index d1bf7e1739..dfed55f11b 100644
--- a/version.h
+++ b/version.h
@@ -1,7 +1,7 @@
#define RUBY_VERSION "1.9.0"
-#define RUBY_RELEASE_DATE "2007-09-25"
+#define RUBY_RELEASE_DATE "2007-09-26"
#define RUBY_VERSION_CODE 190
-#define RUBY_RELEASE_CODE 20070925
+#define RUBY_RELEASE_CODE 20070926
#define RUBY_PATCHLEVEL 0
#define RUBY_VERSION_MAJOR 1
@@ -9,7 +9,7 @@
#define RUBY_VERSION_TEENY 0
#define RUBY_RELEASE_YEAR 2007
#define RUBY_RELEASE_MONTH 9
-#define RUBY_RELEASE_DAY 25
+#define RUBY_RELEASE_DAY 26
#ifdef RUBY_EXTERN
RUBY_EXTERN const char ruby_version[];