mrb_value mrb_mod_const_defined(mrb_state *mrb, mrb_value mod) { mrb_value id; mrb_bool const_defined_p; id = get_sym_or_str_arg(mrb); if (mrb_type(id) == MRB_TT_SYMBOL) { check_const_name_sym(mrb, mrb_symbol(id)); const_defined_p = mrb_const_defined(mrb, mod, mrb_symbol(id)); } else { mrb_value sym; check_const_name_str(mrb, id); sym = mrb_check_intern_str(mrb, id); if (mrb_nil_p(sym)) { const_defined_p = FALSE; } else { const_defined_p = mrb_const_defined(mrb, mod, mrb_symbol(sym)); } } return mrb_bool_value(const_defined_p); }
struct RClass* mrb_vm_define_class(mrb_state *mrb, mrb_value outer, mrb_value super, mrb_sym id) { struct RClass *c = 0; if (mrb_const_defined(mrb, outer, id)) { mrb_value v = mrb_const_get(mrb, outer, id); c = mrb_class_ptr(v); if (!mrb_nil_p(super) && (c->tt != MRB_TT_CLASS || c->super != mrb_class_ptr(super))) { c = 0; } } if (!c) { struct RClass *s = 0; if (!mrb_nil_p(super)) { mrb_check_type(mrb, super, MRB_TT_CLASS); s = mrb_class_ptr(super); } if (!s) { s = mrb->object_class; } c = mrb_class_new(mrb, s); setup_class(mrb, outer, c, id); mrb_funcall(mrb, mrb_obj_value(s), "inherited", 1, mrb_obj_value(c)); } return c; }
struct RClass* mrb_vm_define_class(mrb_state *mrb, mrb_value outer, mrb_value super, mrb_sym id) { struct RClass *c = 0; if (mrb_const_defined(mrb, outer, id)) { mrb_value v = mrb_const_get(mrb, outer, id); c = mrb_class_ptr(v); if (!mrb_nil_p(super) && (c->tt != MRB_TT_CLASS || c->super != mrb_class_ptr(super))) { c = 0; } } if (!c) { struct RClass *s = 0; if (!mrb_nil_p(super)) { mrb_check_type(mrb, super, MRB_TT_CLASS); s = mrb_class_ptr(super); } c = mrb_class_new(mrb, s); setup_class(mrb, outer, c, id); } return c; }
static mrb_value mrb_digest_init(mrb_state *mrb, mrb_value self) { struct RClass *c; struct mrb_md *md; mrb_value t; md = (struct mrb_md *)DATA_PTR(self); if (md) { lib_md_free(mrb, md); } DATA_TYPE(self) = &mrb_md_type; DATA_PTR(self) = NULL; c = mrb_obj_class(mrb, self); if (!mrb_const_defined(mrb, mrb_obj_value(c), mrb_intern_lit(mrb, TYPESYM))) { mrb_raise(mrb, E_NOTIMP_ERROR, "Digest::Base is an abstract class"); } t = mrb_const_get(mrb, mrb_obj_value(c), mrb_intern_lit(mrb, TYPESYM)); #if 0 if (lib_md_supported(t)) { mrb_raise(mrb, E_NOTIMP_ERROR, "unknown algorithm"); } #endif md = (struct mrb_md *)mrb_malloc(mrb, sizeof(*md)); DATA_PTR(self) = md; lib_md_init(mrb, md, mrb_fixnum(t)); return self; }
int mrb_class_defined(mrb_state *mrb, const char *name) { mrb_value sym = mrb_check_intern_cstr(mrb, name); if (mrb_nil_p(sym)) { return FALSE; } return mrb_const_defined(mrb, mrb_obj_value(mrb->object_class), mrb_symbol(sym)); }
mrb_value mrb_mod_const_defined(mrb_state *mrb, mrb_value mod) { mrb_value sym; mrb_get_args(mrb, "o", &sym); if(mrb_const_defined(mrb, mod, mrb_sym_value(mrb, sym))) { return mrb_true_value(); } return mrb_false_value(); }
mrb_value mrb_mod_const_defined(mrb_state *mrb, mrb_value mod) { mrb_sym id; mrb_bool const_defined_p; mrb_get_args(mrb, "n", &id); check_const_name(mrb, id); const_defined_p = mrb_const_defined(mrb, mod, id); return mrb_bool_value(const_defined_p); }
struct RClass* mrb_vm_define_module(mrb_state *mrb, mrb_value outer, mrb_sym id) { struct RClass *c; mrb_value v; if (mrb_const_defined(mrb, outer, id)) { v = mrb_const_get(mrb, outer, id); c = mrb_class_ptr(v); } else { c = mrb_module_new(mrb); setup_class(mrb, outer, c, id); } return c; }
static mrb_int getButtonArg(mrb_state *mrb, mrb_value self) { mrb_int num; #ifdef RGSS3 mrb_sym sym; mrb_get_args(mrb, "n", &sym); if (mrb_const_defined(mrb, self, sym)) num = mrb_fixnum(mrb_const_get(mrb, self, sym)); else num = 0; #else (void) self; mrb_get_args(mrb, "i", &num); #endif return num; }
static void io_set_process_status(mrb_state *mrb, pid_t pid, int status) { struct RClass *c_process, *c_status; mrb_value v; c_status = NULL; if (mrb_class_defined(mrb, "Process")) { c_process = mrb_module_get(mrb, "Process"); if (mrb_const_defined(mrb, mrb_obj_value(c_process), mrb_intern_cstr(mrb, "Status"))) { c_status = mrb_class_get_under(mrb, c_process, "Status"); } } if (c_status != NULL) { v = mrb_funcall(mrb, mrb_obj_value(c_status), "new", 2, mrb_fixnum_value(pid), mrb_fixnum_value(status)); } else { v = mrb_fixnum_value(WEXITSTATUS(status)); } mrb_gv_set(mrb, mrb_intern_cstr(mrb, "$?"), v); }
struct RClass* mrb_vm_define_class(mrb_state *mrb, mrb_value outer, mrb_value super, mrb_sym id) { struct RClass *c, *s; if (mrb_const_defined(mrb, outer, id)) { mrb_value v = mrb_const_get(mrb, outer, id); mrb_check_type(mrb, v, MRB_TT_CLASS); c = mrb_class_ptr(v); if (!mrb_nil_p(super)) { if (mrb_type(super) != MRB_TT_CLASS) { mrb_raise(mrb, E_TYPE_ERROR, "superclass must be a Class (%s given)", mrb_obj_classname(mrb, super)); } if (!c->super || mrb_class_ptr(super) != mrb_class_real(c->super)) { mrb_raise(mrb, E_TYPE_ERROR, "superclass mismatch for class %s", mrb_sym2name(mrb, id)); } } return c; } if (!mrb_nil_p(super)) { if (mrb_type(super) != MRB_TT_CLASS) { mrb_raise(mrb, E_TYPE_ERROR, "superclass must be a Class (%s given)", mrb_obj_classname(mrb, super)); } s = mrb_class_ptr(super); } else { s = mrb->object_class; } c = mrb_class_new(mrb, s); setup_class(mrb, outer, c, id); mrb_funcall(mrb, mrb_obj_value(s), "inherited", 1, mrb_obj_value(c)); return c; }
int mrb_class_defined(mrb_state *mrb, const char *name) { return mrb_const_defined(mrb, mrb_obj_value(mrb->object_class), mrb_intern(mrb, name)); }