コード例 #1
0
ファイル: class.c プロジェクト: takkaw/mruby
static mrb_value
mrb_mod_method_defined(mrb_state *mrb, mrb_value mod)
{
  mrb_sym id;
  mrb_bool method_defined_p;

  mrb_get_args(mrb, "n", &id);
  method_defined_p = mrb_obj_respond_to(mrb_class_ptr(mod), id);
  return mrb_bool_value(method_defined_p);
}
コード例 #2
0
ファイル: class.c プロジェクト: MichaelFrohberg/mruby
static mrb_value
mrb_mod_method_defined(mrb_state *mrb, mrb_value mod)
{
  mrb_value id;
  mrb_bool method_defined_p;

  id = get_sym_or_str_arg(mrb);
  if (mrb_symbol_p(id)) {
    method_defined_p = mrb_obj_respond_to(mrb_class_ptr(mod), mrb_symbol(id));
  } else {
    mrb_value sym = mrb_check_intern_str(mrb, id);
    if (mrb_nil_p(sym)) {
      method_defined_p = FALSE;
    }
    else {
      method_defined_p = mrb_obj_respond_to(mrb_class_ptr(mod), mrb_symbol(sym));
    }
  }
  return mrb_bool_value(method_defined_p);
}
コード例 #3
0
ファイル: class.c プロジェクト: CaptainJet/mruby
static void
undef_method(mrb_state *mrb, struct RClass *c, mrb_sym a)
{
  mrb_value m;

  if (!mrb_obj_respond_to(c, a)) {
    mrb_name_error(mrb, a, "undefined method '%S' for class '%S'", mrb_sym2str(mrb, a), mrb_obj_value(c));
  } else {
    MRB_SET_VALUE(m, MRB_TT_PROC, value.p, 0);
    mrb_define_method_vm(mrb, c, a, m);
  }
}
コード例 #4
0
ファイル: marshal.cpp プロジェクト: cjv123/RPG
static mrb_value
read_userdef(MarshalContext *ctx)
{
	mrb_state *mrb = ctx->mrb;
	mrb_value class_path = read_value(ctx);

	struct RClass *klass =
		mrb_class_from_path(mrb, class_path);

	/* Should check here if klass implements '_load()' */
	if (!mrb_obj_respond_to(mrb, mrb_class(mrb, mrb_obj_value(klass)), mrb_intern_cstr(mrb, "_load")))
		throw Exception(Exception::TypeError,
	                    "class %s needs to have method '_load'",
		                 RSTRING_PTR(class_path));

	mrb_value data = read_string_value(ctx);
	mrb_value obj = mrb_funcall(mrb, mrb_obj_value(klass), "_load", 1, data);

	return obj;
}
コード例 #5
0
ファイル: class.c プロジェクト: AndreOF/ArangoDB
int
mrb_respond_to(mrb_state *mrb, mrb_value obj, mrb_sym mid)
{
  return mrb_obj_respond_to(mrb_class(mrb, obj), mid);
}