diff options
author | naruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-01-06 07:06:22 +0000 |
---|---|---|
committer | naruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-01-06 07:06:22 +0000 |
commit | e945532350dd070a6a6c9e2524e088f63dbdd83d (patch) | |
tree | 38d5d47ba5f052a812f5aae41e2848c08b274b5e /object.c | |
parent | 4729382e4efa9cf464ad51dcfc31c7be03ea466b (diff) | |
download | ruby-e945532350dd070a6a6c9e2524e088f63dbdd83d.tar.gz |
* object.c (rb_inspect): raises Encoding::CompatibilityError if the
result is incompatible with the default external encoding.
[ruby-core:41931] [Bug #5848]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34218 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'object.c')
-rw-r--r-- | object.c | 38 |
1 files changed, 32 insertions, 6 deletions
@@ -14,6 +14,7 @@ #include "ruby/ruby.h" #include "ruby/st.h" #include "ruby/util.h" +#include "ruby/encoding.h" #include <stdio.h> #include <errno.h> #include <ctype.h> @@ -370,7 +371,9 @@ rb_any_to_s(VALUE obj) VALUE rb_inspect(VALUE obj) { - return rb_obj_as_string(rb_funcall(obj, id_inspect, 0, 0)); + VALUE s = rb_obj_as_string(rb_funcall(obj, id_inspect, 0, 0)); + rb_enc_check(rb_enc_default_external(), s); + return s; } static int @@ -419,14 +422,37 @@ inspect_obj(VALUE obj, VALUE str, int recur) * call-seq: * obj.inspect -> string * - * Returns a string containing a human-readable representation of - * <i>obj</i>. If not overridden and no instance variables, uses the - * <code>to_s</code> method to generate the string. - * <i>obj</i>. If not overridden, uses the <code>to_s</code> method to - * generate the string. + * Returns a string containing a human-readable representation of <i>obj</i>. + * By default, if the <i>obj</i> has instance variables, show the class name + * and instance variable details which is the list of the name and the result + * of <i>inspect</i> method for each instance variables. + * Otherwise uses the <i>to_s</i> method to generate the string. + * If the <i>to_s</i> mthoed is overridden, uses it. + * User defined classes should override this method to make better + * representation of <i>obj</i>. When overriding this method, it should + * return a string whose encoding is compatible with the default external + * encoding. * * [ 1, 2, 3..4, 'five' ].inspect #=> "[1, 2, 3..4, \"five\"]" * Time.new.inspect #=> "2008-03-08 19:43:39 +0900" + * + * class Foo + * end + * Foo.new.inspect #=> "#<Foo:0x0300c868>" + * + * class Bar + * def initialize + * @bar = 1 + * end + * end + * Bar.new.inspect #=> "#<Bar:0x0300c868 @bar=1>" + * + * class Baz + * def to_s + * "baz" + * end + * end + * Baz.new.inspect #=> "baz" */ static VALUE |