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

ruby-changes:15742

From: marcandre <ko1@a...>
Date: Sat, 8 May 2010 13:50:10 +0900 (JST)
Subject: [ruby-changes:15742] Ruby:r27670 (trunk): * array.c (rb_ary_fetch, rb_ary_splice, rb_ary_store): Improve IndexError

marcandre	2010-05-08 13:49:53 +0900 (Sat, 08 May 2010)

  New Revision: 27670

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=27670

  Log:
    * array.c (rb_ary_fetch, rb_ary_splice, rb_ary_store): Improve IndexError
      messages [ruby-core:28394]
    
    * hash.c (rb_hash_fetch_m): Improve KeyError message

  Modified files:
    trunk/ChangeLog
    trunk/array.c
    trunk/hash.c

Index: array.c
===================================================================
--- array.c	(revision 27669)
+++ array.c	(revision 27670)
@@ -616,8 +616,8 @@
     if (idx < 0) {
 	idx += RARRAY_LEN(ary);
 	if (idx < 0) {
-	    rb_raise(rb_eIndexError, "index %ld out of array",
-		     idx - RARRAY_LEN(ary));
+	    rb_raise(rb_eIndexError, "index %ld too small for array; minimum: %ld",
+		     idx - RARRAY_LEN(ary), -RARRAY_LEN(ary));
 	}
     }
     else if (idx >= ARY_MAX_SIZE) {
@@ -1133,7 +1133,8 @@
     if (idx < 0 || RARRAY_LEN(ary) <= idx) {
 	if (block_given) return rb_yield(pos);
 	if (argc == 1) {
-	    rb_raise(rb_eIndexError, "index %ld out of array", idx);
+	    rb_raise(rb_eIndexError, "index %ld outside of array bounds: %ld...%ld",
+			idx - (idx < 0 ? RARRAY_LEN(ary) : 0), -RARRAY_LEN(ary), RARRAY_LEN(ary));
 	}
 	return ifnone;
     }
@@ -1246,8 +1247,8 @@
     if (beg < 0) {
 	beg += RARRAY_LEN(ary);
 	if (beg < 0) {
-	    beg -= RARRAY_LEN(ary);
-	    rb_raise(rb_eIndexError, "index %ld out of array", beg);
+	    rb_raise(rb_eIndexError, "index %ld too small for array; minimum: %ld",
+		     beg - RARRAY_LEN(ary), -RARRAY_LEN(ary));
 	}
     }
     if (RARRAY_LEN(ary) < len || RARRAY_LEN(ary) < beg + len) {
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 27669)
+++ ChangeLog	(revision 27670)
@@ -1,3 +1,11 @@
+Sat May  8 13:48:31 2010  Marc-Andre Lafortune  <ruby-core@m...>
+
+	* array.c (rb_ary_fetch, rb_ary_splice, rb_ary_store): Improve
+	  IndexError
+	  messages [ruby-core:28394]
+	
+	* hash.c (rb_hash_fetch_m): Improve KeyError message
+
 Sat May  8 13:11:28 2010  Nobuyoshi Nakada  <nobu@r...>
 
 	* lib/rubygems/user_interaction.rb (Gem::StreamUI#ask_for_password):
Index: hash.c
===================================================================
--- hash.c	(revision 27669)
+++ hash.c	(revision 27670)
@@ -570,7 +570,11 @@
     if (!RHASH(hash)->ntbl || !st_lookup(RHASH(hash)->ntbl, key, &val)) {
 	if (block_given) return rb_yield(key);
 	if (argc == 1) {
-	    rb_raise(rb_eKeyError, "key not found");
+	    VALUE desc = rb_protect(rb_inspect, key, 0);
+	    if (NIL_P(desc) || RSTRING_LEN(desc) > 65) {
+		desc = rb_any_to_s(key);
+	    }
+	    rb_raise(rb_eKeyError, "key not found: %s", RSTRING_PTR(desc));
 	}
 	return if_none;
     }

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

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