aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--awk.h1
-rw-r--r--gawkapi.c8
-rw-r--r--mpfr.c16
-rw-r--r--node.c7
5 files changed, 27 insertions, 12 deletions
diff --git a/ChangeLog b/ChangeLog
index 829907ed..c489049e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -3,6 +3,13 @@
* io.c (do_find_source): On VMS, don't add the `/' separater.
Thanks to Anders Wallin.
+ MPFR minor cleanup:
+
+ * awk.h (mpfr_unset): Declare new function.
+ * mpfr.c (mpfr_unset): New function.
+ * node.c (r_unref): Call it instead of inline code.
+ * gawk_api.c (api_sym_update_scalar): Call it instead of inline code.
+
2012-11-13 Arnold D. Robbins <arnold@skeeve.com>
* symbol.c (get_symbols): Check type, not vname. Keeps
diff --git a/awk.h b/awk.h
index 2aa944c9..c3f0d8c8 100644
--- a/awk.h
+++ b/awk.h
@@ -1575,6 +1575,7 @@ extern long getenv_long(const char *name);
/* mpfr.c */
extern void set_PREC(void);
extern void set_ROUNDMODE(void);
+extern void mpfr_unset(NODE *n);
#ifdef HAVE_MPFR
extern int mpg_cmp(const NODE *, const NODE *);
extern int format_ieee(mpfr_ptr, int);
diff --git a/gawkapi.c b/gawkapi.c
index c9b2aced..ba3fc508 100644
--- a/gawkapi.c
+++ b/gawkapi.c
@@ -681,12 +681,8 @@ api_sym_update_scalar(awk_ext_id_t id,
/* r_unref: */
if ((r->flags & (MALLOC|STRCUR)) == (MALLOC|STRCUR))
efree(r->stptr);
-#ifdef HAVE_MPFR
- if (is_mpg_float(r))
- mpfr_clear(r->mpg_numbr);
- else if (is_mpg_integer(r))
- mpz_clear(r->mpg_i);
-#endif
+
+ mpfr_unset(r);
free_wstr(r);
/* make_str_node(s, l, ALREADY_MALLOCED): */
diff --git a/mpfr.c b/mpfr.c
index 434cd2be..a147150e 100644
--- a/mpfr.c
+++ b/mpfr.c
@@ -1603,6 +1603,17 @@ mpg_fmt(const char *mesg, ...)
return mesg;
}
+/* mpfr_unset --- clear out the MPFR values */
+
+void
+mpfr_unset(NODE *n)
+{
+ if (is_mpg_float(n))
+ mpfr_clear(n->mpg_numbr);
+ else if (is_mpg_integer(n))
+ mpz_clear(n->mpg_i);
+}
+
#else
void
@@ -1617,4 +1628,9 @@ set_ROUNDMODE()
/* dummy function */
}
+void
+mpfr_unset(NODE *n)
+{
+ /* dummy function */
+}
#endif
diff --git a/node.c b/node.c
index f8152bab..a857aa1d 100644
--- a/node.c
+++ b/node.c
@@ -471,12 +471,7 @@ r_unref(NODE *tmp)
efree(tmp->stptr);
#endif
-#ifdef HAVE_MPFR
- if (is_mpg_float(tmp))
- mpfr_clear(tmp->mpg_numbr);
- else if (is_mpg_integer(tmp))
- mpz_clear(tmp->mpg_i);
-#endif
+ mpfr_unset(tmp);
free_wstr(tmp);
freenode(tmp);