예제 #1
0
파일: class.c 프로젝트: bearmini/mruby
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);
}
예제 #2
0
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;
}
예제 #3
0
파일: class.c 프로젝트: rystyle/mruby
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;
}
예제 #4
0
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;
}
예제 #5
0
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));
}
예제 #6
0
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();
}
예제 #7
0
파일: class.c 프로젝트: takkaw/mruby
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);
}
예제 #8
0
파일: class.c 프로젝트: AndreOF/ArangoDB
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;
}
예제 #9
0
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;
}
예제 #10
0
파일: io.c 프로젝트: asfluido/mruby
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);
}
예제 #11
0
파일: class.c 프로젝트: charliesome/mruby
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;
}
예제 #12
0
파일: class.c 프로젝트: takkaw/mruby
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));
}