summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJun Hiroe <[email protected]>2014-10-29 00:59:02 +0900
committerJun Hiroe <[email protected]>2014-10-29 01:30:30 +0900
commit5235e54137ef8f41f4e546df0a6a957d3162ab1e (patch)
tree74afe62725078f6144442b4431dbad1d6058a757
parentaec12c30e2258148ea8b2a866a1f39b103c7afd7 (diff)
downloadmruby-5235e54137ef8f41f4e546df0a6a957d3162ab1e.tar.gz
mruby-5235e54137ef8f41f4e546df0a6a957d3162ab1e.zip
Fix mrb_convert_to_integer.
-rw-r--r--include/mruby.h1
-rw-r--r--src/object.c8
2 files changed, 7 insertions, 2 deletions
diff --git a/include/mruby.h b/include/mruby.h
index 2fd0a4af7..dd7cdab08 100644
--- a/include/mruby.h
+++ b/include/mruby.h
@@ -316,6 +316,7 @@ MRB_API mrb_sym mrb_obj_to_sym(mrb_state *mrb, mrb_value name);
MRB_API mrb_bool mrb_obj_eq(mrb_state*, mrb_value, mrb_value);
MRB_API mrb_bool mrb_obj_equal(mrb_state*, mrb_value, mrb_value);
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, int base);
MRB_API mrb_value mrb_Integer(mrb_state *mrb, mrb_value val);
MRB_API mrb_value mrb_Float(mrb_state *mrb, mrb_value val);
MRB_API mrb_value mrb_inspect(mrb_state *mrb, mrb_value obj);
diff --git a/src/object.c b/src/object.c
index 143acfaa4..c5fb74575 100644
--- a/src/object.c
+++ b/src/object.c
@@ -516,7 +516,7 @@ mrb_to_int(mrb_state *mrb, mrb_value val)
return mrb_to_integer(mrb, val, "to_int");
}
-static mrb_value
+MRB_API mrb_value
mrb_convert_to_integer(mrb_state *mrb, mrb_value val, int base)
{
mrb_value tmp;
@@ -537,13 +537,17 @@ mrb_convert_to_integer(mrb_state *mrb, mrb_value val, int base)
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)) {
- return mrb_str_to_inum(mrb, val, base, TRUE);
+ goto string_conv;
}
arg_error:
mrb_raise(mrb, E_ARGUMENT_ERROR, "base specified for non string value");