From 2ded555a91a63744fcc20bdd67c50ff113095303 Mon Sep 17 00:00:00 2001 From: Yukihiro Matsumoto Date: Wed, 13 Jun 2012 17:59:37 +0900 Subject: could not print 0xffffffff as an negative fixnum --- src/numeric.c | 35 ++++++++++++++--------------------- 1 file changed, 14 insertions(+), 21 deletions(-) (limited to 'src') 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 */ -- cgit v1.2.3