aboutsummaryrefslogtreecommitdiffstats
path: root/array.c
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2021-03-20 21:37:35 +0200
committerArnold D. Robbins <arnold@skeeve.com>2021-03-20 21:37:35 +0200
commite1b7b04b63a83913f62e4bfff645b940eacf7803 (patch)
tree77d9b3b261682c796dd7935ade6922fc913abecf /array.c
parent40cd3b0df6128e5b111c9b7c5c9892eac13a3497 (diff)
downloadegawk-e1b7b04b63a83913f62e4bfff645b940eacf7803.tar.gz
egawk-e1b7b04b63a83913f62e4bfff645b940eacf7803.tar.bz2
egawk-e1b7b04b63a83913f62e4bfff645b940eacf7803.zip
Handle bools for array sorting.
Diffstat (limited to 'array.c')
-rw-r--r--array.c15
1 files changed, 14 insertions, 1 deletions
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) {