Ignore:
Timestamp:
Jul 9, 2020, 8:51:43 AM (4 years ago)
Author:
coas-nagasima
Message:

mrubyを2.1.1に更新

Location:
EcnlProtoTool/trunk/mruby-2.1.1
Files:
1 edited
1 moved

Legend:

Unmodified
Added
Removed
  • EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-object-ext/src/object.c

    r331 r439  
    22#include <mruby/array.h>
    33#include <mruby/class.h>
     4#include <mruby/hash.h>
    45#include <mruby/proc.h>
    56
     
    1718}
    1819
     20#ifndef MRB_WITHOUT_FLOAT
    1921/*
    2022 *  call-seq:
     
    2830{
    2931  return mrb_float_value(mrb, 0.0);
     32}
     33#endif
     34
     35/*
     36 *  call-seq:
     37 *     nil.to_h    -> {}
     38 *
     39 *  Always returns an empty hash.
     40 */
     41
     42static mrb_value
     43nil_to_h(mrb_state *mrb, mrb_value obj)
     44{
     45  return mrb_hash_new(mrb);
    3046}
    3147
     
    4157{
    4258  return mrb_fixnum_value(0);
     59}
     60
     61/*
     62 *  call-seq:
     63 *     obj.itself -> an_object
     64 *
     65 *  Returns <i>obj</i>.
     66 *
     67 *      string = 'my string' #=> "my string"
     68 *      string.itself.object_id == string.object_id #=> true
     69 *
     70 */
     71static mrb_value
     72mrb_f_itself(mrb_state *mrb, mrb_value self)
     73{
     74  return self;
    4375}
    4476
     
    68100  mrb_value blk;
    69101  struct RClass *c;
    70   mrb_value args;
    71102
    72   mrb_get_args(mrb, "*&", &argv, &argc, &blk);
    73 
    74   if (mrb_nil_p(blk)) {
    75     mrb_raise(mrb, E_ARGUMENT_ERROR, "no block given");
    76   }
     103  mrb_get_args(mrb, "*&!", &argv, &argc, &blk);
    77104
    78105  switch (mrb_type(self)) {
    79106  case MRB_TT_SYMBOL:
    80107  case MRB_TT_FIXNUM:
     108#ifndef MRB_WITHOUT_FLOAT
    81109  case MRB_TT_FLOAT:
     110#endif
    82111    c = NULL;
    83112    break;
     
    86115    break;
    87116  }
    88   args = mrb_ary_new_from_values(mrb, argc, argv);
    89   argv = RARRAY_PTR(args);
    90117  mrb->c->ci->target_class = c;
    91118  return mrb_yield_cont(mrb, blk, self, argc, argv);
     
    98125
    99126  mrb_define_method(mrb, n, "to_a", nil_to_a,       MRB_ARGS_NONE());
     127#ifndef MRB_WITHOUT_FLOAT
    100128  mrb_define_method(mrb, n, "to_f", nil_to_f,       MRB_ARGS_NONE());
     129#endif
     130  mrb_define_method(mrb, n, "to_h", nil_to_h,       MRB_ARGS_NONE());
    101131  mrb_define_method(mrb, n, "to_i", nil_to_i,       MRB_ARGS_NONE());
    102132
    103   mrb_define_method(mrb, mrb->kernel_module, "instance_exec", mrb_obj_instance_exec, MRB_ARGS_ANY() | MRB_ARGS_BLOCK());
     133  mrb_define_method(mrb, mrb->kernel_module, "itself", mrb_f_itself, MRB_ARGS_NONE());
     134
     135  mrb_define_method(mrb, mrb_class_get(mrb, "BasicObject"), "instance_exec", mrb_obj_instance_exec, MRB_ARGS_ANY() | MRB_ARGS_BLOCK());
    104136}
    105137
Note: See TracChangeset for help on using the changeset viewer.