Пример #1
0
static mrb_value
mrb_mod_cvar_defined(mrb_state *mrb, mrb_value mod)
{
  mrb_sym id;
  mrb_bool defined_p;
  mrb_get_args(mrb, "n", &id);

  check_cv_name(mrb, id);
  defined_p = mrb_cv_defined(mrb, mod, id);
  return mrb_bool_value(defined_p);
}
Пример #2
0
static mrb_value
mrb_mod_cvar_defined(mrb_state *mrb, mrb_value mod)
{
  mrb_value id;
  mrb_bool defined_p;

  id = get_sym_or_str_arg(mrb);
  if (mrb_symbol_p(id)) {
    check_cv_name_sym(mrb, mrb_symbol(id));
    defined_p = mrb_cv_defined(mrb, mod, mrb_symbol(id));
  } else {
    mrb_value sym;
    check_cv_name_str(mrb, id);
    sym = mrb_check_intern_str(mrb, id);
    if (mrb_nil_p(sym)) {
      defined_p = FALSE;
    }
    else {
      defined_p = mrb_cv_defined(mrb, mod, mrb_symbol(sym));
    }
  }
  return mrb_bool_value(defined_p);
}
Пример #3
0
mrb_value
mrb_mod_remove_cvar(mrb_state *mrb, mrb_value mod)
{
  mrb_value val;
  mrb_sym id;

  mrb_get_args(mrb, "n", &id);
  check_cv_name_sym(mrb, id);

  val = mrb_iv_remove(mrb, mod, id);
  if (!mrb_undef_p(val)) return val;

  if (mrb_cv_defined(mrb, mod, id)){
    mrb_name_error(mrb, id, "cannot remove %S for %S",
                   mrb_sym2str(mrb, id), mod);
  }

  mrb_name_error(mrb, id, "class variable %S not defined for %S",
                 mrb_sym2str(mrb, id), mod);

 /* not reached */
 return mrb_nil_value();
}