[前][次][番号順一覧][スレッド一覧]

ruby-changes:2023

From: ko1@a...
Date: 26 Sep 2007 05:12:39 +0900
Subject: [ruby-changes:2023] nobu - Ruby:r13514 (trunk): * parse.y (parser_yyerror): limit error message length.

nobu	2007-09-26 05:12:24 +0900 (Wed, 26 Sep 2007)

  New Revision: 13514

  Modified files:
    trunk/ChangeLog
    trunk/parse.y
    trunk/version.h

  Log:
    * parse.y (parser_yyerror): limit error message length.
      [ruby-dev:31848]


  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/version.h?r1=13514&r2=13513
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/parse.y?r1=13514&r2=13513
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=13514&r2=13513

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 13513)
+++ ChangeLog	(revision 13514)
@@ -1,3 +1,8 @@
+Wed Sep 26 05:12:17 2007  Nobuyoshi Nakada  <nobu@r...>
+
+	* parse.y (parser_yyerror): limit error message length.
+	  [ruby-dev:31848]
+
 Tue Sep 25 15:11:32 2007  Yukihiro Matsumoto  <matz@r...>
 
 	* io.c (io_ungetc): reallocate internal buffer if pushing data
Index: parse.y
===================================================================
--- parse.y	(revision 13513)
+++ parse.y	(revision 13514)
@@ -4572,6 +4572,7 @@
 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 @@
     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 @@
 	}
 	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));
Index: version.h
===================================================================
--- version.h	(revision 13513)
+++ version.h	(revision 13514)
@@ -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[];

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml

[前][次][番号順一覧][スレッド一覧]