aboutsummaryrefslogtreecommitdiffstats
path: root/node.c
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2018-07-13 13:56:10 +0300
committerArnold D. Robbins <arnold@skeeve.com>2018-07-13 13:56:10 +0300
commit8dba5f4c900239d01897e2197ddd79bcf5d9b034 (patch)
treeef1ede8e0f191df3b41df219f4a98fbbe3b0d9d2 /node.c
parent18ff7b4b066fdd606a66e90b1f3b489840e09560 (diff)
downloadegawk-8dba5f4c900239d01897e2197ddd79bcf5d9b034.tar.gz
egawk-8dba5f4c900239d01897e2197ddd79bcf5d9b034.tar.bz2
egawk-8dba5f4c900239d01897e2197ddd79bcf5d9b034.zip
Output +inf, +nan etc. also, so that output can be input. Doc, tests, fixed.
Diffstat (limited to 'node.c')
-rw-r--r--node.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/node.c b/node.c
index 984cec81..54ea6627 100644
--- a/node.c
+++ b/node.c
@@ -219,10 +219,13 @@ r_format_val(const char *format, int index, NODE *s)
* < and > so that things work correctly on systems with 64 bit integers.
*/
- /* not an integral value, or out of range */
- if ((val = double_to_int(s->numbr)) != s->numbr
+ if (out_of_range(s)) {
+ const char *result = format_nan_inf(s, 'g');
+ return make_string(result, strlen(result));
+ } else if ((val = double_to_int(s->numbr)) != s->numbr
|| val <= LONG_MIN || val >= LONG_MAX
) {
+ /* not an integral value, or out of integer range */
/*
* Once upon a time, we just blindly did this:
* sprintf(sp, format, s->numbr);