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/src/etc.c

    r331 r439  
    11/*
    2 ** etc.c -
     2** etc.c
    33**
    44** See Copyright Notice in mruby.h
     
    99#include <mruby/data.h>
    1010#include <mruby/class.h>
    11 #include <mruby/re.h>
    12 #include <mruby/irep.h>
    1311
    1412MRB_API struct RData*
     
    2725mrb_data_check_type(mrb_state *mrb, mrb_value obj, const mrb_data_type *type)
    2826{
    29   if (mrb_type(obj) != MRB_TT_DATA) {
     27  if (!mrb_data_p(obj)) {
    3028    mrb_check_type(mrb, obj, MRB_TT_DATA);
    3129  }
     
    3432
    3533    if (t2) {
    36       mrb_raisef(mrb, E_TYPE_ERROR, "wrong argument type %S (expected %S)",
    37                  mrb_str_new_cstr(mrb, t2->struct_name), mrb_str_new_cstr(mrb, type->struct_name));
     34      mrb_raisef(mrb, E_TYPE_ERROR, "wrong argument type %s (expected %s)",
     35                 t2->struct_name, type->struct_name);
    3836    }
    3937    else {
    40       struct RClass *c = mrb_class(mrb, obj);
    41 
    42       mrb_raisef(mrb, E_TYPE_ERROR, "uninitialized %S (expected %S)",
    43                  mrb_obj_value(c), mrb_str_new_cstr(mrb, type->struct_name));
     38      mrb_raisef(mrb, E_TYPE_ERROR, "uninitialized %t (expected %s)",
     39                 obj, type->struct_name);
    4440    }
    4541  }
     
    4945mrb_data_check_get_ptr(mrb_state *mrb, mrb_value obj, const mrb_data_type *type)
    5046{
    51   if (mrb_type(obj) != MRB_TT_DATA) {
     47  if (!mrb_data_p(obj)) {
    5248    return NULL;
    5349  }
     
    6864mrb_obj_to_sym(mrb_state *mrb, mrb_value name)
    6965{
    70   mrb_sym id;
    71 
    72   switch (mrb_type(name)) {
    73     default:
    74       name = mrb_check_string_type(mrb, name);
    75       if (mrb_nil_p(name)) {
    76         name = mrb_inspect(mrb, name);
    77         mrb_raisef(mrb, E_TYPE_ERROR, "%S is not a symbol", name);
    78       }
    79       /* fall through */
    80     case MRB_TT_STRING:
    81       name = mrb_str_intern(mrb, name);
    82       /* fall through */
    83     case MRB_TT_SYMBOL:
    84       id = mrb_symbol(name);
    85   }
    86   return id;
     66  if (mrb_symbol_p(name)) return mrb_symbol(name);
     67  if (mrb_string_p(name)) return mrb_intern_str(mrb, name);
     68  mrb_raisef(mrb, E_TYPE_ERROR, "%!v is not a symbol nor a string", name);
     69  return 0;  /* not reached */
    8770}
    8871
    8972MRB_API mrb_int
     73#ifdef MRB_WITHOUT_FLOAT
     74mrb_fixnum_id(mrb_int f)
     75#else
    9076mrb_float_id(mrb_float f)
     77#endif
    9178{
    9279  const char *p = (const char*)&f;
    9380  int len = sizeof(f);
    94   mrb_int id = 0;
    95 
     81  uint32_t id = 0;
     82
     83#ifndef MRB_WITHOUT_FLOAT
     84  /* normalize -0.0 to 0.0 */
     85  if (f == 0) f = 0.0;
     86#endif
    9687  while (len--) {
    9788    id = id*65599 + *p;
     
    10091  id = id + (id>>5);
    10192
    102   return id;
     93  return (mrb_int)id;
    10394}
    10495
     
    124115    return MakeID(mrb_symbol(obj));
    125116  case MRB_TT_FIXNUM:
     117#ifdef MRB_WITHOUT_FLOAT
     118    return MakeID(mrb_fixnum_id(mrb_fixnum(obj)));
     119#else
    126120    return MakeID2(mrb_float_id((mrb_float)mrb_fixnum(obj)), MRB_TT_FLOAT);
    127121  case MRB_TT_FLOAT:
    128122    return MakeID(mrb_float_id(mrb_float(obj)));
     123#endif
    129124  case MRB_TT_STRING:
    130125  case MRB_TT_OBJECT:
     
    147142
    148143#ifdef MRB_WORD_BOXING
     144#ifndef MRB_WITHOUT_FLOAT
    149145MRB_API mrb_value
    150146mrb_word_boxing_float_value(mrb_state *mrb, mrb_float f)
     
    154150  v.value.p = mrb_obj_alloc(mrb, MRB_TT_FLOAT, mrb->float_class);
    155151  v.value.fp->f = f;
     152  MRB_SET_FROZEN_FLAG(v.value.bp);
    156153  return v;
    157154}
     
    164161  nf->c = mrb->float_class;
    165162  nf->f = f;
     163  MRB_SET_FROZEN_FLAG(nf);
    166164  return mrb_obj_value(nf);
    167165}
     166#endif  /* MRB_WITHOUT_FLOAT */
    168167
    169168MRB_API mrb_value
     
    177176}
    178177#endif  /* MRB_WORD_BOXING */
    179 
    180 MRB_API mrb_bool
    181 mrb_regexp_p(mrb_state *mrb, mrb_value v)
    182 {
    183   if (mrb->flags & MRB_STATE_NO_REGEXP) {
    184     return FALSE;
    185   }
    186   if ((mrb->flags & MRB_STATE_REGEXP) || mrb_class_defined(mrb, REGEXP_CLASS)) {
    187     mrb->flags |= MRB_STATE_REGEXP;
    188     return mrb_obj_is_kind_of(mrb, v, mrb_class_get(mrb, REGEXP_CLASS));
    189   }
    190   else {
    191     mrb->flags |= MRB_STATE_REGEXP;
    192     mrb->flags |= MRB_STATE_NO_REGEXP;
    193   }
    194   return FALSE;
    195 }
    196178
    197179#if defined _MSC_VER && _MSC_VER < 1900
Note: See TracChangeset for help on using the changeset viewer.