35 #define IS_METHOD_PROC_NODE(node) (nd_type(node) == NODE_IFUNC && (node)->nd_cfnc == bmcall)
372 rb_scan_args(argc, argv,
"12", &args[0], &args[2], &args[3]);
397 rb_warn(
"tried to create Proc object without a block");
402 "tried to create Proc object without a block");
406 procval = block->
proc;
409 if (
RBASIC(procval)->klass == klass) {
414 RBASIC(newprocval)->klass = klass;
477 rb_warn(
"rb_f_lambda() is deprecated; use rb_block_proc() instead");
548 VALUE passed_procval;
557 blockptr = &passed_proc->
block;
562 argc, argv, blockptr);
565 #if SIZEOF_LONG > SIZEOF_INT
569 if (argc > INT_MAX || argc < 0) {
571 (
unsigned long)argc);
576 #define check_argc(argc) (argc)
595 if (!
NIL_P(pass_procval)) {
598 block = &pass_proc->
block;
660 #define get_proc_iseq rb_proc_get_iseq
670 if (is_proc) *is_proc = !proc->
is_lambda;
677 if (is_proc) *is_proc = 0;
688 if (!iseq)
return Qnil;
717 int n = (arity < 0) ? ~arity : arity;
819 const char *is_lambda;
823 is_lambda = proc->
is_lambda ?
" (lambda)" :
"";
831 str =
rb_sprintf(
"#<%s:%p@%s:%d%s>", cname, (
void *)
self,
864 struct METHOD *data = ptr;
873 struct METHOD *data = ptr;
876 ume->
next =
GET_VM()->unlinked_method_entry_list;
877 GET_VM()->unlinked_method_entry_list = ume;
884 return ptr ?
sizeof(
struct METHOD) : 0;
911 VALUE rclass = klass;
949 switch (flag & NOEX_MASK) {
968 while (rclass != klass &&
974 klass =
RBASIC(klass)->klass;
1084 struct METHOD *orig, *data;
1090 data->
id = orig->
id;
1092 *data->
me = *orig->
me;
1294 else if (argc == 2) {
1299 "wrong argument type %s (expected Proc/Method)",
1313 "can't bind singleton method to a different class");
1317 "bind argument must be a subclass of %s",
1386 struct METHOD *orig, *data;
1393 *data->
me = *orig->
me;
1419 volatile int safe = -1;
1540 struct METHOD *data, *bound;
1547 "singleton method called for a different object");
1558 *bound->
me = *data->
me;
1572 switch (def->
type) {
1601 case OPTIMIZED_METHOD_TYPE_SEND:
1608 rb_bug(
"rb_method_entry_arity: invalid method entry type (%d)", def->
type);
1679 return data->
me->
def;
1685 switch (def->
type) {
1754 const char *sharp =
"#";
1768 else if (data->
recv == v) {
1956 VALUE proc, passed, arity;
1965 if (!
NIL_P(passed_proc)) {
1966 rb_warn(
"given block not used");
2026 marity = -marity - 1;
2036 if (
rb_proc_lambda_p(
self) && (sarity < marity || (sarity > marity && !opt))) {
2115 (
void *)OPTIMIZED_METHOD_TYPE_CALL, 0);
2117 (
void *)OPTIMIZED_METHOD_TYPE_CALL, 0);
2119 (
void *)OPTIMIZED_METHOD_TYPE_CALL, 0);
2121 (
void *)OPTIMIZED_METHOD_TYPE_CALL, 0);