static VALUE rb_mod_private_method_defined(VALUE mod, VALUE mid) { ID id = rb_check_id(&mid); if (!id) return Qfalse; return check_definition(mod, id, NOEX_PRIVATE); }
static VALUE rb_mod_public_method_defined(VALUE mod, VALUE mid) { ID id = rb_check_id(&mid); if (!id) return Qfalse; return check_definition(mod, id, NOEX_PUBLIC); }
static VALUE rb_mod_protected_method_defined(VALUE mod, VALUE mid) { ID id = rb_check_id(&mid); if (!id) return Qfalse; return check_definition(mod, id, NOEX_PROTECTED); }
VALUE rb_struct_aset(VALUE s, VALUE idx, VALUE val) { long i; if (RB_TYPE_P(idx, T_SYMBOL)) { return rb_struct_aset_id(s, SYM2ID(idx), val); } if (RB_TYPE_P(idx, T_STRING)) { ID id = rb_check_id(&idx); if (!id) { rb_name_error_str(idx, "no member '%"PRIsVALUE"' in struct", QUOTE(idx)); } return rb_struct_aset_id(s, id, val); } i = NUM2LONG(idx); if (i < 0) i = RSTRUCT_LEN(s) + i; if (i < 0) { rb_raise(rb_eIndexError, "offset %ld too small for struct(size:%ld)", i, RSTRUCT_LEN(s)); } if (RSTRUCT_LEN(s) <= i) { rb_raise(rb_eIndexError, "offset %ld too large for struct(size:%ld)", i, RSTRUCT_LEN(s)); } rb_struct_modify(s); RSTRUCT_SET(s, i, val); return val; }
VALUE rb_struct_aref(VALUE s, VALUE idx) { long i; if (RB_TYPE_P(idx, T_SYMBOL)) { return rb_struct_aref_id(s, SYM2ID(idx)); } else if (RB_TYPE_P(idx, T_STRING)) { ID id = rb_check_id(&idx); if (!id) { rb_name_error_str(idx, "no member '%"PRIsVALUE"' in struct", QUOTE(idx)); } return rb_struct_aref_id(s, id); } i = NUM2LONG(idx); if (i < 0) i = RSTRUCT_LEN(s) + i; if (i < 0) rb_raise(rb_eIndexError, "offset %ld too small for struct(size:%ld)", i, RSTRUCT_LEN(s)); if (RSTRUCT_LEN(s) <= i) rb_raise(rb_eIndexError, "offset %ld too large for struct(size:%ld)", i, RSTRUCT_LEN(s)); return RSTRUCT_PTR(s)[i]; }
static VALUE rb_mod_autoload_p(VALUE mod, VALUE sym) { ID id = rb_check_id(&sym); if (!id) { return Qnil; } return rb_autoload_p(mod, id); }
static VALUE rb_mod_alias_method(VALUE mod, VALUE newname, VALUE oldname) { ID oldid = rb_check_id(&oldname); if (!oldid) { rb_print_undef_str(mod, oldname); } rb_alias(mod, rb_to_id(newname), oldid); return mod; }
static VALUE rb_mod_method_defined(VALUE mod, VALUE mid) { ID id = rb_check_id(&mid); if (!id || !rb_method_boundp(mod, id, 1)) { return Qfalse; } return Qtrue; }
static VALUE check_definition(VALUE mod, VALUE mid, rb_method_flag_t noex) { const rb_method_entry_t *me; ID id = rb_check_id(&mid); if (!id) return Qfalse; me = rb_method_entry_without_refinements(mod, id, 0); if (me) { if (VISI_CHECK(me->flag, noex)) return Qtrue; } return Qfalse; }
static VALUE rb_mod_undef_method(int argc, VALUE *argv, VALUE mod) { int i; for (i = 0; i < argc; i++) { VALUE v = argv[i]; ID id = rb_check_id(&v); if (!id) { rb_method_name_error(mod, v); } rb_undef(mod, id); } return mod; }
static VALUE rb_f_send(int argc, VALUE *argv, VALUE recv) { VALUE sym = argv[0]; ID vid = rb_check_id(&sym); if (vid) { --argc; ++argv; } else { vid = id___send__; } return rb_funcallv(recv, vid, argc, argv); }
static void set_method_visibility(VALUE self, int argc, VALUE *argv, rb_method_flag_t ex) { int i; secure_visibility(self); for (i = 0; i < argc; i++) { VALUE v = argv[i]; ID id = rb_check_id(&v); if (!id) { rb_print_undef_str(self, v); } rb_export_method(self, id, ex); } rb_clear_cache_by_class(self); }
static VALUE rb_mod_remove_method(int argc, VALUE *argv, VALUE mod) { int i; for (i = 0; i < argc; i++) { VALUE v = argv[i]; ID id = rb_check_id(&v); if (!id) { rb_name_error_str(v, "method `%"PRIsVALUE"' not defined in %"PRIsVALUE, v, rb_obj_class(mod)); } remove_method(mod, id); } return mod; }
static VALUE rb_mod_remove_method(int argc, VALUE *argv, VALUE mod) { int i; for (i = 0; i < argc; i++) { VALUE v = argv[i]; ID id = rb_check_id(&v); if (!id) { rb_name_error_str(v, "method `%s' not defined in %s", RSTRING_PTR(v), rb_class2name(mod)); } remove_method(mod, id); } return mod; }
static VALUE obj_respond_to(int argc, VALUE *argv, VALUE obj) { VALUE mid, priv; ID id; rb_scan_args(argc, argv, "11", &mid, &priv); if (!(id = rb_check_id(&mid))) { if (!rb_method_basic_definition_p(CLASS_OF(obj), idRespond_to_missing)) { VALUE args[2]; args[0] = rb_to_symbol(mid); args[1] = priv; return rb_funcall2(obj, idRespond_to_missing, 2, args); } return Qfalse; } if (basic_obj_respond_to(obj, id, !RTEST(priv))) return Qtrue; return Qfalse; }
static void set_method_visibility(VALUE self, int argc, const VALUE *argv, rb_method_flag_t ex) { int i; if (argc == 0) { rb_warning("%"PRIsVALUE" with no argument is just ignored", QUOTE_ID(rb_frame_callee())); return; } for (i = 0; i < argc; i++) { VALUE v = argv[i]; ID id = rb_check_id(&v); if (!id) { rb_print_undef_str(self, v); } rb_export_method(self, id, ex); } }
static VALUE mod_method_arity(VALUE self, VALUE mod, VALUE mid) { int arity = rb_mod_method_arity(mod, rb_check_id(&mid)); return INT2FIX(arity); }
static VALUE obj_method_arity(VALUE self, VALUE obj, VALUE mid) { int arity = rb_obj_method_arity(obj, rb_check_id(&mid)); return INT2FIX(arity); }