summaryrefslogtreecommitdiff
path: root/awkgram.c
diff options
context:
space:
mode:
Diffstat (limited to 'awkgram.c')
-rw-r--r--awkgram.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/awkgram.c b/awkgram.c
index 657a1627..58ac3480 100644
--- a/awkgram.c
+++ b/awkgram.c
@@ -4514,10 +4514,13 @@ negate_num(NODE *n)
{
int tval = 0;
- if (! is_mpg_number(n))
+ if (! is_mpg_number(n)) {
n->numbr = -n->numbr;
+ return;
+ }
+
#ifdef HAVE_MPFR
- else if (is_mpg_integer(n)) {
+ if (is_mpg_integer(n)) {
if (! iszero(n)) {
mpz_neg(n->mpg_i, n->mpg_i);
return;
@@ -4526,9 +4529,11 @@ negate_num(NODE *n)
/*
* 0 --> -0 conversion. Requires turning the MPG integer
* into an MPFR float.
- *
- * So, convert and fall through.
*/
+
+ mpz_clear(n->mpg_i); /* release the integer storage */
+
+ /* Convert and fall through. */
tval = mpfr_set_d(n->mpg_numbr, 0.0, ROUND_MODE);
IEEE_FMT(n->mpg_numbr, tval);
n->flags &= ~MPZN;