summaryrefslogtreecommitdiffhomepage
path: root/src/vm.c
diff options
context:
space:
mode:
authorYukihiro Matsumoto <[email protected]>2012-08-01 13:15:02 +0900
committerYukihiro Matsumoto <[email protected]>2012-08-01 13:15:02 +0900
commitd271bf0aa6e44a315802cf4246f5b92552be010a (patch)
tree012f5f192c0aad25e3b2d401241a2b1e8f10e4a9 /src/vm.c
parent7511508a64250af30fdad4b7e342bb703e7af6c9 (diff)
downloadmruby-d271bf0aa6e44a315802cf4246f5b92552be010a.tar.gz
mruby-d271bf0aa6e44a315802cf4246f5b92552be010a.zip
make mrb_funcall_argv and mrb_funcall_with_block to take mrb_sym as a method name
Diffstat (limited to 'src/vm.c')
-rw-r--r--src/vm.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/vm.c b/src/vm.c
index 2a13f0ea4..130e56071 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -179,16 +179,18 @@ ecall(mrb_state *mrb, int i)
}
mrb_value
-mrb_funcall_with_block(mrb_state *mrb, mrb_value self, const char *name, int argc, mrb_value *argv, mrb_value blk)
+mrb_funcall_with_block(mrb_state *mrb, mrb_value self, mrb_sym mid, int argc, mrb_value *argv, mrb_value blk)
{
struct RProc *p;
struct RClass *c;
- mrb_sym mid = mrb_intern(mrb, name);
mrb_sym undef = 0;
mrb_callinfo *ci;
int n = mrb->ci->nregs;
mrb_value val;
+ if (argc < 0) {
+ mrb_raise(mrb, E_ARGUMENT_ERROR, "negative argc for funcall (%d)", argc);
+ }
c = mrb_class(mrb, self);
p = mrb_method_search_vm(mrb, &c, mid);
if (!p) {
@@ -232,9 +234,9 @@ mrb_funcall_with_block(mrb_state *mrb, mrb_value self, const char *name, int arg
}
mrb_value
-mrb_funcall_argv(mrb_state *mrb, mrb_value self, const char *name, int argc, mrb_value *argv)
+mrb_funcall_argv(mrb_state *mrb, mrb_value self, mrb_sym mid, int argc, mrb_value *argv)
{
- return mrb_funcall_with_block(mrb, self, name, argc, argv, mrb_nil_value());
+ return mrb_funcall_with_block(mrb, self, mid, argc, argv, mrb_nil_value());
}
mrb_value