aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog4
-rw-r--r--array.c15
2 files changed, 18 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index e248bcc7..5f2794d7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2021-03-20 Arnold D. Robbins <arnold@skeeve.com>
+
+ * array.c (do_sort_up_value_type): Add logic for handling bools.
+
2021-03-08 Arnold D. Robbins <arnold@skeeve.com>
* awk.h (warn_bool, do_bool): Add function declarations.
diff --git a/array.c b/array.c
index 50efddb2..b4ce86bc 100644
--- a/array.c
+++ b/array.c
@@ -1209,11 +1209,24 @@ do_sort_up_value_type(const void *p1, const void *p2)
(void) fixtype(n1);
(void) fixtype(n2);
+ /* 3a. Bools first */
+ if ((n1->flags & BOOL) != 0 && (n2->flags & BOOL) != 0) {
+ return cmp_numbers(n1, n2);
+ }
+
+ /* 3b. Numbers next */
if ((n1->flags & NUMBER) != 0 && (n2->flags & NUMBER) != 0) {
return cmp_numbers(n1, n2);
}
- /* 3. All numbers are less than all strings. This is aribitrary. */
+ /* 3c. Bools before everything else */
+ if ((n1->flags & BOOL) != 0 && (n2->flags & BOOL) == 0) {
+ return -1;
+ } else if ((n1->flags & BOOL) == 0 && (n2->flags & BOOL) != 0) {
+ return 1;
+ }
+
+ /* 3d. All numbers are less than all strings. This is aribitrary. */
if ((n1->flags & NUMBER) != 0 && (n2->flags & STRING) != 0) {
return -1;
} else if ((n1->flags & STRING) != 0 && (n2->flags & NUMBER) != 0) {