ruby-changes:14078
From: nobu <ko1@a...>
Date: Tue, 24 Nov 2009 00:00:26 +0900 (JST)
Subject: [ruby-changes:14078] Ruby:r25890 (ruby_1_8): * eval.c (rb_method_missing): adjusted format and argument number.
nobu 2009-11-23 23:59:28 +0900 (Mon, 23 Nov 2009) New Revision: 25890 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=25890 Log: * eval.c (rb_method_missing): adjusted format and argument number. * eval.c (rb_call): fixed for super in cached method. [ruby-dev:39757] Modified files: branches/ruby_1_8/ChangeLog branches/ruby_1_8/eval.c branches/ruby_1_8/test/ruby/test_object.rb Index: ruby_1_8/ChangeLog =================================================================== --- ruby_1_8/ChangeLog (revision 25889) +++ ruby_1_8/ChangeLog (revision 25890) @@ -1,3 +1,11 @@ +Mon Nov 23 23:59:26 2009 Nobuyoshi Nakada <nobu@r...> + + * eval.c (rb_method_missing): adjusted format and argument number. + + * eval.c (rb_call): fixed for super in cached method. + [ruby-dev:39757] +n + Mon Nov 23 11:26:45 2009 Nobuyoshi Nakada <nobu@r...> * dln.c (dln_find_1): removed duplication. Index: ruby_1_8/test/ruby/test_object.rb =================================================================== --- ruby_1_8/test/ruby/test_object.rb (revision 25889) +++ ruby_1_8/test/ruby/test_object.rb (revision 25890) @@ -283,6 +283,33 @@ assert_raise(ArgumentError) { 1.send } end + def test_no_superclass_method + o = Object.new + e = assert_raise(NoMethodError) { + o.method(:__send__).call(:never_defined_test_no_superclass_method) + } + m1 = e.message + assert_no_match(/no superclass method/, m1) + e = assert_raise(NoMethodError) { + o.method(:__send__).call(:never_defined_test_no_superclass_method) + } + assert_equal(m1, e.message) + e = assert_raise(NoMethodError) { + o.never_defined_test_no_superclass_method + } + assert_equal(m1, e.message) + end + + def test_superclass_method + o = Object.new + def o.foo; super; end + e = assert_raise(NoMethodError) {o.foo} + m1 = e.message + assert_match(/no superclass method/, m1) + e = assert_raise(NoMethodError) {o.foo} + assert_equal(m1, e.message) + end + def test_specific_eval_with_wrong_arguments assert_raise(ArgumentError) do 1.instance_eval("foo") { foo } Index: ruby_1_8/eval.c =================================================================== --- ruby_1_8/eval.c (revision 25889) +++ ruby_1_8/eval.c (revision 25890) @@ -5770,7 +5770,7 @@ exc = rb_eNameError; } else if (last_call_status & CSTAT_SUPER) { - format = "super: no superclass method `%s'"; + format = "super: no superclass method `%s' for %s"; } if (!format) { format = "undefined method `%s' for %s"; @@ -6220,13 +6220,14 @@ ent = cache + EXPR1(klass, mid); if (ent->mid == mid && ent->klass == klass) { if (!ent->method) - return method_missing(recv, mid, argc, argv, scope==2?CSTAT_VCALL:0); + goto nomethod; klass = ent->origin; id = ent->mid0; noex = ent->noex; body = ent->method; } else if ((body = rb_get_method_body(&klass, &id, &noex)) == 0) { + nomethod: if (scope == 3) { return method_missing(recv, mid, argc, argv, CSTAT_SUPER); } -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/