diff options
author | Rickard Green <rickard@erlang.org> | 2021-01-08 11:55:56 +0100 |
---|---|---|
committer | Rickard Green <rickard@erlang.org> | 2021-01-11 11:39:07 +0100 |
commit | 8fd34a6fc178b98da2934d0443e749d05d6ba896 (patch) | |
tree | f26cc9cdb406c387384115299e0ff0fa068a36e5 /lib | |
parent | 160c24acad993b91243e12c748c322fa5016638b (diff) | |
download | erlang-8fd34a6fc178b98da2934d0443e749d05d6ba896.tar.gz |
Print all 64-bit integers in base 10
Diffstat (limited to 'lib')
-rw-r--r-- | lib/erl_interface/src/misc/ei_printterm.c | 17 |
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 */ |