diff options
author | Sverker Eriksson <[email protected]> | 2014-09-04 17:37:27 +0200 |
---|---|---|
committer | Sverker Eriksson <[email protected]> | 2014-09-04 17:37:34 +0200 |
commit | f5036330d46d2cc1d5995e89ae86d1b09ac83ac4 (patch) | |
tree | 1946472f7367226395aeaf12bec29abab0ac6e65 /erts/emulator/beam | |
parent | 267cf6cd5ba5e4392718c3c6f7f6467ac01ea2b0 (diff) | |
parent | 21e4cf5b378ed378296a544d0ad8da08cf95700e (diff) | |
download | otp-f5036330d46d2cc1d5995e89ae86d1b09ac83ac4.tar.gz otp-f5036330d46d2cc1d5995e89ae86d1b09ac83ac4.tar.bz2 otp-f5036330d46d2cc1d5995e89ae86d1b09ac83ac4.zip |
Merge branch 'sverk/MIN_SMALL-to-integer' into maint
* sverk/MIN_SMALL-to-integer:
erts: Correct conversion of MIN_SMALL numeral to fixnum
OTP-12140
Diffstat (limited to 'erts/emulator/beam')
-rw-r--r-- | erts/emulator/beam/bif.c | 13 | ||||
-rw-r--r-- | erts/emulator/beam/big.c | 11 |
2 files changed, 13 insertions, 11 deletions
diff --git a/erts/emulator/beam/bif.c b/erts/emulator/beam/bif.c index f3c05d047d..a5be8e1529 100644 --- a/erts/emulator/beam/bif.c +++ b/erts/emulator/beam/bif.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1996-2013. All Rights Reserved. + * Copyright Ericsson AB 1996-2014. All Rights Reserved. * * The contents of this file are subject to the Erlang Public License, * Version 1.1, (the "License"); you may not use this file except in @@ -2891,9 +2891,6 @@ static int do_list_to_integer(Process *p, Eterm orig_list, res = big_plus_small(res, m, hp); } - if (is_big(res)) /* check if small */ - res = big_plus_small(res, 0, hp); /* includes conversion to small */ - if (neg) { if (is_small(res)) res = make_small(-signed_val(res)); @@ -2903,8 +2900,12 @@ static int do_list_to_integer(Process *p, Eterm orig_list, } } - if (is_big(res)) { - hp += (big_arity(res)+1); + if (is_not_small(res)) { + res = big_plus_small(res, 0, hp); /* includes conversion to small */ + + if (is_not_small(res)) { + hp += (big_arity(res)+1); + } } HRelease(p,hp_end,hp); } diff --git a/erts/emulator/beam/big.c b/erts/emulator/beam/big.c index e62caa6b22..a8710dd910 100644 --- a/erts/emulator/beam/big.c +++ b/erts/emulator/beam/big.c @@ -2675,9 +2675,6 @@ Eterm erts_chars_to_integer(Process *BIF_P, char *bytes, res = big_plus_small(res, m, hp); } - if (is_big(res)) /* check if small */ - res = big_plus_small(res, 0, hp); /* includes conversion to small */ - if (neg) { if (is_small(res)) res = make_small(-signed_val(res)); @@ -2687,8 +2684,12 @@ Eterm erts_chars_to_integer(Process *BIF_P, char *bytes, } } - if (is_big(res)) { - hp += (big_arity(res) + 1); + if (is_not_small(res)) { + res = big_plus_small(res, 0, hp); /* includes conversion to small */ + + if (is_not_small(res)) { + hp += (big_arity(res) + 1); + } } HRelease(BIF_P, hp_end, hp); goto bytebuf_to_integer_1_done; |