aboutsummaryrefslogtreecommitdiffstats
path: root/field.c
diff options
context:
space:
mode:
authorjohn haque <j.eh@mchsi.com>2012-02-19 08:44:00 -0600
committerjohn haque <j.eh@mchsi.com>2012-02-19 08:44:00 -0600
commitcb17a712ea65f6510e0000374cce4efbf4ffb902 (patch)
tree3b82a95607edb6adba2bbd49934851c6547d7703 /field.c
parent0221eb79f43f4ef5c8d74759679a501607936d19 (diff)
downloadegawk-cb17a712ea65f6510e0000374cce4efbf4ffb902.tar.gz
egawk-cb17a712ea65f6510e0000374cce4efbf4ffb902.tar.bz2
egawk-cb17a712ea65f6510e0000374cce4efbf4ffb902.zip
Finish builtins for MPFR.
Diffstat (limited to 'field.c')
-rw-r--r--field.c23
1 files changed, 15 insertions, 8 deletions
diff --git a/field.c b/field.c
index 1a0f4f43..ecee5d53 100644
--- a/field.c
+++ b/field.c
@@ -194,24 +194,31 @@ rebuild_record()
* so that unrefing a field doesn't try to unref into the old $0.
*/
for (cops = ops, i = 1; i <= NF; i++) {
- if (fields_arr[i]->stlen > 0) {
+ NODE *r = fields_arr[i];
+ if (r->stlen > 0) {
NODE *n;
getnode(n);
- if ((fields_arr[i]->flags & FIELD) == 0) {
+ if ((r->flags & FIELD) == 0) {
*n = *Null_field;
- n->stlen = fields_arr[i]->stlen;
- if ((fields_arr[i]->flags & (NUMCUR|NUMBER)) != 0) {
- n->flags |= (fields_arr[i]->flags & (NUMCUR|NUMBER));
- n->numbr = fields_arr[i]->numbr;
+ n->stlen = r->stlen;
+ if ((r->flags & (NUMCUR|NUMBER)) != 0) {
+ n->flags |= (r->flags & (NUMCUR|NUMBER));
+#ifdef HAVE_MPFR
+ if (r->flags & MPFN) {
+ mpfr_init(n->mpfr_numbr);
+ mpfr_set(n->mpfr_numbr, r->mpfr_numbr, RND_MODE);
+ } else
+#endif
+ n->numbr = r->numbr;
}
} else {
- *n = *(fields_arr[i]);
+ *n = *r;
n->flags &= ~(MALLOC|STRING);
}
n->stptr = cops;
- unref(fields_arr[i]);
+ unref(r);
fields_arr[i] = n;
assert((n->flags & WSTRCUR) == 0);
}