summaryrefslogtreecommitdiff
path: root/lib/erl_interface/src/misc
diff options
context:
space:
mode:
authorRickard Green <rickard@erlang.org>2021-01-08 11:55:56 +0100
committerRickard Green <rickard@erlang.org>2021-01-11 11:39:07 +0100
commit8fd34a6fc178b98da2934d0443e749d05d6ba896 (patch)
treef26cc9cdb406c387384115299e0ff0fa068a36e5 /lib/erl_interface/src/misc
parent160c24acad993b91243e12c748c322fa5016638b (diff)
downloaderlang-8fd34a6fc178b98da2934d0443e749d05d6ba896.tar.gz
Print all 64-bit integers in base 10
Diffstat (limited to 'lib/erl_interface/src/misc')
-rw-r--r--lib/erl_interface/src/misc/ei_printterm.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/lib/erl_interface/src/misc/ei_printterm.c b/lib/erl_interface/src/misc/ei_printterm.c
index 7c2cd2d35f..3a464377b1 100644
--- a/lib/erl_interface/src/misc/ei_printterm.c
+++ b/lib/erl_interface/src/misc/ei_printterm.c
@@ -91,8 +91,25 @@ static char *ei_big_to_str(erlang_big *b)
unsigned short *sp;
int i;
+ /* Number of 16-bit digits */
no_digits = (b->arity + 1) / 2;
+ if (no_digits <= 4) {
+ EI_ULONGLONG val;
+ buf_len = 22;
+ s = buf = malloc(buf_len);
+ if (!buf)
+ return NULL;
+ val = 0;
+ sp=b->digits;
+ for (i = 0; i < no_digits; i++)
+ val |= ((EI_ULONGLONG) sp[i]) << (i*16);
+ if (b->is_neg)
+ s += sprintf(s,"-");
+ sprintf(s, "%llu", val);
+ return buf;
+ }
+
buf_len = (!!b->is_neg /* "-" */
+ 9 /* "#integer(" */
+ 10 /* %d */