aboutsummaryrefslogtreecommitdiff
path: root/src/bigint.cpp
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2019-03-22 10:23:18 -0400
committerGitHub <noreply@github.com>2019-03-22 10:23:18 -0400
commit127bb124a06dc93f4def23224d400f4050754674 (patch)
treec614b7a47f220378f3fb4149a0083ee144d13b63 /src/bigint.cpp
parent3560f61c1630c36dddaf46e88efc0ccc7b91cf44 (diff)
parenta3f42a5fe1bf483245e87d1084edd9ea21bce0f7 (diff)
downloadzig-127bb124a06dc93f4def23224d400f4050754674.tar.gz
zig-127bb124a06dc93f4def23224d400f4050754674.zip
Merge pull request #2091 from ziglang/bigint-print-fix
Fix bigint_append_buf
Diffstat (limited to 'src/bigint.cpp')
-rw-r--r--src/bigint.cpp10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/bigint.cpp b/src/bigint.cpp
index 4c103adce3..d3178c35c6 100644
--- a/src/bigint.cpp
+++ b/src/bigint.cpp
@@ -40,7 +40,7 @@ static uint8_t digit_to_char(uint8_t digit, bool uppercase) {
if (digit <= 9) {
return digit + '0';
} else if (digit <= 35) {
- return digit + (uppercase ? 'A' : 'a');
+ return (digit - 10) + (uppercase ? 'A' : 'a');
} else {
zig_unreachable();
}
@@ -1545,6 +1545,10 @@ void bigint_append_buf(Buf *buf, const BigInt *op, uint64_t base) {
buf_appendf(buf, "%" ZIG_PRI_u64, op->data.digit);
return;
}
+ if (op->digit_count == 1 && base == 16) {
+ buf_appendf(buf, "%" ZIG_PRI_x64, op->data.digit);
+ return;
+ }
size_t first_digit_index = buf_len(buf);
BigInt digit_bi = {0};
@@ -1556,7 +1560,7 @@ void bigint_append_buf(Buf *buf, const BigInt *op, uint64_t base) {
bigint_init_bigint(a, op);
BigInt base_bi = {0};
- bigint_init_unsigned(&base_bi, 10);
+ bigint_init_unsigned(&base_bi, base);
for (;;) {
bigint_rem(&digit_bi, a, &base_bi);
@@ -1574,7 +1578,7 @@ void bigint_append_buf(Buf *buf, const BigInt *op, uint64_t base) {
}
// reverse
- for (size_t i = first_digit_index; i < buf_len(buf); i += 1) {
+ for (size_t i = first_digit_index; i < buf_len(buf) / 2; i += 1) {
size_t other_i = buf_len(buf) + first_digit_index - i - 1;
uint8_t tmp = buf_ptr(buf)[i];
buf_ptr(buf)[i] = buf_ptr(buf)[other_i];