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/