summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2021-04-30 11:51:43 +0300
committerArnold D. Robbins <arnold@skeeve.com>2021-04-30 11:51:43 +0300
commit200c22e0556cdaf381d758304e69807d1b0ceff7 (patch)
treeeb0aec5dd80faba33ba05fae207fd1aef9ed0188
parentfbda8cdd8e8c5a324f1174b070aa0bdcffc5115d (diff)
downloadgawk-feature/bool.tar.gz
Fixes to awk.h.feature/bool
-rw-r--r--ChangeLog7
-rw-r--r--awk.h34
2 files changed, 26 insertions, 15 deletions
diff --git a/ChangeLog b/ChangeLog
index 95486518..5e2e98e3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2021-04-30 Arnold D. Robbins <arnold@skeeve.com>
+
+ * awk.h (boolval): Remove check for BOOL flag. It was incorrect.
+ Thanks to Andrew Schorr for the catch.
+ For Node_val, update the comment to describe the BOOL flag, and
+ move BOOL up to be alongside the flags for Node_val.
+
2021-04-28 Arnold D. Robbins <arnold@skeeve.com>
Make bools plain numbers that have bool flag instead of
diff --git a/awk.h b/awk.h
index c0f44d56..57dae1ec 100644
--- a/awk.h
+++ b/awk.h
@@ -436,6 +436,10 @@ typedef struct exp_node {
* is a hint to indicate that an integer array optimization may be
* used when this value appears as a subscript.
*
+ * The BOOL flag indicates that this number should be converted to True
+ * or False by extensions that interchange data with other languages,
+ * via JSON, XML or some other serialization mechanism.
+ *
* We hope that the rest of the flags are self-explanatory. :-)
*/
MALLOC = 0x0001, /* stptr can be free'd, i.e. not a field node pointing into a shared buffer */
@@ -445,25 +449,25 @@ typedef struct exp_node {
NUMBER = 0x0010, /* assigned as number */
USER_INPUT = 0x0020, /* user input: if NUMERIC then
* a NUMBER */
- INTLSTR = 0x0040, /* use localized version */
- NUMINT = 0x0080, /* numeric value is an integer */
- INTIND = 0x0100, /* integral value is array index;
+ BOOL = 0x0040, /* this is a boolean value */
+ INTLSTR = 0x0080, /* use localized version */
+ NUMINT = 0x0100, /* numeric value is an integer */
+ INTIND = 0x0200, /* integral value is array index;
* lazy conversion to string.
*/
- WSTRCUR = 0x0200, /* wide str value is current */
- MPFN = 0x0400, /* arbitrary-precision floating-point number */
- MPZN = 0x0800, /* arbitrary-precision integer */
- NO_EXT_SET = 0x1000, /* extension cannot set a value for this variable */
- NULL_FIELD = 0x2000, /* this is the null field */
+ WSTRCUR = 0x0400, /* wide str value is current */
+ MPFN = 0x0800, /* arbitrary-precision floating-point number */
+ MPZN = 0x01000, /* arbitrary-precision integer */
+ NO_EXT_SET = 0x02000, /* extension cannot set a value for this variable */
+ NULL_FIELD = 0x04000, /* this is the null field */
/* type = Node_var_array */
- ARRAYMAXED = 0x4000, /* array is at max size */
- HALFHAT = 0x8000, /* half-capacity Hashed Array Tree;
+ ARRAYMAXED = 0x08000, /* array is at max size */
+ HALFHAT = 0x010000, /* half-capacity Hashed Array Tree;
* See cint_array.c */
- XARRAY = 0x10000,
- NUMCONSTSTR = 0x20000, /* have string value for numeric constant */
- REGEX = 0x40000, /* this is a typed regex */
- BOOL = 0x80000, /* this is a boolean value */
+ XARRAY = 0x020000,
+ NUMCONSTSTR = 0x040000, /* have string value for numeric constant */
+ REGEX = 0x080000, /* this is a typed regex */
} flags;
long valref;
} NODE;
@@ -1998,7 +2002,7 @@ static inline bool
boolval(NODE *t)
{
(void) fixtype(t);
- if ((t->flags & (BOOL|NUMBER)) != 0)
+ if ((t->flags & NUMBER) != 0)
return ! is_zero(t);
return (t->stlen > 0);
}