aboutsummaryrefslogtreecommitdiffstats
path: root/io.c
diff options
context:
space:
mode:
authorjohn haque <j.eh@mchsi.com>2012-03-19 04:30:00 -0500
committerjohn haque <j.eh@mchsi.com>2012-03-19 04:30:00 -0500
commit40645cb3cb155eb59dd745af4ae0e06e729c8eb1 (patch)
tree1c24a9a6cb2ac9acc985b3f4667c7139c10c4525 /io.c
parentb5431a4825e325c61f4043e4d25e47d7891c228c (diff)
downloadegawk-40645cb3cb155eb59dd745af4ae0e06e729c8eb1.tar.gz
egawk-40645cb3cb155eb59dd745af4ae0e06e729c8eb1.tar.bz2
egawk-40645cb3cb155eb59dd745af4ae0e06e729c8eb1.zip
Add arbitrary-precision arithmetic on integers.
Diffstat (limited to 'io.c')
-rw-r--r--io.c22
1 files changed, 12 insertions, 10 deletions
diff --git a/io.c b/io.c
index c7ae06e8..78cf70a2 100644
--- a/io.c
+++ b/io.c
@@ -135,7 +135,7 @@
#ifdef HAVE_MPFR
/* increment NR or FNR */
#define INCREMENT_R(X) (do_mpfr && X == (LONG_MAX - 1)) ? \
- (mpfr_add_ui(M##X, M##X, 1, RND_MODE), X = 0) : X++
+ (mpz_add_ui(M##X, M##X, 1), X = 0) : X++
#else
#define INCREMENT_R(X) X++
#endif
@@ -400,8 +400,8 @@ nextfile(IOBUF **curfile, int skipping)
unref(FILENAME_node->var_value);
FILENAME_node->var_value = dupnode(arg);
#ifdef HAVE_MPFR
- if (FNR_node->var_value->flags & MPFN)
- mpfr_set_d(MFNR, 0.0, RND_MODE);
+ if (is_mpg_number(FNR_node->var_value))
+ mpz_set_ui(MFNR, 0);
#endif
FNR = 0;
iop = *curfile = iop_alloc(fd, fname, &mybuf, FALSE);
@@ -448,13 +448,14 @@ nextfile(IOBUF **curfile, int skipping)
void
set_FNR()
{
- (void) force_number(FNR_node->var_value);
+ NODE *n = FNR_node->var_value;
+ (void) force_number(n);
#ifdef HAVE_MPFR
- if ((FNR_node->var_value->flags & MPFN) != 0)
+ if (is_mpg_number(n))
FNR = mpg_set_var(FNR_node);
else
#endif
- FNR = FNR_node->var_value->numbr;
+ FNR = get_number_si(n);
}
/* set_NR --- update internal NR from awk variable */
@@ -462,13 +463,14 @@ set_FNR()
void
set_NR()
{
- (void) force_number(NR_node->var_value);
+ NODE *n = NR_node->var_value;
+ (void) force_number(n);
#ifdef HAVE_MPFR
- if ((NR_node->var_value->flags & MPFN) != 0)
+ if (is_mpg_number(n))
NR = mpg_set_var(NR_node);
else
#endif
- NR = NR_node->var_value->numbr;
+ NR = get_number_si(n);
}
/* inrec --- This reads in a record from the input file */
@@ -3278,7 +3280,7 @@ pty_vs_pipe(const char *command)
if (val->flags & MAYBE_NUM)
(void) force_number(val);
if (val->flags & NUMBER)
- return is_nonzero_num(val);
+ return ! iszero(val);
else
return (val->stlen != 0);
}