Changeset 439 for EcnlProtoTool/trunk/mruby-2.1.1/src/object.c
- Timestamp:
- Jul 9, 2020, 8:51:43 AM (4 years ago)
- 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 25 25 return (mrb_symbol(v1) == mrb_symbol(v2)); 26 26 27 #ifndef MRB_WITHOUT_FLOAT 27 28 case MRB_TT_FLOAT: 28 29 return (mrb_float(v1) == mrb_float(v2)); 30 #endif 29 31 30 32 default: … … 82 84 nil_to_s(mrb_state *mrb, mrb_value obj) 83 85 { 84 return mrb_str_new (mrb, 0, 0);86 return mrb_str_new_frozen(mrb, 0, 0); 85 87 } 86 88 … … 88 90 nil_inspect(mrb_state *mrb, mrb_value obj) 89 91 { 90 return mrb_str_new_lit (mrb, "nil");92 return mrb_str_new_lit_frozen(mrb, "nil"); 91 93 } 92 94 … … 149 151 true_to_s(mrb_state *mrb, mrb_value obj) 150 152 { 151 return mrb_str_new_lit (mrb, "true");153 return mrb_str_new_lit_frozen(mrb, "true"); 152 154 } 153 155 … … 256 258 false_to_s(mrb_state *mrb, mrb_value obj) 257 259 { 258 return mrb_str_new_lit (mrb, "false");260 return mrb_str_new_lit_frozen(mrb, "false"); 259 261 } 260 262 … … 296 298 297 299 static 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_value309 300 convert_type(mrb_state *mrb, mrb_value val, const char *tname, const char *method, mrb_bool raise) 310 301 { … … 314 305 if (!mrb_respond_to(mrb, val, m)) { 315 306 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); 317 308 } 318 309 return mrb_nil_value(); 319 310 } 320 311 return mrb_funcall_argv(mrb, val, m, 0, 0); 321 }322 323 MRB_API mrb_value324 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;334 312 } 335 313 … … 342 320 v = convert_type(mrb, val, tname, method, TRUE); 343 321 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); 346 323 } 347 324 return v; … … 374 351 {MRB_TT_SCLASS, "SClass"}, 375 352 {MRB_TT_PROC, "Proc"}, 353 #ifndef MRB_WITHOUT_FLOAT 376 354 {MRB_TT_FLOAT, "Float"}, 355 #endif 377 356 {MRB_TT_ARRAY, "Array"}, 378 357 {MRB_TT_HASH, "Hash"}, … … 406 385 etype = "Fixnum"; 407 386 } 408 else if (mrb_ type(x) == MRB_TT_SYMBOL) {387 else if (mrb_symbol_p(x)) { 409 388 etype = "Symbol"; 410 389 } … … 415 394 etype = mrb_obj_classname(mrb, x); 416 395 } 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); 419 398 } 420 399 type++; 421 400 } 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)); 424 402 } 425 403 } … … 439 417 mrb_any_to_s(mrb_state *mrb, mrb_value obj) 440 418 { 441 mrb_value str = mrb_str_ buf_new(mrb, 20);419 mrb_value str = mrb_str_new_capa(mrb, 20); 442 420 const char *cname = mrb_obj_classname(mrb, obj); 443 421 444 422 mrb_str_cat_lit(mrb, str, "#<"); 445 423 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 } 448 428 mrb_str_cat_lit(mrb, str, ">"); 449 429 … … 502 482 } 503 483 504 static mrb_value505 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 519 484 MRB_API mrb_value 520 485 mrb_to_int(mrb_state *mrb, mrb_value val) 521 486 { 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 499 MRB_API mrb_value 500 mrb_convert_to_integer(mrb_state *mrb, mrb_value val, mrb_int base) 527 501 { 528 502 mrb_value tmp; … … 530 504 if (mrb_nil_p(val)) { 531 505 if (base != 0) goto arg_error; 532 506 mrb_raise(mrb, E_TYPE_ERROR, "can't convert nil into Integer"); 533 507 } 534 508 switch (mrb_type(val)) { 509 #ifndef MRB_WITHOUT_FLOAT 535 510 case MRB_TT_FLOAT: 536 511 if (base != 0) goto arg_error; 537 else {538 mrb_float f = mrb_float(val);539 if (FIXABLE_FLOAT(f)) {540 break;541 }542 }543 512 return mrb_flo_to_fixnum(mrb, val); 513 #endif 544 514 545 515 case MRB_TT_FIXNUM: … … 563 533 mrb_raise(mrb, E_ARGUMENT_ERROR, "base specified for non string value"); 564 534 } 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); 570 537 } 571 538 … … 576 543 } 577 544 545 #ifndef MRB_WITHOUT_FLOAT 578 546 MRB_API mrb_value 579 547 mrb_Float(mrb_state *mrb, mrb_value val) … … 596 564 } 597 565 } 566 #endif 567 568 MRB_API mrb_value 569 mrb_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 */ 575 MRB_API mrb_value 576 mrb_string_type(mrb_state *mrb, mrb_value str) 577 { 578 return mrb_ensure_string_type(mrb, str); 579 } 580 581 MRB_API mrb_value 582 mrb_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 590 MRB_API mrb_value 591 mrb_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 597 MRB_API mrb_value 598 mrb_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 606 MRB_API mrb_value 607 mrb_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 613 MRB_API mrb_value 614 mrb_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 622 MRB_API mrb_value 623 mrb_check_hash_type(mrb_state *mrb, mrb_value hash) 624 { 625 if (!mrb_hash_p(hash)) return mrb_nil_value(); 626 return hash; 627 } 598 628 599 629 MRB_API mrb_value
Note:
See TracChangeset
for help on using the changeset viewer.