예제 #1
0
파일: class.c 프로젝트: gitpan/mRuby
static mrb_value
mrb_mod_eqq(mrb_state *mrb, mrb_value mod)
{
  mrb_value obj;

  mrb_get_args(mrb, "o", &obj);
  if (!mrb_obj_is_kind_of(mrb, obj, mrb_class_ptr(mod)))
    return mrb_false_value();
  return mrb_true_value();
}
예제 #2
0
static mrb_value
mrb_mod_eqq(mrb_state *mrb, mrb_value mod)
{
  mrb_value obj;
  mrb_bool eqq;

  mrb_get_args(mrb, "o", &obj);
  eqq = mrb_obj_is_kind_of(mrb, obj, mrb_class_ptr(mod));

  return mrb_bool_value(eqq);
}
예제 #3
0
파일: kernel.c 프로젝트: Bovi-Li/mruby
/*
 *  call-seq:
 *     obj.is_a?(class)       -> true or false
 *     obj.kind_of?(class)    -> true or false
 *
 *  Returns <code>true</code> if <i>class</i> is the class of
 *  <i>obj</i>, or if <i>class</i> is one of the superclasses of
 *  <i>obj</i> or modules included in <i>obj</i>.
 *
 *     module M;    end
 *     class A
 *       include M
 *     end
 *     class B < A; end
 *     class C < B; end
 *     b = B.new
 *     b.instance_of? A   #=> false
 *     b.instance_of? B   #=> true
 *     b.instance_of? C   #=> false
 *     b.instance_of? M   #=> false
 *     b.kind_of? A       #=> true
 *     b.kind_of? B       #=> true
 *     b.kind_of? C       #=> false
 *     b.kind_of? M       #=> true
 */
mrb_value
mrb_obj_is_kind_of_m(mrb_state *mrb, mrb_value self)
{
  mrb_value arg;
  mrb_bool kind_of_p;

  mrb_get_args(mrb, "C", &arg);
  kind_of_p = mrb_obj_is_kind_of(mrb, self, mrb_class_ptr(arg));

  return mrb_bool_value(kind_of_p);
}
예제 #4
0
static mrb_value
range_eql(mrb_state *mrb, mrb_value range)
{
  mrb_value obj;
  mrb_get_args(mrb, "o", &obj);

  if (mrb_obj_equal(mrb, range, obj))
    return mrb_true_value();
  if (!mrb_obj_is_kind_of(mrb, obj, mrb->range_class))
    return mrb_false_value();
  return mrb_exec_recursive_paired(mrb, recursive_eql, range, obj, &obj);
}
예제 #5
0
파일: error.c 프로젝트: deweerdt/h2o
static mrb_value
make_exception(mrb_state *mrb, int argc, const mrb_value *argv, mrb_bool isstr)
{
  mrb_value mesg;
  int n;

  mesg = mrb_nil_value();
  switch (argc) {
    case 0:
    break;
    case 1:
      if (mrb_nil_p(argv[0]))
        break;
      if (isstr) {
        mesg = mrb_check_string_type(mrb, argv[0]);
        if (!mrb_nil_p(mesg)) {
          mesg = mrb_exc_new_str(mrb, E_RUNTIME_ERROR, mesg);
          break;
        }
      }
      n = 0;
      goto exception_call;

    case 2:
    case 3:
      n = 1;
exception_call:
      {
        mrb_sym exc = mrb_intern_lit(mrb, "exception");
        if (mrb_respond_to(mrb, argv[0], exc)) {
          mesg = mrb_funcall_argv(mrb, argv[0], exc, n, argv+1);
        }
        else {
          /* undef */
          mrb_raise(mrb, E_TYPE_ERROR, "exception class/object expected");
        }
      }

      break;
    default:
      mrb_raisef(mrb, E_ARGUMENT_ERROR, "wrong number of arguments (%S for 0..3)", mrb_fixnum_value(argc));
      break;
  }
  if (argc > 0) {
    if (!mrb_obj_is_kind_of(mrb, mesg, mrb->eException_class))
      mrb_raise(mrb, mrb->eException_class, "exception object expected");
    if (argc > 2)
      set_backtrace(mrb, mesg, argv[2]);
  }

  return mesg;
}
예제 #6
0
파일: backtrace.c 프로젝트: Asmod4n/mruby
MRB_API void
mrb_print_backtrace(mrb_state *mrb)
{
  struct print_backtrace_args args;

  if (!mrb->exc || mrb_obj_is_kind_of(mrb, mrb_obj_value(mrb->exc), E_SYSSTACK_ERROR)) {
    return;
  }

  args.stream = stderr;
  args.tracehead = TRUE;
  exc_output_backtrace(mrb, mrb->exc, print_backtrace_i, (void*)&args);
}
예제 #7
0
파일: object.c 프로젝트: bearmini/mruby
static mrb_value
mrb_to_integer(mrb_state *mrb, mrb_value val, const char *method)
{
  mrb_value v;

  if (mrb_fixnum_p(val)) return val;
  v = convert_type(mrb, val, "Integer", method, TRUE);
  if (!mrb_obj_is_kind_of(mrb, v, mrb->fixnum_class)) {
    mrb_raisef(mrb, E_TYPE_ERROR, "can't convert %S to Integer (%S#%S gives %S)",
               val, val, mrb_str_new_cstr(mrb, method), v);
  }
  return v;
}
예제 #8
0
파일: mrb_bulk.c 프로젝트: fenicks/groonga
static mrb_value
mrb_grn_bulk_equal(mrb_state *mrb, mrb_value self)
{
  mrb_value mrb_other;

  mrb_get_args(mrb, "o", &mrb_other);

  if (!mrb_obj_is_kind_of(mrb, mrb_other, mrb_class(mrb, self))) {
    return mrb_false_value();
  }

  return mrb_bool_value(DATA_PTR(self) == DATA_PTR(mrb_other));
}
예제 #9
0
파일: kernel.c 프로젝트: kimhmadsen/mruby
/*
 *  call-seq:
 *     obj.is_a?(class)       -> true or false
 *     obj.kind_of?(class)    -> true or false
 *
 *  Returns <code>true</code> if <i>class</i> is the class of
 *  <i>obj</i>, or if <i>class</i> is one of the superclasses of
 *  <i>obj</i> or modules included in <i>obj</i>.
 *
 *     module M;    end
 *     class A
 *       include M
 *     end
 *     class B < A; end
 *     class C < B; end
 *     b = B.new
 *     b.instance_of? A   #=> false
 *     b.instance_of? B   #=> true
 *     b.instance_of? C   #=> false
 *     b.instance_of? M   #=> false
 *     b.kind_of? A       #=> true
 *     b.kind_of? B       #=> true
 *     b.kind_of? C       #=> false
 *     b.kind_of? M       #=> true
 */
mrb_value
mrb_obj_is_kind_of_m(mrb_state *mrb, mrb_value self)
{
  mrb_value arg;

  mrb_get_args(mrb, "o", &arg);
  if (mrb_obj_is_kind_of(mrb, self, mrb_class_ptr(arg))) {
    return mrb_true_value();
  }
  else {
    return mrb_false_value();
  }
}
예제 #10
0
파일: mrb4R.c 프로젝트: rcqls/mrb4R
int rbIsRVector(mrb_value rbobj) {
  mrb_value rbobj2;
  int i,n;
  
  if(!mrb_obj_is_kind_of(mrb,rbobj,mrb->array_class)) {
     if(!(mrb_obj_is_kind_of(mrb,rbobj,mrb->fixnum_class) || mrb_obj_is_kind_of(mrb,rbobj,mrb->float_class) || mrb_obj_is_kind_of(mrb,rbobj,mrb->string_class) || mrb_obj_is_kind_of(mrb,rbobj,mrb->true_class) || mrb_obj_is_kind_of(mrb,rbobj,mrb->false_class))) 
       return 0;
     rbobj2=mrb_ary_new_capa(mrb,1);
     mrb_ary_push(mrb,rbobj2,rbobj);
     rbobj=rbobj2;
     //Seems that the 3 previous lines could be replaced by:
     // return 1;
  }
  n=RARRAY_LEN(rbobj);
  for(i=0;i<n;i++) {
    rbobj2=mrb_ary_entry(rbobj,i);
    if(!(mrb_obj_is_kind_of(mrb,rbobj2,mrb->fixnum_class) || mrb_obj_is_kind_of(mrb,rbobj2,mrb->float_class) || mrb_obj_is_kind_of(mrb,rbobj2,mrb->string_class) || mrb_obj_is_kind_of(mrb,rbobj2,mrb->true_class) || mrb_obj_is_kind_of(mrb,rbobj2,mrb->false_class))) {
      return 0;
    }
  }
  return 1;
}
예제 #11
0
파일: object.c 프로젝트: flexfrank/mruby
mrb_value
mrb_check_to_integer(mrb_state *mrb, mrb_value val, const char *method)
{
    mrb_value v;

    if (mrb_type(val) == MRB_TT_FIXNUM) return val;
    v = convert_type(mrb, val, "Integer", method, FALSE);
    if (mrb_nil_p(v)) return (v);
    if (!mrb_obj_is_kind_of(mrb, v, mrb_obj_class(mrb, v))) {
      return mrb_nil_value();
    }
    return v;
}
mrb_value
mrb_Pi_WiringPiNodeStruct_disown(mrb_state* mrb, mrb_value self) {
  mrb_value ruby_object;
  mrb_get_args(mrb, "o", &ruby_object);

  if (!mrb_obj_is_kind_of(mrb, ruby_object, mrb_class_ptr(self))) {
    mrb_raise(mrb, E_TYPE_ERROR, "Pi::WiringPiNodeStruct.disown only accepts objects of type Pi::WiringPiNodeStruct");
    return mrb_nil_value();
  }

  ((mruby_to_native_ref*)(DATA_PTR(ruby_object)))->belongs_to_ruby = FALSE;

  return mrb_nil_value();
}
예제 #13
0
mrb_value
mrb_SDL_SDLTexture_disown(mrb_state* mrb, mrb_value self) {
    mrb_value ruby_object;
    mrb_get_args(mrb, "o", &ruby_object);

    if (!mrb_obj_is_kind_of(mrb, ruby_object, mrb_class_ptr(self))) {
        mrb_raise(mrb, E_TYPE_ERROR, "SDL::SDLTexture.disown only accepts objects of type SDL::SDLTexture");
        return mrb_nil_value();
    }

    ((mruby_to_native_ref*)(DATA_PTR(ruby_object)))->belongs_to_ruby = FALSE;

    return mrb_nil_value();
}
예제 #14
0
파일: object.c 프로젝트: drvo/mruby
static mrb_value
mrb_to_integer(mrb_state *mrb, mrb_value val, const char *method)
{
    mrb_value v;

    if (mrb_fixnum_p(val)) return val;
    v = convert_type(mrb, val, "Integer", method, TRUE);
    if (!mrb_obj_is_kind_of(mrb, v, mrb->fixnum_class)) {
      const char *cname = mrb_obj_classname(mrb, val);
      mrb_raisef(mrb, E_TYPE_ERROR, "can't convert %s to Integer (%s#%s gives %s)",
               cname, cname, method, mrb_obj_classname(mrb, v));
    }
    return v;
}
예제 #15
0
mrb_value
mrb_Curses_MEVENT_disown(mrb_state* mrb, mrb_value self) {
  mrb_value ruby_object = mrb_nil_value();
  mrb_get_args(mrb, "o", &ruby_object);

  if (!mrb_obj_is_kind_of(mrb, ruby_object, mrb_class_ptr(self))) {
    mrb_raise(mrb, E_TYPE_ERROR, "Curses::MEVENT.disown only accepts objects of type Curses::MEVENT");
    return mrb_nil_value();
  }

  ((mruby_to_native_ref*)(DATA_PTR(ruby_object)))->belongs_to_ruby = FALSE;

  return mrb_nil_value();
}
예제 #16
0
/* set_num_texture_formats
 *
 * Parameters:
 * - value: Uint32
 */
mrb_value
mrb_SDL_SDLRendererInfo_set_num_texture_formats(mrb_state* mrb, mrb_value self) {
  struct SDL_RendererInfo * native_self = mruby_unbox_SDL_RendererInfo(self);
  mrb_value ruby_field;

  mrb_get_args(mrb, "o", &ruby_field);

  /* type checking */
  if (!mrb_obj_is_kind_of(mrb, ruby_field, mrb->fixnum_class)) { mrb_raise(mrb, E_TYPE_ERROR, "Fixnum expected"); return mrb_nil_value(); }

  Uint32 native_field = mrb_fixnum(ruby_field);

  native_self->num_texture_formats = native_field;

  return ruby_field;
}
/* set_checkout_options
 *
 * Parameters:
 * - value: int
 */
mrb_value
mrb_Git_StashApplyOptions_set_checkout_options(mrb_state* mrb, mrb_value self) {
  git_stash_apply_options * native_self = mruby_unbox_git_stash_apply_options(self);
  mrb_value checkout_options;
  git_checkout_options * native_checkout_options;

  mrb_get_args(mrb, "o", &checkout_options);
  if (!mrb_obj_is_kind_of(mrb, checkout_options, CheckoutOptions_class(mrb))) {
    mrb_raise(mrb, E_TYPE_ERROR, "CheckoutOptions expected");
    return mrb_nil_value();
  }

  native_self->checkout_options = *mruby_unbox_git_checkout_options(checkout_options);
  
  return checkout_options;
}
예제 #18
0
/* set_BytesPerPixel
 *
 * Parameters:
 * - value: Uint8
 */
mrb_value
mrb_SDL_SDLPixelFormat_set_BytesPerPixel(mrb_state* mrb, mrb_value self) {
  struct SDL_PixelFormat * native_self = mruby_unbox_SDL_PixelFormat(self);
  mrb_value ruby_field;

  mrb_get_args(mrb, "o", &ruby_field);

  /* type checking */
  if (!mrb_obj_is_kind_of(mrb, ruby_field, mrb->fixnum_class)) { mrb_raise(mrb, E_TYPE_ERROR, "Fixnum expected"); return mrb_nil_value(); }

  Uint8 native_field = mrb_fixnum(ruby_field);

  native_self->BytesPerPixel = native_field;

  return ruby_field;
}
/* set_flags
 *
 * Parameters:
 * - value: Uint32
 */
mrb_value
mrb_SDL_SDLMessageBoxButtonData_set_flags(mrb_state* mrb, mrb_value self) {
  SDL_MessageBoxButtonData * native_self = mruby_unbox_SDL_MessageBoxButtonData(self);
  mrb_value ruby_field;

  mrb_get_args(mrb, "o", &ruby_field);

  /* type checking */
  if (!mrb_obj_is_kind_of(mrb, ruby_field, mrb->fixnum_class)) { mrb_raise(mrb, E_TYPE_ERROR, "Fixnum expected"); return mrb_nil_value(); }

  Uint32 native_field = mrb_fixnum(ruby_field);

  native_self->flags = native_field;

  return ruby_field;
}
예제 #20
0
/* set_major
 *
 * Parameters:
 * - value: Uint8
 */
mrb_value
mrb_SDL_SDLVersion_set_major(mrb_state* mrb, mrb_value self) {
  struct SDL_version * native_self = mruby_unbox_SDL_version(self);
  mrb_value ruby_field;

  mrb_get_args(mrb, "o", &ruby_field);

  /* type checking */
  if (!mrb_obj_is_kind_of(mrb, ruby_field, mrb->fixnum_class)) { mrb_raise(mrb, E_TYPE_ERROR, "Fixnum expected"); return mrb_nil_value(); }

  Uint8 native_field = mrb_fixnum(ruby_field);

  native_self->major = native_field;

  return ruby_field;
}
예제 #21
0
/* set_format
 *
 * Parameters:
 * - value: Uint32
 */
mrb_value
mrb_SDL_SDLDisplayMode_set_format(mrb_state* mrb, mrb_value self) {
  SDL_DisplayMode * native_self = mruby_unbox_SDL_DisplayMode(self);
  mrb_value ruby_field;

  mrb_get_args(mrb, "o", &ruby_field);

  /* type checking */
  if (!mrb_obj_is_kind_of(mrb, ruby_field, mrb->fixnum_class)) { mrb_raise(mrb, E_TYPE_ERROR, "Fixnum expected"); return mrb_nil_value(); }

  Uint32 native_field = mrb_fixnum(ruby_field);

  native_self->format = native_field;

  return ruby_field;
}
예제 #22
0
mrb_value
mrb_SDL_SDLTexture_belongs_to_ruby(mrb_state* mrb, mrb_value self) {
    mrb_value ruby_object;
    mrb_get_args(mrb, "o", &ruby_object);

    if (!mrb_obj_is_kind_of(mrb, ruby_object, mrb_class_ptr(self))) {
        mrb_raise(mrb, E_TYPE_ERROR, "SDL::SDLTexture.belongs_to_ruby only accepts objects of type SDL::SDLTexture");
        return mrb_nil_value();
    }

    if ( ((mruby_to_native_ref*)(DATA_PTR(ruby_object)))->belongs_to_ruby ) {
        return mrb_true_value();
    } else {
        return mrb_false_value();
    }
}
/* set_attack_length
 *
 * Parameters:
 * - value: Uint16
 */
mrb_value
mrb_SDL_SDLHapticConstant_set_attack_length(mrb_state* mrb, mrb_value self) {
  struct SDL_HapticConstant * native_self = mruby_unbox_SDL_HapticConstant(self);
  mrb_value ruby_field;

  mrb_get_args(mrb, "o", &ruby_field);

  /* type checking */
  if (!mrb_obj_is_kind_of(mrb, ruby_field, mrb->fixnum_class)) { mrb_raise(mrb, E_TYPE_ERROR, "Fixnum expected"); return mrb_nil_value(); }

  Uint16 native_field = mrb_fixnum(ruby_field);

  native_self->attack_length = native_field;

  return ruby_field;
}
예제 #24
0
/* set_type
 *
 * Parameters:
 * - value: Uint32
 */
mrb_value
mrb_SDL_SDLSysWMEvent_set_type(mrb_state* mrb, mrb_value self) {
  struct SDL_SysWMEvent * native_self = mruby_unbox_SDL_SysWMEvent(self);
  mrb_value ruby_field;

  mrb_get_args(mrb, "o", &ruby_field);

  /* type checking */
  if (!mrb_obj_is_kind_of(mrb, ruby_field, mrb->fixnum_class)) { mrb_raise(mrb, E_TYPE_ERROR, "Fixnum expected"); return mrb_nil_value(); }

  Uint32 native_field = mrb_fixnum(ruby_field);

  native_self->type = native_field;

  return ruby_field;
}
예제 #25
0
static mrb_value
mrb_sdl2_video_surface_set_color_mod(mrb_state *mrb, mrb_value self)
{
    mrb_value color;
    SDL_Surface *s = mrb_sdl2_video_surface_get_ptr(mrb, self);
    mrb_get_args(mrb, "o", &color);
    if (!mrb_obj_is_kind_of(mrb, color, mrb_class_get_under(mrb, mod_SDL2, "RGB"))) {
        mrb_raise(mrb, E_TYPE_ERROR, "given 1st argument is unexpected type (expected RGB).");
    }
    uint8_t const r = mrb_fixnum(mrb_iv_get(mrb, color, mrb_intern(mrb, "@r", 2)));
    uint8_t const g = mrb_fixnum(mrb_iv_get(mrb, color, mrb_intern(mrb, "@g", 2)));
    uint8_t const b = mrb_fixnum(mrb_iv_get(mrb, color, mrb_intern(mrb, "@b", 2)));
    if (0 != SDL_SetSurfaceColorMod(s, r, g, b)) {
        mruby_sdl2_raise_error(mrb);
    }
    return self;
}
예제 #26
0
static void
os_each_object_cb(mrb_state *mrb, struct RBasic *obj, void *ud)
{
  struct os_each_object_data *d = (struct os_each_object_data*)ud;

  /* filter dead objects */
  if (is_dead(mrb, obj)) {
    return;
  }

  /* filter class kind if target module defined */
  if (d->target_module && !mrb_obj_is_kind_of(mrb, mrb_obj_value(obj), d->target_module)) {
    return;
  }

  mrb_yield(mrb, d->block, mrb_obj_value(obj));
  ++d->count;
}
/* set_a
 *
 * Parameters:
 * - value: unsigned int
 */
mrb_value
mrb_SDL_SDLTestRandomContext_set_a(mrb_state* mrb, mrb_value self) {
  SDLTest_RandomContext * native_self = mruby_unbox_SDLTest_RandomContext(self);
  mrb_value ruby_field;

  mrb_get_args(mrb, "o", &ruby_field);

  /* type checking */
  if (!mrb_obj_is_kind_of(mrb, ruby_field, mrb->fixnum_class)) {
    mrb_raise(mrb, E_TYPE_ERROR, "Fixnum expected");
    return mrb_nil_value();
  }

  unsigned int native_field = mrb_fixnum(ruby_field);

  native_self->a = native_field;

  return ruby_field;
}
예제 #28
0
/* set_msg
 *
 * Parameters:
 * - value: SDL_SysWMmsg *
 */
mrb_value
mrb_SDL_SDLSysWMEvent_set_msg(mrb_state* mrb, mrb_value self) {
  struct SDL_SysWMEvent * native_self = mruby_unbox_SDL_SysWMEvent(self);
  mrb_value ruby_field;

  mrb_get_args(mrb, "o", &ruby_field);

  /* type checking */
  if (!mrb_obj_is_kind_of(mrb, ruby_field, SDLSysWMmsg_class(mrb))) {
    mrb_raise(mrb, E_TYPE_ERROR, "SDLSysWMmsg expected");
    return mrb_nil_value();
  }

  SDL_SysWMmsg * native_field = (mrb_nil_p(ruby_field) ? NULL : mruby_unbox_SDL_SysWMmsg(ruby_field));

  native_self->msg = native_field;

  return ruby_field;
}
예제 #29
0
static mrb_value
object_equal(mrb_state *mrb, mrb_value self)
{
  grn_obj *object, *other_object;
  mrb_value mrb_other;

  mrb_get_args(mrb, "o", &mrb_other);
  if (!mrb_obj_is_kind_of(mrb, mrb_other, mrb_obj_class(mrb, self))) {
    return mrb_false_value();
  }

  object = DATA_PTR(self);
  other_object = DATA_PTR(mrb_other);
  if (object == other_object) {
    return mrb_true_value();
  } else {
    return mrb_false_value();
  }
}
예제 #30
0
/* set_name
 *
 * Parameters:
 * - value: const char *
 */
mrb_value
mrb_SDL_SDLRendererInfo_set_name(mrb_state* mrb, mrb_value self) {
  struct SDL_RendererInfo * native_self = mruby_unbox_SDL_RendererInfo(self);
  mrb_value ruby_field;

  mrb_get_args(mrb, "o", &ruby_field);

  /* type checking */
  if (!mrb_obj_is_kind_of(mrb, ruby_field, mrb->string_class)) {
    mrb_raise(mrb, E_TYPE_ERROR, "String expected");
    return mrb_nil_value();
  }

  const char * native_field = mrb_string_value_cstr(mrb, &ruby_field);

  native_self->name = native_field;

  return ruby_field;
}