diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2021-08-30 19:33:56 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2021-09-01 07:00:54 +0900 |
| commit | 8c296a3818763f77d8bd056ef3bb9da8d904a048 (patch) | |
| tree | e3615332f1e0397486faea7c7239217428da9fe2 | |
| parent | 37a7ff228b4b8b5c0230ef5a80ba1312763d93f8 (diff) | |
| download | mruby-8c296a3818763f77d8bd056ef3bb9da8d904a048.tar.gz mruby-8c296a3818763f77d8bd056ef3bb9da8d904a048.zip | |
object.c: remove `mrb_convert_to_integer()' function.
And merged to `mrb_f_integer()` which is only usage of the function.
| -rw-r--r-- | include/mruby.h | 1 | ||||
| -rw-r--r-- | mrbgems/mruby-kernel-ext/src/kernel.c | 40 | ||||
| -rw-r--r-- | src/object.c | 40 |
3 files changed, 37 insertions, 44 deletions
diff --git a/include/mruby.h b/include/mruby.h index dfc8eaa76..13b96ac26 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -1249,7 +1249,6 @@ MRB_API mrb_sym mrb_obj_to_sym(mrb_state *mrb, mrb_value name); MRB_API mrb_bool mrb_obj_eq(mrb_state *mrb, mrb_value a, mrb_value b); MRB_API mrb_bool mrb_obj_equal(mrb_state *mrb, mrb_value a, mrb_value b); MRB_API mrb_bool mrb_equal(mrb_state *mrb, mrb_value obj1, mrb_value obj2); -MRB_API mrb_value mrb_convert_to_integer(mrb_state *mrb, mrb_value val, mrb_int base); #ifndef MRB_NO_FLOAT MRB_API mrb_value mrb_to_float(mrb_state *mrb, mrb_value val); #endif diff --git a/mrbgems/mruby-kernel-ext/src/kernel.c b/mrbgems/mruby-kernel-ext/src/kernel.c index 17692a801..2d93e4fef 100644 --- a/mrbgems/mruby-kernel-ext/src/kernel.c +++ b/mrbgems/mruby-kernel-ext/src/kernel.c @@ -3,6 +3,8 @@ #include <mruby/array.h> #include <mruby/hash.h> #include <mruby/range.h> +#include <mruby/string.h> +#include <mruby/numeric.h> #include <mruby/presym.h> static mrb_value @@ -107,11 +109,43 @@ mrb_f_method(mrb_state *mrb, mrb_value self) static mrb_value mrb_f_integer(mrb_state *mrb, mrb_value self) { - mrb_value arg; + mrb_value val, tmp; mrb_int base = 0; - mrb_get_args(mrb, "o|i", &arg, &base); - return mrb_convert_to_integer(mrb, arg, base); + mrb_get_args(mrb, "o|i", &val, &base); + if (mrb_nil_p(val)) { + if (base != 0) goto arg_error; + mrb_raise(mrb, E_TYPE_ERROR, "can't convert nil into Integer"); + } + switch (mrb_type(val)) { +#ifndef MRB_NO_FLOAT + case MRB_TT_FLOAT: + if (base != 0) goto arg_error; + return mrb_float_to_integer(mrb, val); +#endif + + case MRB_TT_INTEGER: + if (base != 0) goto arg_error; + return val; + + case MRB_TT_STRING: + string_conv: + return mrb_str_to_inum(mrb, val, base, TRUE); + + default: + break; + } + if (base != 0) { + tmp = mrb_obj_as_string(mrb, val); + if (mrb_string_p(tmp)) { + val = tmp; + goto string_conv; + } +arg_error: + mrb_raise(mrb, E_ARGUMENT_ERROR, "base specified for non string value"); + } + /* to raise TypeError */ + return mrb_to_int(mrb, val); } #ifndef MRB_NO_FLOAT diff --git a/src/object.c b/src/object.c index d84450bcc..160383ad2 100644 --- a/src/object.c +++ b/src/object.c @@ -495,46 +495,6 @@ mrb_to_int(mrb_state *mrb, mrb_value val) return val; } -MRB_API mrb_value -mrb_convert_to_integer(mrb_state *mrb, mrb_value val, mrb_int base) -{ - mrb_value tmp; - - if (mrb_nil_p(val)) { - if (base != 0) goto arg_error; - mrb_raise(mrb, E_TYPE_ERROR, "can't convert nil into Integer"); - } - switch (mrb_type(val)) { -#ifndef MRB_NO_FLOAT - case MRB_TT_FLOAT: - if (base != 0) goto arg_error; - return mrb_float_to_integer(mrb, val); -#endif - - case MRB_TT_INTEGER: - if (base != 0) goto arg_error; - return val; - - case MRB_TT_STRING: - string_conv: - return mrb_str_to_inum(mrb, val, base, TRUE); - - default: - break; - } - if (base != 0) { - tmp = mrb_check_string_type(mrb, val); - if (!mrb_nil_p(tmp)) { - val = tmp; - goto string_conv; - } -arg_error: - mrb_raise(mrb, E_ARGUMENT_ERROR, "base specified for non string value"); - } - /* to raise TypeError */ - return mrb_to_int(mrb, val); -} - #ifndef MRB_NO_FLOAT MRB_API mrb_value mrb_to_float(mrb_state *mrb, mrb_value val) |
