From 5a5a86cc527946fb40f241377179b0723f2348db Mon Sep 17 00:00:00 2001 From: nobu Date: Sun, 11 Nov 2012 06:38:17 +0000 Subject: [PATCH] hash.c: refine error messages * hash.c (rb_hash_s_create): refine error messages. * error.c (rb_builtin_class_name): share for above. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37620 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 6 ++++++ common.mk | 2 +- error.c | 5 +++-- hash.c | 8 ++++++-- internal.h | 1 + 5 files changed, 17 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5c9e9f3482..49b1a8976b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Sun Nov 11 15:38:14 2012 Nobuyoshi Nakada + + * hash.c (rb_hash_s_create): refine error messages. + + * error.c (rb_builtin_class_name): share for above. + Sun Nov 11 15:12:18 2012 Shugo Maeda * eval.c (top_using): remove Kernel#using, and add main.using instead. diff --git a/common.mk b/common.mk index 1c7efbb5ae..d43c2816c6 100644 --- a/common.mk +++ b/common.mk @@ -662,7 +662,7 @@ gc.$(OBJEXT): {$(VPATH)}gc.c $(RUBY_H_INCLUDES) {$(VPATH)}re.h \ {$(VPATH)}debug.h {$(VPATH)}internal.h {$(VPATH)}constant.h \ {$(VPATH)}thread.h hash.$(OBJEXT): {$(VPATH)}hash.c $(RUBY_H_INCLUDES) {$(VPATH)}util.h \ - $(ENCODING_H_INCLUDES) + $(ENCODING_H_INCLUDES) {$(VPATH)}internal.h inits.$(OBJEXT): {$(VPATH)}inits.c $(RUBY_H_INCLUDES) \ {$(VPATH)}internal.h io.$(OBJEXT): {$(VPATH)}io.c $(RUBY_H_INCLUDES) {$(VPATH)}io.h \ diff --git a/error.c b/error.c index 5bfa2216eb..606b25bc50 100644 --- a/error.c +++ b/error.c @@ -432,8 +432,9 @@ rb_builtin_type_name(int t) return 0; } -static const char * -builtin_class_name(VALUE x) +#define builtin_class_name rb_builtin_class_name +const char * +rb_builtin_class_name(VALUE x) { const char *etype; diff --git a/hash.c b/hash.c index b8acbc8491..c3e5931be0 100644 --- a/hash.c +++ b/hash.c @@ -15,6 +15,7 @@ #include "ruby/st.h" #include "ruby/util.h" #include "ruby/encoding.h" +#include "internal.h" #include #ifdef __APPLE__ @@ -392,11 +393,14 @@ rb_hash_s_create(int argc, VALUE *argv, VALUE klass) hash = hash_alloc(klass); for (i = 0; i < RARRAY_LEN(tmp); ++i) { - VALUE v = rb_check_array_type(RARRAY_PTR(tmp)[i]); + VALUE e = RARRAY_PTR(tmp)[i]; + VALUE v = rb_check_array_type(e); VALUE key, val = Qnil; if (NIL_P(v)) { - rb_raise(rb_eArgError, "wrong element type (expected array)"); + rb_raise(rb_eArgError, "wrong element type %s at %ld (expected array)", + rb_builtin_class_name(e), i); + } switch (RARRAY_LEN(v)) { default: diff --git a/internal.h b/internal.h index cb688f1897..f925f94825 100644 --- a/internal.h +++ b/internal.h @@ -95,6 +95,7 @@ NORETURN(PRINTF_ARGS(void rb_compile_bug(const char*, int, const char*, ...), 3, VALUE rb_check_backtrace(VALUE); NORETURN(void rb_async_bug_errno(const char *,int)); const char *rb_builtin_type_name(int t); +const char *rb_builtin_class_name(VALUE x); /* eval_error.c */ void ruby_error_print(void);