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/object.c

    r331 r439  
    2525    return (mrb_symbol(v1) == mrb_symbol(v2));
    2626
     27#ifndef MRB_WITHOUT_FLOAT
    2728  case MRB_TT_FLOAT:
    2829    return (mrb_float(v1) == mrb_float(v2));
     30#endif
    2931
    3032  default:
     
    8284nil_to_s(mrb_state *mrb, mrb_value obj)
    8385{
    84   return mrb_str_new(mrb, 0, 0);
     86  return mrb_str_new_frozen(mrb, 0, 0);
    8587}
    8688
     
    8890nil_inspect(mrb_state *mrb, mrb_value obj)
    8991{
    90   return mrb_str_new_lit(mrb, "nil");
     92  return mrb_str_new_lit_frozen(mrb, "nil");
    9193}
    9294
     
    149151true_to_s(mrb_state *mrb, mrb_value obj)
    150152{
    151   return mrb_str_new_lit(mrb, "true");
     153  return mrb_str_new_lit_frozen(mrb, "true");
    152154}
    153155
     
    256258false_to_s(mrb_state *mrb, mrb_value obj)
    257259{
    258   return mrb_str_new_lit(mrb, "false");
     260  return mrb_str_new_lit_frozen(mrb, "false");
    259261}
    260262
     
    296298
    297299static mrb_value
    298 inspect_type(mrb_state *mrb, mrb_value val)
    299 {
    300   if (mrb_type(val) == MRB_TT_FALSE || mrb_type(val) == MRB_TT_TRUE) {
    301     return mrb_inspect(mrb, val);
    302   }
    303   else {
    304     return mrb_str_new_cstr(mrb, mrb_obj_classname(mrb, val));
    305   }
    306 }
    307 
    308 static mrb_value
    309300convert_type(mrb_state *mrb, mrb_value val, const char *tname, const char *method, mrb_bool raise)
    310301{
     
    314305  if (!mrb_respond_to(mrb, val, m)) {
    315306    if (raise) {
    316       mrb_raisef(mrb, E_TYPE_ERROR, "can't convert %S into %S", inspect_type(mrb, val), mrb_str_new_cstr(mrb, tname));
     307      mrb_raisef(mrb, E_TYPE_ERROR, "can't convert %Y into %s", val, tname);
    317308    }
    318309    return mrb_nil_value();
    319310  }
    320311  return mrb_funcall_argv(mrb, val, m, 0, 0);
    321 }
    322 
    323 MRB_API mrb_value
    324 mrb_check_to_integer(mrb_state *mrb, mrb_value val, const char *method)
    325 {
    326   mrb_value v;
    327 
    328   if (mrb_fixnum_p(val)) return val;
    329   v = convert_type(mrb, val, "Integer", method, FALSE);
    330   if (mrb_nil_p(v) || !mrb_fixnum_p(v)) {
    331     return mrb_nil_value();
    332   }
    333   return v;
    334312}
    335313
     
    342320  v = convert_type(mrb, val, tname, method, TRUE);
    343321  if (mrb_type(v) != type) {
    344     mrb_raisef(mrb, E_TYPE_ERROR, "%S cannot be converted to %S by #%S", val,
    345                mrb_str_new_cstr(mrb, tname), mrb_str_new_cstr(mrb, method));
     322    mrb_raisef(mrb, E_TYPE_ERROR, "%v cannot be converted to %s by #%s", val, tname, method);
    346323  }
    347324  return v;
     
    374351  {MRB_TT_SCLASS, "SClass"},
    375352  {MRB_TT_PROC,   "Proc"},
     353#ifndef MRB_WITHOUT_FLOAT
    376354  {MRB_TT_FLOAT,  "Float"},
     355#endif
    377356  {MRB_TT_ARRAY,  "Array"},
    378357  {MRB_TT_HASH,   "Hash"},
     
    406385          etype = "Fixnum";
    407386        }
    408         else if (mrb_type(x) == MRB_TT_SYMBOL) {
     387        else if (mrb_symbol_p(x)) {
    409388          etype = "Symbol";
    410389        }
     
    415394          etype = mrb_obj_classname(mrb, x);
    416395        }
    417         mrb_raisef(mrb, E_TYPE_ERROR, "wrong argument type %S (expected %S)",
    418                    mrb_str_new_cstr(mrb, etype), mrb_str_new_cstr(mrb, type->name));
     396        mrb_raisef(mrb, E_TYPE_ERROR, "wrong argument type %s (expected %s)",
     397                   etype, type->name);
    419398      }
    420399      type++;
    421400    }
    422     mrb_raisef(mrb, E_TYPE_ERROR, "unknown type %S (%S given)",
    423                mrb_fixnum_value(t), mrb_fixnum_value(mrb_type(x)));
     401    mrb_raisef(mrb, E_TYPE_ERROR, "unknown type %d (%d given)", t, mrb_type(x));
    424402  }
    425403}
     
    439417mrb_any_to_s(mrb_state *mrb, mrb_value obj)
    440418{
    441   mrb_value str = mrb_str_buf_new(mrb, 20);
     419  mrb_value str = mrb_str_new_capa(mrb, 20);
    442420  const char *cname = mrb_obj_classname(mrb, obj);
    443421
    444422  mrb_str_cat_lit(mrb, str, "#<");
    445423  mrb_str_cat_cstr(mrb, str, cname);
    446   mrb_str_cat_lit(mrb, str, ":");
    447   mrb_str_concat(mrb, str, mrb_ptr_to_str(mrb, mrb_ptr(obj)));
     424  if (!mrb_immediate_p(obj)) {
     425    mrb_str_cat_lit(mrb, str, ":");
     426    mrb_str_cat_str(mrb, str, mrb_ptr_to_str(mrb, mrb_ptr(obj)));
     427  }
    448428  mrb_str_cat_lit(mrb, str, ">");
    449429
     
    502482}
    503483
    504 static mrb_value
    505 mrb_to_integer(mrb_state *mrb, mrb_value val, const char *method)
    506 {
    507   mrb_value v;
    508 
    509   if (mrb_fixnum_p(val)) return val;
    510   v = convert_type(mrb, val, "Integer", method, TRUE);
    511   if (!mrb_obj_is_kind_of(mrb, v, mrb->fixnum_class)) {
    512     mrb_value type = inspect_type(mrb, val);
    513     mrb_raisef(mrb, E_TYPE_ERROR, "can't convert %S to Integer (%S#%S gives %S)",
    514                type, type, mrb_str_new_cstr(mrb, method), inspect_type(mrb, v));
    515   }
    516   return v;
    517 }
    518 
    519484MRB_API mrb_value
    520485mrb_to_int(mrb_state *mrb, mrb_value val)
    521486{
    522   return mrb_to_integer(mrb, val, "to_int");
    523 }
    524 
    525 MRB_API mrb_value
    526 mrb_convert_to_integer(mrb_state *mrb, mrb_value val, int base)
     487
     488  if (!mrb_fixnum_p(val)) {
     489#ifndef MRB_WITHOUT_FLOAT
     490    if (mrb_float_p(val)) {
     491      return mrb_flo_to_fixnum(mrb, val);
     492    }
     493#endif
     494    mrb_raisef(mrb, E_TYPE_ERROR, "can't convert %Y to Integer", val);
     495  }
     496  return val;
     497}
     498
     499MRB_API mrb_value
     500mrb_convert_to_integer(mrb_state *mrb, mrb_value val, mrb_int base)
    527501{
    528502  mrb_value tmp;
     
    530504  if (mrb_nil_p(val)) {
    531505    if (base != 0) goto arg_error;
    532       mrb_raise(mrb, E_TYPE_ERROR, "can't convert nil into Integer");
     506    mrb_raise(mrb, E_TYPE_ERROR, "can't convert nil into Integer");
    533507  }
    534508  switch (mrb_type(val)) {
     509#ifndef MRB_WITHOUT_FLOAT
    535510    case MRB_TT_FLOAT:
    536511      if (base != 0) goto arg_error;
    537       else {
    538         mrb_float f = mrb_float(val);
    539         if (FIXABLE_FLOAT(f)) {
    540           break;
    541         }
    542       }
    543512      return mrb_flo_to_fixnum(mrb, val);
     513#endif
    544514
    545515    case MRB_TT_FIXNUM:
     
    563533    mrb_raise(mrb, E_ARGUMENT_ERROR, "base specified for non string value");
    564534  }
    565   tmp = convert_type(mrb, val, "Integer", "to_int", FALSE);
    566   if (mrb_nil_p(tmp)) {
    567     return mrb_to_integer(mrb, val, "to_i");
    568   }
    569   return tmp;
     535  /* to raise TypeError */
     536  return mrb_to_int(mrb, val);
    570537}
    571538
     
    576543}
    577544
     545#ifndef MRB_WITHOUT_FLOAT
    578546MRB_API mrb_value
    579547mrb_Float(mrb_state *mrb, mrb_value val)
     
    596564  }
    597565}
     566#endif
     567
     568MRB_API mrb_value
     569mrb_to_str(mrb_state *mrb, mrb_value val)
     570{
     571  return mrb_ensure_string_type(mrb, val);
     572}
     573
     574/* obsolete: use mrb_ensure_string_type() instead */
     575MRB_API mrb_value
     576mrb_string_type(mrb_state *mrb, mrb_value str)
     577{
     578  return mrb_ensure_string_type(mrb, str);
     579}
     580
     581MRB_API mrb_value
     582mrb_ensure_string_type(mrb_state *mrb, mrb_value str)
     583{
     584  if (!mrb_string_p(str)) {
     585    mrb_raisef(mrb, E_TYPE_ERROR, "%Y cannot be converted to String", str);
     586  }
     587  return str;
     588}
     589
     590MRB_API mrb_value
     591mrb_check_string_type(mrb_state *mrb, mrb_value str)
     592{
     593  if (!mrb_string_p(str)) return mrb_nil_value();
     594  return str;
     595}
     596
     597MRB_API mrb_value
     598mrb_ensure_array_type(mrb_state *mrb, mrb_value ary)
     599{
     600  if (!mrb_array_p(ary)) {
     601    mrb_raisef(mrb, E_TYPE_ERROR, "%Y cannot be converted to Array", ary);
     602  }
     603  return ary;
     604}
     605
     606MRB_API mrb_value
     607mrb_check_array_type(mrb_state *mrb, mrb_value ary)
     608{
     609  if (!mrb_array_p(ary)) return mrb_nil_value();
     610  return ary;
     611}
     612
     613MRB_API mrb_value
     614mrb_ensure_hash_type(mrb_state *mrb, mrb_value hash)
     615{
     616  if (!mrb_hash_p(hash)) {
     617    mrb_raisef(mrb, E_TYPE_ERROR, "%Y cannot be converted to Hash", hash);
     618  }
     619  return hash;
     620}
     621
     622MRB_API mrb_value
     623mrb_check_hash_type(mrb_state *mrb, mrb_value hash)
     624{
     625  if (!mrb_hash_p(hash)) return mrb_nil_value();
     626  return hash;
     627}
    598628
    599629MRB_API mrb_value
Note: See TracChangeset for help on using the changeset viewer.