36 #define attached id__attached__
40 #define IS_METHOD_PROC_NODE(node) (nd_type(node) == NODE_IFUNC && (node)->nd_cfnc == bmcall)
322 VALUE bindval, envval;
325 if (cfp == 0 || ruby_level_cfp == 0) {
331 if (cfp == ruby_level_cfp) {
396 rb_scan_args(argc, argv,
"12", &args[0], &args[2], &args[3]);
575 rb_warn(
"tried to create Proc object without a block");
580 "tried to create Proc object without a block");
584 procval = block->
proc;
587 if (
RBASIC(procval)->klass == klass) {
663 rb_warn(
"rb_f_lambda() is deprecated; use rb_block_proc() instead");
721 VALUE passed_procval;
730 blockptr = &passed_proc->
block;
739 #if SIZEOF_LONG > SIZEOF_INT
743 if (argc > INT_MAX || argc < 0) {
745 (
unsigned long)argc);
750 #define check_argc(argc) (argc)
773 if (!
NIL_P(pass_procval)) {
776 block = &pass_proc->
block;
867 block = &proc->
block;
891 proc_value = block->
proc;
901 #define get_proc_iseq rb_proc_get_iseq
911 if (is_proc) *is_proc = !proc->
is_lambda;
918 if (is_proc) *is_proc = 0;
929 if (!iseq)
return Qnil;
958 int n = (arity < 0) ? ~arity : arity;
1036 const char *is_lambda;
1040 is_lambda = proc->
is_lambda ?
" (lambda)" :
"";
1043 int first_lineno = 0;
1080 struct METHOD *data = ptr;
1090 struct METHOD *data = ptr;
1094 ume->
next =
GET_VM()->unlinked_method_entry_list;
1095 GET_VM()->unlinked_method_entry_list = ume;
1102 return ptr ?
sizeof(
struct METHOD) : 0;
1131 VALUE rclass = klass;
1145 defined_class = klass;
1157 switch (flag & NOEX_MASK) {
1177 while (rclass != klass &&
1223 return mnew_from_me(me, defined_class, klass, obj,
id, mclass, scope);
1319 struct METHOD *orig, *data;
1325 data->
id = orig->
id;
1327 *data->
me = *orig->
me;
1411 const char *s0 =
" class";
1417 switch (
TYPE(obj)) {
1631 if (cref && cref->nd_clss == mod) {
1632 noex = (int)cref->nd_visi;
1645 "wrong argument type %s (expected Proc/Method)",
1657 "can't bind singleton method to a different class");
1661 "bind argument must be a subclass of % "PRIsVALUE,
1743 rb_warning(
"main.define_method in the wrapped load is effective only in wrapper module");
1772 struct METHOD *orig, *data;
1779 *data->
me = *orig->
me;
1812 volatile int safe = -1;
1820 const int safe_level_to_run = 4 ;
1831 if (!
NIL_P(pass_procval)) {
1834 block = &pass_proc->
block;
1944 struct METHOD *data, *bound;
1950 methclass = data->
rclass;
1955 "singleton method called for a different object");
1966 *bound->
me = *data->
me;
1994 if (!def)
return *max = 0;
1995 switch (def->
type) {
2023 case OPTIMIZED_METHOD_TYPE_SEND:
2035 rb_bug(
"rb_method_entry_min_max_arity: invalid method entry type (%d)", def->
type);
2043 return min == max ? min : -min-1;
2139 return data->
me->
def;
2145 switch (def->
type) {
2175 if (!me || !me->
def)
return Qnil;
2240 const char *sharp =
"#";
2256 else if (data->
recv == v) {
2270 if (data->
rclass != mklass) {
2447 VALUE proc, passed, arity;
2456 if (!
NIL_P(passed_proc)) {
2457 rb_warn(
"given block not used");
2600 (
void *)OPTIMIZED_METHOD_TYPE_CALL, 0);
2602 (
void *)OPTIMIZED_METHOD_TYPE_CALL, 0);
2604 (
void *)OPTIMIZED_METHOD_TYPE_CALL, 0);
2606 (
void *)OPTIMIZED_METHOD_TYPE_CALL, 0);