summaryrefslogtreecommitdiffhomepage
path: root/src/numeric.c
diff options
context:
space:
mode:
authorYukihiro Matsumoto <[email protected]>2012-06-13 17:59:37 +0900
committerYukihiro Matsumoto <[email protected]>2012-06-13 17:59:37 +0900
commit2ded555a91a63744fcc20bdd67c50ff113095303 (patch)
tree6a296170508644b17dd8f753dc60d2a8ba0efd08 /src/numeric.c
parent261e4d3fa0643d1e9114826486eb91ee27410f32 (diff)
downloadmruby-2ded555a91a63744fcc20bdd67c50ff113095303.tar.gz
mruby-2ded555a91a63744fcc20bdd67c50ff113095303.zip
could not print 0xffffffff as an negative fixnum
Diffstat (limited to 'src/numeric.c')
-rw-r--r--src/numeric.c35
1 files changed, 14 insertions, 21 deletions
diff --git a/src/numeric.c b/src/numeric.c
index 4285ca6bc..81933237e 100644
--- a/src/numeric.c
+++ b/src/numeric.c
@@ -1165,9 +1165,16 @@ mrb_fix2str(mrb_state *mrb, mrb_value x, int base)
neg = 1;
}
*--b = '\0';
- do {
- *--b = mrb_digitmap[(int)(val % base)];
- } while (val /= base);
+ if (neg && val < 0) {
+ do {
+ *--b = mrb_digitmap[abs(val % base)];
+ } while (val /= base);
+ }
+ else {
+ do {
+ *--b = mrb_digitmap[(int)(val % base)];
+ } while (val /= base);
+ }
if (neg) {
*--b = '-';
}
@@ -1175,19 +1182,6 @@ mrb_fix2str(mrb_state *mrb, mrb_value x, int base)
return mrb_str_new2(mrb, b);
}
-mrb_value
-mrb_fix_to_s(mrb_state *mrb, mrb_value self, int argc, mrb_value *argv)
-{
- int base;
-
- if (argc == 0) base = 10;
- else {
- mrb_get_args(mrb, "i", &base);
- }
-
- return mrb_fix2str(mrb, self, base);
-}
-
/* 15.2.8.3.25 */
/*
* call-seq:
@@ -1205,13 +1199,12 @@ mrb_fix_to_s(mrb_state *mrb, mrb_value self, int argc, mrb_value *argv)
*
*/
static mrb_value
-fix_to_s(mrb_state *mrb, mrb_value self) /* fix_to_s */
+fix_to_s(mrb_state *mrb, mrb_value self)
{
- mrb_value *argv;
- int argc;
+ mrb_int base = 10;
- mrb_get_args(mrb, "*", &argv, &argc);
- return mrb_fix_to_s(mrb, self, argc, argv);
+ mrb_get_args(mrb, "|i", &base);
+ return mrb_fix2str(mrb, self, base);
}
/* 15.2.9.3.6 */