diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2019-02-05 14:20:58 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2019-02-06 22:07:11 +0900 |
| commit | 905fef2669f4dd0efb71205219872d9fb4b135b6 (patch) | |
| tree | 2007829229cf4eaad06041d0f9c69e90aa4911cf /src/string.c | |
| parent | 02fbb2c21134ad0e8df0b723a4b11f7d7e21edcd (diff) | |
| download | mruby-905fef2669f4dd0efb71205219872d9fb4b135b6.tar.gz mruby-905fef2669f4dd0efb71205219872d9fb4b135b6.zip | |
Reduce invocation of `mrb_convert_type()` from `mrb_str_to_str()`.
Diffstat (limited to 'src/string.c')
| -rw-r--r-- | src/string.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/src/string.c b/src/string.c index d26d6f4c9..19962fb30 100644 --- a/src/string.c +++ b/src/string.c @@ -20,6 +20,7 @@ #include <mruby/class.h> #include <mruby/range.h> #include <mruby/string.h> +#include <mruby/numeric.h> #include <mruby/re.h> typedef struct mrb_shared_string { @@ -972,13 +973,22 @@ mrb_str_equal_m(mrb_state *mrb, mrb_value str1) return mrb_bool_value(mrb_str_equal(mrb, str1, str2)); } /* ---------------------------------- */ +mrb_value mrb_mod_to_s(mrb_state *mrb, mrb_value klass); + MRB_API mrb_value mrb_str_to_str(mrb_state *mrb, mrb_value str) { - if (!mrb_string_p(str)) { + switch (mrb_type(str)) { + case MRB_TT_STRING: + return str; + case MRB_TT_FIXNUM: + return mrb_fixnum_to_str(mrb, str, 10); + case MRB_TT_CLASS: + case MRB_TT_MODULE: + return mrb_mod_to_s(mrb, str); + default: return mrb_convert_type(mrb, str, MRB_TT_STRING, "String", "to_s"); } - return str; } MRB_API const char* |
