diff options
| author | Yukihiro Matsumoto <[email protected]> | 2012-06-13 17:59:37 +0900 |
|---|---|---|
| committer | Yukihiro Matsumoto <[email protected]> | 2012-06-13 17:59:37 +0900 |
| commit | 2ded555a91a63744fcc20bdd67c50ff113095303 (patch) | |
| tree | 6a296170508644b17dd8f753dc60d2a8ba0efd08 | |
| parent | 261e4d3fa0643d1e9114826486eb91ee27410f32 (diff) | |
| download | mruby-2ded555a91a63744fcc20bdd67c50ff113095303.tar.gz mruby-2ded555a91a63744fcc20bdd67c50ff113095303.zip | |
could not print 0xffffffff as an negative fixnum
| -rw-r--r-- | src/numeric.c | 35 |
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 */ |
