From 200c22e0556cdaf381d758304e69807d1b0ceff7 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 30 Apr 2021 11:51:43 +0300 Subject: Fixes to awk.h. --- ChangeLog | 7 +++++++ awk.h | 34 +++++++++++++++++++--------------- 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 + + * 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 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); } -- cgit v1.2.1