Revision: 4157 http://trac.macosforge.org/projects/ruby/changeset/4157 Author: martinlagardette@apple.com Date: 2010-05-25 19:10:25 -0700 (Tue, 25 May 2010) Log Message: ----------- Do not raise "ArgumentError" in the case where the method has been undefined - Fixes #716 Modified Paths: -------------- MacRuby/trunk/dispatcher.cpp Modified: MacRuby/trunk/dispatcher.cpp =================================================================== --- MacRuby/trunk/dispatcher.cpp 2010-05-26 02:06:02 UTC (rev 4156) +++ MacRuby/trunk/dispatcher.cpp 2010-05-26 02:10:25 UTC (rev 4157) @@ -944,17 +944,20 @@ if (new_sel != 0) { Method m = class_getInstanceMethod(klass, new_sel); if (m != NULL) { - unsigned expected_argc; - rb_vm_method_node_t *node = GET_CORE()->method_node_get(m); - if (node != NULL) { - expected_argc = node->arity.min; + IMP mimp = method_getImplementation(m); + if (!UNAVAILABLE_IMP(mimp)) { + unsigned expected_argc; + rb_vm_method_node_t *node = GET_CORE()->method_node_get(m); + if (node != NULL) { + expected_argc = node->arity.min; + } + else { + expected_argc = method_getNumberOfArguments(m); + expected_argc -= 2; // removing receiver and selector + } + rb_raise(rb_eArgError, "wrong number of arguments (%d for %d)", + argc, expected_argc); } - else { - expected_argc = method_getNumberOfArguments(m); - expected_argc -= 2; // removing receiver and selector - } - rb_raise(rb_eArgError, "wrong number of arguments (%d for %d)", - argc, expected_argc); } }