[macruby-changes] [3592] MacRuby/trunk/dispatcher.cpp
source_changes at macosforge.org
source_changes at macosforge.org
Tue Feb 23 07:23:08 PST 2010
Revision: 3592
http://trac.macosforge.org/projects/ruby/changeset/3592
Author: martinlagardette at apple.com
Date: 2010-02-23 07:23:07 -0800 (Tue, 23 Feb 2010)
Log Message:
-----------
- Add an arity check for bridgesupport functions:
- Avoid a crash when calling with too few arguments
- Raise with too many arguments
- Improve error message when calling a native Obj-C method with no argument:
- Display number of missing argument(s) instead of raising `NoMethodError`
Modified Paths:
--------------
MacRuby/trunk/dispatcher.cpp
Modified: MacRuby/trunk/dispatcher.cpp
===================================================================
--- MacRuby/trunk/dispatcher.cpp 2010-02-23 11:57:49 UTC (rev 3591)
+++ MacRuby/trunk/dispatcher.cpp 2010-02-23 15:23:07 UTC (rev 3592)
@@ -700,6 +700,12 @@
std::string name(selname, selname_len);
bs_element_function_t *bs_func = GET_CORE()->find_bs_function(name);
if (bs_func != NULL) {
+ if ((unsigned)argc < bs_func->args_count
+ || ((unsigned)argc > bs_func->args_count
+ && bs_func->variadic == false)) {
+ rb_raise(rb_eArgError, "wrong number of arguments (%d for %d)",
+ argc, bs_func->args_count);
+ }
std::string types;
vm_gen_bs_func_types(argc, argv, bs_func, types);
@@ -929,11 +935,17 @@
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) {
- rb_raise(rb_eArgError, "wrong number of arguments (%d for %d)",
- argc, node->arity.min);
+ 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);
}
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20100223/9efad1ab/attachment.html>
More information about the macruby-changes
mailing list