ruby-changes:24650
From: naruse <ko1@a...>
Date: Wed, 15 Aug 2012 10:09:24 +0900 (JST)
Subject: [ruby-changes:24650] naruse:r36701 (trunk): Revert r36699 and r36700. [Feature #6130]
naruse 2012-08-15 10:09:10 +0900 (Wed, 15 Aug 2012) New Revision: 36701 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=36701 Log: Revert r36699 and r36700. [Feature #6130] Revert "Kernel#inspect: improve consistency and do not call #to_s." Revert "update PP with recent Kernel#inspect change. Patch by Yusuke Endoh." r36699 cause test-all failure on test/drb/test_drb.rb and test/drb/test_drbssl.rb. Run test-all before commit. Moreover its ChangeLog formst is wrong: see CommitterHowto https://bugs.ruby-lang.org/projects/ruby/wiki/CommitterHowto#ChangeLog Modified files: trunk/ChangeLog trunk/bignum.c trunk/io.c trunk/lib/pp.rb trunk/numeric.c trunk/object.c trunk/proc.c trunk/test/ruby/test_object.rb trunk/test/test_pp.rb trunk/vm.c Index: ChangeLog =================================================================== --- ChangeLog (revision 36700) +++ ChangeLog (revision 36701) @@ -1,26 +1,3 @@ -Tue Aug 14 19:19:10 2012 Benoit Daloze <eregontp@g...> - - update PP with recent Kernel#inspect change. Patch by Yusuke Endoh. - - * lib/pp.rb (class PP): do not call #to_s anymore, as #inspect no more does. - * test/test_pp.rb (class PPInspectTest): remove related assertion. - [ruby-core:43238][Feature #6130] - -Tue Aug 14 19:09:38 2012 Benoit Daloze <eregontp@g...> - - Kernel#inspect: improve consistency and do not call #to_s. - - A class can now benefit from the nice default #inspect even if it - defines #to_s. Also, there is no more unexpected change in #inspect - result. Internal structures have been adapted so they don't rely - on the removed behavior (#inspect calling overridden #to_s). - - * object.c (rb_obj_inspect): Kernel#inspect: do not call #to_s. - * test/ruby/test_object.rb (test_inspect): add tests for Kernel#inspect. - * bignum.c, io.c, numeric.c, object.c, proc.c, vm.c (Init_*): - alias #inspect to #to_s where it was expected. - [ruby-core:43238][Feature #6130] - Tue Aug 14 16:25:46 2012 Shugo Maeda <shugo@r...> * test/erb/test_erb.rb (test_html_escape): add assertions for the Index: object.c =================================================================== --- object.c (revision 36700) +++ object.c (revision 36701) @@ -450,8 +450,11 @@ * obj.inspect -> string * * Returns a string containing a human-readable representation of <i>obj</i>. - * By default, show the class name and the list of the instance variables and - * their values (by calling #inspect on each of them). + * 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 variable. + * Otherwise uses the <i>to_s</i> method to generate the string. + * If the <i>to_s</i> method 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 @@ -476,21 +479,35 @@ * "baz" * end * end - * Baz.new.inspect #=> "#<Baz:0x0300c868>" + * Baz.new.inspect #=> "baz" */ static VALUE rb_obj_inspect(VALUE obj) { - if (rb_ivar_count(obj) > 0) { - VALUE str; - const char *c = rb_obj_classname(obj); + if (RB_TYPE_P(obj, T_OBJECT) && rb_obj_basic_to_s_p(obj)) { + int has_ivar = 0; + VALUE *ptr = ROBJECT_IVPTR(obj); + long len = ROBJECT_NUMIV(obj); + long i; - str = rb_sprintf("-<%s:%p", c, (void*)obj); - return rb_exec_recursive(inspect_obj, obj, str); - } else { + for (i = 0; i < len; i++) { + if (ptr[i] != Qundef) { + has_ivar = 1; + break; + } + } + + if (has_ivar) { + VALUE str; + const char *c = rb_obj_classname(obj); + + str = rb_sprintf("-<%s:%p", c, (void*)obj); + return rb_exec_recursive(inspect_obj, obj, str); + } return rb_any_to_s(obj); } + return rb_funcall(obj, rb_intern("to_s"), 0, 0); } static VALUE @@ -2934,7 +2951,6 @@ rb_define_method(rb_cModule, ">=", rb_mod_ge, 1); rb_define_method(rb_cModule, "initialize_copy", rb_mod_init_copy, 1); /* in class.c */ rb_define_method(rb_cModule, "to_s", rb_mod_to_s, 0); - rb_define_alias(rb_cModule, "inspect", "to_s"); rb_define_method(rb_cModule, "included_modules", rb_mod_included_modules, 0); /* in class.c */ rb_define_method(rb_cModule, "include?", rb_mod_include_p, 1); /* in class.c */ rb_define_method(rb_cModule, "name", rb_mod_name, 0); /* in variable.c */ @@ -2987,7 +3003,6 @@ rb_cTrueClass = rb_define_class("TrueClass", rb_cObject); rb_define_method(rb_cTrueClass, "to_s", true_to_s, 0); - rb_define_alias(rb_cTrueClass, "inspect", "to_s"); rb_define_method(rb_cTrueClass, "&", true_and, 1); rb_define_method(rb_cTrueClass, "|", true_or, 1); rb_define_method(rb_cTrueClass, "^", true_xor, 1); @@ -3000,7 +3015,6 @@ rb_cFalseClass = rb_define_class("FalseClass", rb_cObject); rb_define_method(rb_cFalseClass, "to_s", false_to_s, 0); - rb_define_alias(rb_cFalseClass, "inspect", "to_s"); rb_define_method(rb_cFalseClass, "&", false_and, 1); rb_define_method(rb_cFalseClass, "|", false_or, 1); rb_define_method(rb_cFalseClass, "^", false_xor, 1); Index: io.c =================================================================== --- io.c (revision 36700) +++ io.c (revision 36701) @@ -11505,7 +11505,6 @@ rb_define_method(rb_cARGF, "initialize", argf_initialize, -2); rb_define_method(rb_cARGF, "initialize_copy", argf_initialize_copy, 1); rb_define_method(rb_cARGF, "to_s", argf_to_s, 0); - rb_define_alias(rb_cARGF, "inspect", "to_s"); rb_define_method(rb_cARGF, "argv", argf_argv, 0); rb_define_method(rb_cARGF, "fileno", argf_fileno, 0); Index: lib/pp.rb =================================================================== --- lib/pp.rb (revision 36700) +++ lib/pp.rb (revision 36701) @@ -265,7 +265,8 @@ module ObjectMixin # 1. specific pretty_print # 2. specific inspect - # 3. generic pretty_print + # 3. specific to_s + # 4. generic pretty_print # A default pretty printing method for general objects. # It calls #pretty_print_instance_variables to list instance variables. @@ -282,10 +283,18 @@ inspect_method = method_method.call(:inspect) rescue NameError end + begin + to_s_method = method_method.call(:to_s) + rescue NameError + end if inspect_method && /\(Kernel\)#/ !~ inspect_method.inspect q.text self.inspect elsif !inspect_method && self.respond_to?(:inspect) q.text self.inspect + elsif to_s_method && /\(Kernel\)#/ !~ to_s_method.inspect + q.text self.to_s + elsif !to_s_method && self.respond_to?(:to_s) + q.text self.to_s else q.pp_object(self) end Index: proc.c =================================================================== --- proc.c (revision 36700) +++ proc.c (revision 36701) @@ -2217,7 +2217,6 @@ rb_define_method(rb_cProc, "eql?", proc_eq, 1); rb_define_method(rb_cProc, "hash", proc_hash, 0); rb_define_method(rb_cProc, "to_s", proc_to_s, 0); - rb_define_alias(rb_cProc, "inspect", "to_s"); rb_define_method(rb_cProc, "lambda?", rb_proc_lambda_p, 0); rb_define_method(rb_cProc, "binding", proc_binding, 0); rb_define_method(rb_cProc, "curry", proc_curry, -1); Index: numeric.c =================================================================== --- numeric.c (revision 36700) +++ numeric.c (revision 36701) @@ -3660,7 +3660,6 @@ rb_cFixnum = rb_define_class("Fixnum", rb_cInteger); rb_define_method(rb_cFixnum, "to_s", fix_to_s, -1); - rb_define_alias(rb_cFixnum, "inspect", "to_s"); rb_define_method(rb_cFixnum, "-@", fix_uminus, 0); rb_define_method(rb_cFixnum, "+", fix_plus, 1); @@ -3721,7 +3720,6 @@ rb_define_const(rb_cFloat, "NAN", DBL2NUM(NAN)); rb_define_method(rb_cFloat, "to_s", flo_to_s, 0); - rb_define_alias(rb_cFloat, "inspect", "to_s"); rb_define_method(rb_cFloat, "coerce", flo_coerce, 1); rb_define_method(rb_cFloat, "-@", flo_uminus, 0); rb_define_method(rb_cFloat, "+", flo_plus, 1); Index: vm.c =================================================================== --- vm.c (revision 36700) +++ vm.c (revision 36701) @@ -2229,7 +2229,6 @@ vm->top_self = rb_obj_alloc(rb_cObject); rb_define_singleton_method(rb_vm_top_self(), "to_s", main_to_s, 0); - rb_define_alias(rb_singleton_class(rb_vm_top_self()), "inspect", "to_s"); /* initialize mark object array */ vm->mark_object_ary = rb_ary_tmp_new(1); Index: bignum.c =================================================================== --- bignum.c (revision 36700) +++ bignum.c (revision 36701) @@ -3835,7 +3835,6 @@ rb_cBignum = rb_define_class("Bignum", rb_cInteger); rb_define_method(rb_cBignum, "to_s", rb_big_to_s, -1); - rb_define_alias(rb_cBignum, "inspect", "to_s"); rb_define_method(rb_cBignum, "coerce", rb_big_coerce, 1); rb_define_method(rb_cBignum, "-@", rb_big_uminus, 0); rb_define_method(rb_cBignum, "+", rb_big_plus, 1); Index: test/ruby/test_object.rb =================================================================== --- test/ruby/test_object.rb (revision 36700) +++ test/ruby/test_object.rb (revision 36701) @@ -690,31 +690,6 @@ assert_equal(true, s.tainted?) end - def test_inspect - x = Object.new - assert_match(/\A#<Object:0x\h+>\z/, x.inspect) - - x.instance_variable_set(:@ivar, :value) - assert_match(/\A#<Object:0x\h+ @ivar=:value>\z/, x.inspect) - - x = Object.new - x.instance_variable_set(:@recur, x) - assert_match(/\A#<Object:0x\h+ @recur=#<Object:0x\h+ \.\.\.>>\z/, x.inspect) - - x = Object.new - x.instance_variable_set(:@foo, "value") - x.instance_variable_set(:@bar, 42) - assert_match(/\A#<Object:0x\h+ (?:@foo="value", @bar=42|@bar=42, @foo="value")>\z/, x.inspect) - - # #inspect does not call #to_s anymore - feature6130 = '[ruby-core:43238]' - x = Object.new - def x.to_s - "to_s" - end - assert_match(/\A#<Object:0x\h+>\z/, x.inspect, feature6130) - end - def test_exec_recursive Thread.current[:__recursive_key__] = nil a = [[]] Index: test/test_pp.rb =================================================================== --- test/test_pp.rb (revision 36700) +++ test/test_pp.rb (revision 36701) @@ -118,6 +118,7 @@ def a.to_s() "aaa" end result = PP.pp(a, '') assert_equal("#{a.inspect}\n", result) + assert_equal("aaa\n", result) end end -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/